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),
        ),
      ],
    );
  }
}
Mekanisme internal Consumer menjadwalkan rebuild ke post-frame, sehingga mengurangi masalah setState saat build.
Gunakan WidgetRef.watch hanya untuk nilai yang memang harus memicu rebuild.
Simpan side effect di luar build; gunakan callback dan metode invoke/refresh.

Langkah Berikutnya

Pengujian

Validasi lifecycle container, override, dan pembaruan asinkron dalam unit test dan widget test.

Buka Pengujian

Referensi API

Lihat signature untuk ProviderScope, WidgetRef, dan metode container.

Buka Referensi API