1. Pendahuluan
Dalam membangun aplikasi absensi berbasis Flutter, salah satu komponen penting adalah API dan database. Flutter hanya berfungsi untuk tampilan (frontend), sementara data pengguna, absensi, dan aktivitas harian harus disimpan di backend.
Dengan adanya API (Application Programming Interface), aplikasi Flutter bisa berkomunikasi dengan server untuk:
- Login dan register pengguna
- Menyimpan data absensi (jam masuk & keluar)
- Menyimpan aktivitas harian siswa
- Menyediakan dashboard pembimbing untuk memantau data
2. Arsitektur Sistem
Struktur sederhana aplikasi absensi terdiri dari:
- Flutter App (Frontend) → aplikasi Android/iOS yang dipakai siswa & pembimbing.
- API Backend → dibuat dengan PHP (atau Node.js, Laravel, dsb).
- Database MySQL → menyimpan data siswa, pembimbing, absensi, dan aktivitas.
Alurnya:
- Flutter mengirim request ke API (misalnya:
POST /login). - API memproses request, membaca/menulis data di MySQL.
- API mengirim response (JSON) ke Flutter.
- Flutter menampilkan hasil di aplikasi.
3. Desain Database
Contoh tabel database MySQL:
- 3.1 Tabel
users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
password VARCHAR(255),
role ENUM('siswa','pembimbing') DEFAULT 'siswa',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 3.2 Tabel
absensi
CREATE TABLE aktivitas (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
tanggal DATE,
deskripsi TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
3.3 Tabel aktivitas
CREATE TABLE aktivitas (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
tanggal DATE,
deskripsi TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Dengan desain ini:
- Siswa hanya bisa insert data ke
absensi&aktivitas. - Pembimbing hanya bisa melihat data tersebut.
4. API Endpoint
API ditulis dengan PHP (contoh pakai mysqli):
- 4.1 Login
<?php
include 'koneksi.php';
$data = json_decode(file_get_contents("php://input"), true);
$username = $data['username'];
$password = $data['password'];
$query = $conn->query("SELECT * FROM users WHERE username='$username'");
$user = $query->fetch_assoc();
if ($user && password_verify($password, $user['password'])) {
echo json_encode([
"success" => true,
"user" => $user
]);
} else {
echo json_encode(["success" => false, "message" => "Login gagal"]);
}
?>
- 4.2 Register
<?php
include 'koneksi.php';
$data = json_decode(file_get_contents("php://input"), true);
$username = $data['username'];
$password = password_hash($data['password'], PASSWORD_BCRYPT);
$role = $data['role'];
$conn->query("INSERT INTO users (username, password, role) VALUES ('$username','$password','$role')");
echo json_encode(["success" => true, "message" => "Register berhasil"]);
?>
- 4.3 Absen Masuk
<?php
include 'koneksi.php';
$data = json_decode(file_get_contents("php://input"), true);
$user_id = $data['user_id'];
$tanggal = date("Y-m-d");
$jam_masuk = date("H:i:s");
$conn->query("INSERT INTO absensi (user_id, tanggal, jam_masuk) VALUES ('$user_id','$tanggal','$jam_masuk')");
echo json_encode(["success" => true, "message" => "Absen masuk berhasil"]);
?>
- 4.4 Absen Keluar
<?php
include 'koneksi.php';
$data = json_decode(file_get_contents("php://input"), true);
$user_id = $data['user_id'];
$tanggal = date("Y-m-d");
$jam_keluar = date("H:i:s");
$conn->query("UPDATE absensi SET jam_keluar='$jam_keluar' WHERE user_id='$user_id' AND tanggal='$tanggal'");
echo json_encode(["success" => true, "message" => "Absen keluar berhasil"]);
?>
- 4.5 Aktivitas Harian
<?php
include 'koneksi.php';
$data = json_decode(file_get_contents("php://input"), true);
$user_id = $data['user_id'];
$tanggal = date("Y-m-d");
$deskripsi = $data['deskripsi'];
$conn->query("INSERT INTO aktivitas (user_id, tanggal, deskripsi) VALUES ('$user_id','$tanggal','$deskripsi')");
echo json_encode(["success" => true, "message" => "Aktivitas tersimpan"]);
?>
5. Koneksi Database (koneksi.php)
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "absensi_db";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
6. Integrasi dengan Flutter
Di Flutter, kamu tinggal pakai package http untuk mengakses API ini. Contoh login:
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<void> login(String username, String password) async {
var url = Uri.parse("http://localhost/absensi_api/login.php");
var response = await http.post(
url,
body: jsonEncode({"username": username, "password": password}),
headers: {"Content-Type": "application/json"},
);
var data = jsonDecode(response.body);
if (data['success']) {
print("Login berhasil: ${data['user']}");
} else {
print("Login gagal");
}
}
7. Kesimpulan
Dengan arsitektur Flutter + API PHP + MySQL, aplikasi absensi menjadi fleksibel:
- Frontend (Flutter) fokus di UI/UX.
- Backend (PHP API) fokus di logika bisnis & keamanan data.
- Database (MySQL) sebagai penyimpanan utama.
Struktur ini memudahkan pengembangan, perawatan, dan integrasi dengan dashboard web (yang sudah kamu buat sebelumnya).