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),
        ),
      ],
    );
  }
}
Bahagian dalaman Consumer menjadualkan rebuild selepas frame, sekali gus mengurangkan masalah setState semasa build.
Gunakan WidgetRef.watch hanya untuk nilai yang patut mencetuskan rebuild.
Kekalkan side effect di luar build; gunakan callback serta kaedah invoke/refresh.

Langkah seterusnya

Pengujian

Sahkan kitar hayat container, override, dan kemas kini async dalam ujian unit dan widget.

Buka Pengujian

Rujukan API

Lihat tandatangan bagi ProviderScope, WidgetRef, dan kaedah container.

Buka Rujukan API