Integrare Flutter cu proprietate explicită a containerului.
ProviderScope poate deține un container sau îl poate primi din exterior. API-urile Consumer păstrează accesul la WidgetRef compatibil cu codul de stil Riverpod.
Proprietatea ProviderScope
Proprietatea containerului schimbă responsabilitatea pentru eliberare.
Container intern
ProviderScope(child: ...) se eliberează automat
Container extern
ProviderScope(container: c, ...) necesită c.dispose() din partea apelantului
Scop necontrolat
UncontrolledProviderScope nu eliberează niciodată containerul
Capcană frecventă
În testele de widget, nu uita să eliberezi ProviderContainer injectat din exterior pentru a evita scurgerile de timere în așteptare.
Variante de Consumer
Toate opțiunile expun WidgetRef; alege în funcție de stilul widget-ului și de nevoile de stare locală.
Rădăcina aplicației
Când să le folosești
Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.
Exemplu: ConsumerStatefulWidget
Folosește ConsumerState când ai nevoie atât de WidgetRef, cât și de stare UI locală, mutabilă.
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),
),
],
);
}
}
Pașii următori
Testare
Validează ciclul de viață al containerului, suprascrierile și actualizările asincrone în teste unitare și de widget.
Deschide testareaReferință API
Vezi semnăturile pentru ProviderScope, WidgetRef și metodele containerului.
Deschide referința API