Tích hợp Flutter với quyền sở hữu container rõ ràng.

ProviderScope có thể sở hữu một container hoặc nhận một container từ bên ngoài. Các API Consumer giữ cho việc truy cập WidgetRef tương thích với mã theo phong cách Riverpod.

Quyền sở hữu ProviderScope

Quyền sở hữu container thay đổi trách nhiệm dispose.

Container nội bộ

ProviderScope(child: ...) sẽ tự động dispose

Container bên ngoài

ProviderScope(container: c, ...) yêu cầu người gọi gọi c.dispose()

Scope không được kiểm soát

UncontrolledProviderScope không bao giờ dispose container

Lỗi thường gặp

Trong widget test, hãy nhớ dispose ProviderContainer được tiêm từ bên ngoài để tránh rò rỉ timer đang chờ.

Các biến thể Consumer

Tất cả lựa chọn đều hiển thị WidgetRef; hãy chọn theo kiểu widget và nhu cầu trạng thái cục bộ.

Thư mục gốc ứng dụng

Khi nào dùng từng loại

Consumer: khối builder cục bộ cho các vùng reactive nhỏ.
ConsumerWidget: widget stateless với build(context, ref).
ConsumerStatefulWidget: widget stateful với ref bên trong ConsumerState.

Ví dụ: ConsumerStatefulWidget

Dùng ConsumerState khi bạn cần cả WidgetRef lẫn trạng thái UI cục bộ có thể thay đổi.

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),
        ),
      ],
    );
  }
}
Nội bộ của Consumer lập lịch rebuild sang sau frame, giúp giảm các lỗi setState trong lúc build.
Chỉ dùng WidgetRef.watch cho những giá trị cần kích hoạt rebuild.
Giữ side effect ra ngoài build; dùng callback và các phương thức invoke/refresh.

Các bước tiếp theo

Kiểm thử

Kiểm tra vòng đời container, các override và cập nhật async trong unit test và widget test.

Mở phần kiểm thử

Tài liệu API

Xem chữ ký của ProviderScope, WidgetRef và các phương thức container.

Mở tài liệu API