📚 Membuat Aplikasi Jadwal Mengajar dengan Flutter + REST API

 


Di era digital saat ini, kebutuhan untuk mengelola jadwal sekolah atau perkuliahan semakin penting. Guru, murid, maupun admin sekolah sering kali kewalahan jika jadwal hanya ditulis di papan tulis atau buku catatan. Oleh karena itu, saya membuat sebuah aplikasi Flutter sederhana bernama “Jadwal Mengajar” yang terhubung dengan REST API (MockAPI) agar data bisa diakses secara online, fleksibel, dan bisa di-update kapan saja.



---


✨ Fitur Utama Aplikasi


1. Login Multi Role


Admin → bisa menambah, mengubah, dan menghapus jadwal.


Guru → hanya melihat dan logout/login.


Murid → langsung masuk tanpa login untuk melihat jadwal.




2. Pengelolaan Jadwal per Hari


Senin – Jumat dengan list pelajaran yang bisa di-expand.


Menampilkan jam, ruangan, pakaian, dan catatan tambahan.




3. Integrasi API (CRUD)


C (Create) → Tambah jadwal baru.


R (Read) → Menampilkan jadwal per hari dari MockAPI.


U (Update) → Edit jadwal yang sudah ada.


D (Delete) → Hapus jadwal tertentu.




4. UI Modern dengan Material Design


Menggunakan ikon sesuai mata pelajaran (Matematika, Bahasa, Sejarah, dll).


Warna khusus tiap mapel agar lebih mudah dikenali.






---


📂 Struktur Project


Aplikasi ini hanya menggunakan 2 file utama:


lib/main.dart → kode utama aplikasi.


pubspec.yaml → dependency dan konfigurasi Flutter.




---


📝 Kode Lengkap main.dart


// file: lib/main.dart

import 'package:flutter/material.dart';

import 'package:http/http.dart' as http;

import 'dart:convert';


// Entry point aplikasi

void main() {

  runApp(const MyApp());

}


class MyApp extends StatelessWidget {

  const MyApp({super.key});


  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'Jadwal Mengajar',

      theme: ThemeData(

        primarySwatch: Colors.blue,

        appBarTheme: const AppBarTheme(

          backgroundColor: Colors.blue,

          foregroundColor: Colors.white,

        ),

      ),

      home: const HomePage(userRole: 'murid'),

    );

  }

}


// ==== LOGIN PAGE ====

class LoginPage extends StatefulWidget {

  const LoginPage({super.key});

  @override

  State<LoginPage> createState() => _LoginPageState();

}


class _LoginPageState extends State<LoginPage> {

  final TextEditingController usernameController = TextEditingController();

  final TextEditingController passwordController = TextEditingController();


  void login() {

    String username = usernameController.text;

    String password = passwordController.text;


    if (username == "admin" && password == "admin123") {

      Navigator.pushReplacement(

        context,

        MaterialPageRoute(builder: (context) => const HomePage(userRole: 'admin')),

      );

    } else if (username == "guru" && password == "guru123") {

      Navigator.pushReplacement(

        context,

        MaterialPageRoute(builder: (context) => const HomePage(userRole: 'guru')),

      );

    } else {

      ScaffoldMessenger.of(context).showSnackBar(

        const SnackBar(content: Text("Username atau password salah!")),

      );

    }

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(title: const Text("Login Jadwal Mengajar")),

      body: SingleChildScrollView(

        padding: const EdgeInsets.all(16.0),

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,

          children: [

            const SizedBox(height: 40),

            const Icon(Icons.school, size: 80, color: Colors.blue),

            const SizedBox(height: 20),

            const Text(

              "Login Admin/Guru",

              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),

            ),

            const SizedBox(height: 30),

            TextField(

              controller: usernameController,

              decoration: const InputDecoration(

                labelText: "Username",

                border: OutlineInputBorder(),

                prefixIcon: Icon(Icons.person),

              ),

            ),

            const SizedBox(height: 16),

            TextField(

              controller: passwordController,

              obscureText: true,

              decoration: const InputDecoration(

                labelText: "Password",

                border: OutlineInputBorder(),

                prefixIcon: Icon(Icons.lock),

              ),

            ),

            const SizedBox(height: 20),

            ElevatedButton(

              onPressed: login,

              style: ElevatedButton.styleFrom(

                minimumSize: const Size(double.infinity, 50),

              ),

              child: const Text("Login"),

            ),

            const SizedBox(height: 20),

            TextButton(

              onPressed: () {

                Navigator.pushReplacement(

                  context,

                  MaterialPageRoute(builder: (context) => const HomePage(userRole: 'murid')),

                );

              },

              child: const Text("Masuk sebagai Murid (Tanpa Login)"),

            ),

          ],

        ),

      ),

    );

  }

}


// ==== HOMEPAGE ====

class HomePage extends StatefulWidget {

  final String userRole;

  const HomePage({super.key, required this.userRole});


  @override

  State<HomePage> createState() => _HomePageState();

}


// ... [kode lanjutan sama seperti yang kamu tulis di atas]

// CRUD: fetchJadwal, createJadwal, updateJadwal, deleteJadwal

// UI: List jadwal per hari, tombol tambah/edit/delete untuk admin

// Ikon + warna otomatis sesuai mata pelajaran


> (Kode lengkap sudah kamu miliki di atas, jadi saya ringkas agar blog tidak terlalu panjang. Untuk publikasi, kamu bisa tempel full code-nya.)





---


⚙️ Konfigurasi pubspec.yaml


name: jadwal_mengajar

description: Aplikasi Jadwal Mengajar dengan Flutter

publish_to: "none"

version: 1.0.0+1


environment:

  sdk: ">=2.18.0 <4.0.0"


dependencies:

  flutter:

    sdk: flutter

  http: ^0.13.6


dev_dependencies:

  flutter_test:

    sdk: flutter

  flutter_lints: ^2.0.0


flutter:

  uses-material-design: true



---


🚀 Cara Menjalankan Aplikasi


1. Buat project Flutter baru:


flutter create jadwal_mengajar



2. Salin kode main.dart ke folder lib/.



3. Ganti pubspec.yaml dengan kode di atas lalu jalankan:


flutter pub get



4. Jalankan aplikasi:


flutter run





---


🎯 Penutup


Dengan aplikasi Jadwal Mengajar ini, pengelolaan jadwal sekolah jadi lebih mudah dan efisien. Admin bisa menambah atau mengubah jadwal kapan saja, guru bisa melihat jadwal dengan jelas, dan murid bisa langsung mengakses tanpa ribet.


Kamu bisa mengembangkan aplikasi ini lebih lanjut, misalnya dengan menambahkan autentikasi Firebase, notifikasi pengingat pelajaran, atau fitur export ke PDF agar makin bermanfaat.🚀

Comments

Popular posts from this blog

📱 Group Study Online – Belajar Bareng Teman Meski Jarak Jauh

Menguasai Loop do-while di Dart: Eksekusi Dulu, Cek Kondisi Kemudian!