Flutter integrācija ar skaidru container īpašumtiesību.
ProviderScope var pārvaldīt container vai saņemt to no ārpuses. Consumer API saglabā WidgetRef piekļuvi saderīgu ar Riverpod stila kodu.
ProviderScope īpašumtiesības
Container īpašumtiesības maina atbrīvošanas atbildību.
Iekšējais container
ProviderScope(child: ...) automātiski atbrīvojas
Ārējais container
ProviderScope(container: c, ...) prasa, lai izsaucējs izsauc c.dispose()
Nekontrolēts scope
UncontrolledProviderScope nekad neatbrīvo container
Bieža kļūda
Widget testos atcerieties atbrīvot ārēji ievadītu ProviderContainer, lai izvairītos no atlikušiem taimeru noplūdumiem.
Consumer varianti
Visas izvēles nodrošina WidgetRef; izvēlieties pēc widget stila un lokālā stāvokļa vajadzībām.
Lietotnes sakne
Kad lietot katru
Consumer: lokāls builder bloks mazām reaktīvām zonām.
ConsumerWidget: stateless widget ar build(context, ref).
ConsumerStatefulWidget: stateful widget ar ref iekš ConsumerState.
Piemērs: ConsumerStatefulWidget
Izmantojiet ConsumerState, kad vajadzīgs gan WidgetRef, gan lokāls maināms UI stāvoklis.
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),
),
],
);
}
}
Nākamie soļi
Testēšana
Pārbaudiet container dzīves ciklu, override un asinhronos atjauninājumus unit un widget testos.
Atvērt testēšanu