Integrasi Flutter dengan kepemilikan container yang eksplisit.
ProviderScope dapat memiliki container sendiri atau menerima container dari luar. API Consumer menjaga akses WidgetRef tetap kompatibel dengan kode bergaya Riverpod.
Kepemilikan ProviderScope
Kepemilikan container mengubah tanggung jawab dispose.
Container internal
ProviderScope(child: ...) di-dispose secara otomatis
Container eksternal
ProviderScope(container: c, ...) mengharuskan c.dispose() dipanggil oleh pemanggil
Scope tak terkelola
UncontrolledProviderScope tidak pernah melakukan dispose pada container
Jebakan umum
Dalam widget test, ingat untuk dispose ProviderContainer yang diinjeksi dari luar agar terhindar dari kebocoran timer yang masih menunggu.
Varian Consumer
Semua opsi mengekspos WidgetRef; pilih berdasarkan gaya widget dan kebutuhan state lokal.
Akar aplikasi
Kapan menggunakan masing-masing
Consumer: blok builder lokal untuk area reaktif kecil.
ConsumerWidget: widget stateless dengan build(context, ref).
ConsumerStatefulWidget: widget stateful dengan ref di dalam ConsumerState.
Contoh: ConsumerStatefulWidget
Gunakan ConsumerState saat Anda membutuhkan WidgetRef sekaligus UI state lokal yang dapat diubah.
class HomePage extends ConsumerStatefulWidget {
const HomePage({super.key});
@override
ConsumerState<HomePage> createState() => _HomePageState();
}
class _HomePageState extends ConsumerState<HomePage> {
bool expanded = false;
@override
Widget build(BuildContext context) {
final user = ref.watch(currentUser);
return Column(
children: [
Text('$user'),
Switch(
value: expanded,
onChanged: (v) => setState(() => expanded = v),
),
],
);
}
}
Langkah Berikutnya
Pengujian
Validasi lifecycle container, override, dan pembaruan asinkron dalam unit test dan widget test.
Buka PengujianReferensi API
Lihat signature untuk ProviderScope, WidgetRef, dan metode container.
Buka Referensi API