Đườ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

Flutter API

Chọn giữa Consumer, ConsumerWidget và ConsumerStatefulWidget.

Mở tài liệu API