Container-ийн тодорхой эзэмшилтэй Flutter интеграц.

ProviderScope нь container-ийг өөрөө эзэмшиж болно эсвэл гаднаас хүлээн авч болно. Consumer API-үүд WidgetRef-д хандах боломжийг Riverpod маягийн кодтой нийцтэй байлгадаг.

ProviderScope-ийн эзэмшил

Container-ийн эзэмшил нь dispose хийх хариуцлагыг өөрчилнө.

Дотоод container

ProviderScope(child: ...) автоматаар dispose хийгдэнэ

Гадаад container

ProviderScope(container: c, ...) нь дуудсан талд c.dispose() шаардана

Хяналтгүй scope

UncontrolledProviderScope нь container-ийг хэзээ ч dispose хийхгүй

Түгээмэл алдаа

Widget test-үүдэд гаднаас оруулсан ProviderContainer-ийг заавал dispose хийж, хүлээгдэж буй timer leak-үүдээс сэргийлээрэй.

Consumer-ийн хувилбарууд

Бүх сонголт WidgetRef-ийг ил гаргана; widget-ийн хэв маяг болон орон нутгийн state-ийн хэрэгцээгээр сонгоорой.

Програмын үндэс

Альийг нь хэзээ ашиглах вэ

Consumer: жижиг reactive хэсгүүдэд зориулсан орон нутгийн builder блок.
ConsumerWidget: build(context, ref) бүхий stateless widget.
ConsumerStatefulWidget: ConsumerState дотор ref-тэй stateful widget.

Жишээ: ConsumerStatefulWidget

WidgetRef болон орон нутгийн өөрчлөгдөх UI state хоёулаа хэрэгтэй үед ConsumerState ашиглаарай.

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-ийн дараа төлөвлөдөг тул build үед setState дуудах асуудлыг багасгана.
WidgetRef.watch-ийг зөвхөн rebuild үүсгэх ёстой утгуудад ашиглаарай.
Side effect-үүдийг build-ийн гадна байлга; callback болон invoke/refresh аргуудыг ашиглаарай.

Дараагийн алхмууд

Тестлэлт

Container-ийн lifecycle, override-ууд, async шинэчлэлүүдийг unit болон widget test-үүдээр шалгаарай.

Тестийг нээх

API лавлах

ProviderScope, WidgetRef болон container-ийн аргуудын сигнатурыг үзнэ үү.

API лавлахыг нээх