State Management Dasar: Provider
Penjelasan
setState() cuma efektif untuk state LOKAL satu widget — untuk state yang dipakai BERSAMA banyak widget di level berbeda (mis. status login, isi keranjang belanja), dibutuhkan state management terpisah. Provider adalah package paling umum direkomendasikan Flutter resmi untuk kasus ini, memakai ChangeNotifier sebagai "model" state yang bisa didengarkan banyak widget sekaligus.
Contoh Konsep
// npm-nya Flutter: flutter pub add provider
class KeranjangModel extends ChangeNotifier {
int jumlahItem = 0;
void tambahItem() {
jumlahItem++;
notifyListeners(); // beri tahu SEMUA widget yang "mendengarkan"
}
}
// Disediakan di atas tree widget:
// ChangeNotifierProvider(
// create: (context) => KeranjangModel(),
// child: const MyApp(),
// )
// Dibaca di widget mana pun di bawahnya:
// final keranjang = context.watch<KeranjangModel>();
// Text('Item: ${keranjang.jumlahItem}')
Praktikum
Buat class TemaModel extends ChangeNotifier dengan properti isGelap (bool, awalnya false) dan method toggleTema() yang membalik nilainya lewat notifyListeners(). Tulis contoh pemakaian context.watch<TemaModel>() di sebuah widget.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
context.watch<T>() membuat widget itu OTOMATIS rebuild tiap kali notifyListeners() dipanggil — untuk kasus di mana kamu cuma perlu MEMANGGIL method-nya sekali (mis. dari onPressed tombol) TANPA perlu rebuild, pakai context.read<T>() alih-alih watch(), lebih efisien karena tidak mendaftarkan listener rebuild yang tidak perlu.