เส้นทางการอ่าน: 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);
ขั้นตอนถัดไป
Mutations
ย้าย operations ที่เขียนไปยัง methods ของ provider และรันผ่าน ref.invoke.
เปิด Flutter API