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),
        ),
      ],
    );
  }
}
Consumer-ի ներքին մեխանիզմը rebuild-երը ժամանակավորում է post-frame-ին, ինչը նվազեցնում է setState-during-build խնդիրները։
Օգտագործեք WidgetRef.watch-ը միայն այն արժեքների համար, որոնք պետք է rebuild առաջացնեն։
Side effect-երը պահեք build-ից դուրս․ օգտագործեք callback-ներ և invoke/refresh մեթոդներ։

Հաջորդ քայլեր

Թեստավորում

Ստուգեք container-ի lifecycle-ը, overrides-ը և async թարմացումները unit և widget թեստերում։

Բացել թեստերը

API հղում

Տեսեք ProviderScope, WidgetRef և container մեթոդների ստորագրությունները։

Բացել API հղումը