Penyepaduan Flutter dengan pemilikan container yang jelas.
ProviderScope boleh memiliki container sendiri atau menerima container dari luar. API Consumer mengekalkan akses WidgetRef yang serasi dengan kod gaya Riverpod.
Pemilikan ProviderScope
Pemilikan container mengubah tanggungjawab disposal.
Container dalaman
ProviderScope(child: ...) dibuang secara automatik
Container luaran
ProviderScope(container: c, ...) memerlukan c.dispose() oleh pemanggil
Scope tidak dikawal
UncontrolledProviderScope tidak pernah membuang container
Perangkap biasa
Dalam ujian widget, ingat untuk membuang ProviderContainer yang disuntik dari luar bagi mengelakkan kebocoran timer yang tertinggal.
Varian Consumer
Semua pilihan mendedahkan WidgetRef; pilih berdasarkan gaya widget dan keperluan keadaan setempat.
Akar aplikasi
Bila hendak menggunakan setiap satu
Consumer: blok builder setempat untuk kawasan reaktif yang kecil.
ConsumerWidget: widget stateless dengan build(context, ref).
ConsumerStatefulWidget: widget stateful dengan ref di dalam ConsumerState.
Contoh: ConsumerStatefulWidget
Gunakan ConsumerState apabila anda memerlukan WidgetRef dan juga keadaan UI setempat yang boleh 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 seterusnya
Pengujian
Sahkan kitar hayat container, override, dan kemas kini async dalam ujian unit dan widget.
Buka Pengujian