Đường đọc: watch, read và listen.
Provider cung cấp state đồng bộ. AsyncProvider trả về AsyncValue và có thể expose Future và Stream với xử lý vòng đời chặt chẽ.
Các loại provider
Chọn loại provider theo nguồn dữ liệu và tần suất cập nhật.
Provider<T>
Giá trị đồng bộ và state dẫn xuất cục bộ
AsyncProvider<T>
state điều khiển bởi Future/Stream dưới dạng AsyncValue<T>
provider.future
selector xuất ra Provider<Future<T>>
Mẹo
Nếu state đến từ mạng hoặc stream, hãy ưu tiên AsyncProvider trước. Giữ Provider cho logic đồng bộ thuần túy.
Ma trận API đọc
Dùng watch trong build path, read cho truy cập một lần và listen cho side effect.
Phổ biến nhất
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 và Stream với AsyncProvider
Một AsyncProvider có thể trả về Future hoặc gắn Stream qua 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) hủy subscription trước đó khi rebuild, invalidate và dispose.
AsyncValue là sealed class: AsyncLoading / AsyncData / AsyncError.
Pattern matching với switch giữ UI loading/error rõ ràng.
Buoc tiep theo
Mutations
Chuyển các thao tác ghi vào methods của provider và chạy chúng qua ref.invoke.
Mo Mutations