Flutter ինտեգրում՝ container-ի բացահայտ ownership-ով։
ProviderScope-ը կարող է ունենալ container-ը կամ ստանալ այն արտաքինից։ Consumer API-ները WidgetRef հասանելիությունը համատեղելի են պահում Riverpod-style կոդի հետ։
ProviderScope-ի ownership
Container-ի ownership-ը փոխում է dispose-ի պատասխանատվությունը։
Ներքին container
ProviderScope(child: ...) ավտոմատ կերպով dispose է լինում
Արտաքին container
ProviderScope(container: c, ...) պահանջում է, որ caller-ը կանչի c.dispose()
Անվերահսկելի scope
UncontrolledProviderScope-ը երբեք չի dispose անում container-ը
Ընդհանուր թակարդ
Widget թեստերում հիշեք dispose անել արտաքինից ներարկված ProviderContainer-ը, որպեսզի խուսափեք pending timer leak-երից։
Consumer-ի տարբերակներ
Բոլոր տարբերակները բացահայտում են WidgetRef-ը․ ընտրեք ըստ widget-ի ոճի և տեղական վիճակի կարիքների։
Հավելվածի արմատ
Երբ ինչ օգտագործել
Consumer: փոքր ռեակտիվ հատվածների համար տեղական builder բլոկ։
ConsumerWidget: stateless widget՝ build(context, ref)-ով։
ConsumerStatefulWidget: stateful widget՝ ConsumerState-ի ներսում գտնվող ref-ով։
Օրինակ: ConsumerStatefulWidget
Օգտագործեք ConsumerState-ը, երբ պետք է թե՛ WidgetRef, թե՛ տեղական փոփոխվող UI վիճակ։
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),
),
],
);
}
}
Հաջորդ քայլեր
Թեստավորում
Ստուգեք container-ի lifecycle-ը, overrides-ը և async թարմացումները unit և widget թեստերում։
Բացել թեստերը