ການລວມ Flutter ພ້ອມການຄອບຄອງ container ຢ່າງຊັດເຈນ.

ProviderScope ສາມາດເປັນເຈົ້າຂອງ container ຫຼືຮັບ container ຈາກພາຍນອກ. Consumer API ຮັກສາການເຂົ້າເຖິງ WidgetRef ໃຫ້ສອດຄ່ອງກັບໂຄດແບບ Riverpod.

ການຄອບຄອງ ProviderScope

ການຄອບຄອງ container ຈະປ່ຽນຄວາມຮັບຜິດຊອບໃນການ dispose.

Container ພາຍໃນ

ProviderScope(child: ...) ຈະ dispose ອັດຕະໂນມັດ

Container ພາຍນອກ

ProviderScope(container: c, ...) ຕ້ອງໃຫ້ຜູ້ເອີ້ນ c.dispose()

Scope ບໍ່ຖືກຄວບຄຸມ

UncontrolledProviderScope ບໍ່ເຄີຍ dispose container

ຈຸດທີ່ຜິດພາດບ່ອຍ

ໃນ widget tests ຈົ່ງຈື່ຈຳໃຫ້ dispose ProviderContainer ທີ່ຖືກສົ່ງມາຈາກພາຍນອກ ເພື່ອຫຼີກລ້ຽງ pending timer leaks.

ຮູບແບບ Consumer

ທຸກຕົວເລືອກຈະເປີດ WidgetRef; ເລືອກຕາມຮູບແບບ widget ແລະຄວາມຕ້ອງການ state ທ້ອງຖິ່ນ.

ຮາກຂອງແອັບ

ເມື່ອໃດຄວນໃຊ້ແຕ່ລະຢ່າງ

Consumer: ບລັອກ builder ທ້ອງຖິ່ນສຳລັບພື້ນທີ່ reactive ຂະໜາດນ້ອຍ.
ConsumerWidget: widget ແບບ stateless ພ້ອມ build(context, ref).
ConsumerStatefulWidget: widget ແບບ stateful ທີ່ມີ ref ຢູ່ໃນ ConsumerState.

ຕົວຢ່າງ: ConsumerStatefulWidget

ໃຊ້ ConsumerState ເມື່ອທ່ານຕ້ອງການທັງ WidgetRef ແລະ UI state ທີ່ປ່ຽນແປງໄດ້ໃນທ້ອງຖິ່ນ.

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 ໄປຫຼັງ frame ເພື່ອຫຼຸດບັນຫາ setState ໃນຂະນະ build.
ໃຊ້ WidgetRef.watch ສຳລັບຄ່າທີ່ຄວນກະຕຸ້ນ rebuild ເທົ່ານັ້ນ.
ຮັກສາ side effects ໄວ້ນອກ build; ໃຊ້ callbacks ແລະວິທີ invoke/refresh.

ຂັ້ນຕອນຕໍ່ໄປ

ການທົດສອບ

ກວດສອບ lifecycle ຂອງ container, overrides ແລະ async updates ໃນ unit ແລະ widget tests.

ເປີດການທົດສອບ

API ອ້າງອີງ

ເບິ່ງ signatures ຂອງ ProviderScope, WidgetRef ແລະ methods ຂອງ container.

ເປີດ API ອ້າງອີງ