เส้นทางการอ่าน: watch, read และ listen.

Provider ให้ state แบบ synchronous. AsyncProvider คืน AsyncValue และสามารถ expose Future และ Stream ด้วยการจัดการ lifecycle ที่เข้มงวด.

ประเภทของ provider

เลือกประเภท provider ตามแหล่งข้อมูลและความถี่การอัปเดต.

Provider<T>

ค่าซิงโครนัสและ state ที่คำนวณในเครื่อง

AsyncProvider<T>

state ที่ขับเคลื่อนด้วย Future/Stream เป็น AsyncValue<T>

provider.future

selector ที่ expose Provider<Future<T>>

เคล็ดลับ

ถ้า state มาจาก network หรือ stream ให้เลือก AsyncProvider ก่อน เก็บ Provider ไว้สำหรับ logic แบบ synchronous ล้วน.

ตาราง API การอ่าน

ใช้ watch ใน build path, read สำหรับการเข้าถึงครั้งเดียว และ listen สำหรับ side effect.

ที่ใช้บ่อยที่สุด

watch / read / listen

ref.watch(provider)  : subscribe and rebuild when value changes.
ref.read(provider)   : read current snapshot without subscribing.
container.listen(...) : callback-driven updates; optional fireImmediately.

Future และ Stream กับ AsyncProvider

AsyncProvider เดียวสามารถคืน Future หรือผูก Stream ผ่าน ref.emit(stream).

final currentUser = AsyncProvider<User>((ref) async {
  final api = ref.watch(apiProvider);
  return api.me();
});

final liveUser = AsyncProvider<User>((ref) {
  final stream = ref.watch(apiProvider).live();
  ref.emit(stream);
  return const User(name: 'Loading...');
}, autoDispose: true, autoDisposeDelay: const Duration(milliseconds: 250));

// Await as Future
final user = await ref.watch(currentUser.future);
ref.emit(stream) ยกเลิก subscription ก่อนหน้าระหว่าง rebuild, invalidate และ dispose.
AsyncValue เป็น sealed class: AsyncLoading / AsyncData / AsyncError.
pattern matching กับ switch ทำให้ UI การโหลด/ข้อผิดพลาดชัดเจน.

ขั้นตอนถัดไป

Mutations

ย้าย operations ที่เขียนไปยัง methods ของ provider และรันผ่าน ref.invoke.

เปิด Flutter API

Flutter API

เลือก между Consumer, ConsumerWidget และ ConsumerStatefulWidget.

เปิด API Reference