Riverpod 错误:未定义类“ScopedReader”

tom*_*edx 7 dart flutter riverpod

现在我使用hooks_riverpod包来管理状态。然后我想使用 FutureProvider 从 firestore 获取数据。我阅读了这个官方文档(API参考)。链接上的示例表示 UI 将如下所示:

Widget build(BuildContext, ScopedReader watch) {
  AsyncValue<Configuration> config = watch(configProvider);

  return config.when(
    loading: () => const CircularProgressIndicator(),
    error: (err, stack) => Text('Error: $err'),
    data: (config) {
      return Text(config.host);
    },
  );
}
Run Code Online (Sandbox Code Playgroud)

我按照它说的做了,但收到错误“未定义的类'ScopedReader'”。

我的代码如下。

提供商定义

final quizListProvider = FutureProvider<List>((ref) async {
  FirebaseFirestore firestore = FirebaseFirestore.instance;
  final quizPack = ref.watch(quizPackProvider).state;
  List<Map> quizList = [];
  for (int i = 0; i < quizPack.length; i++) {
    final content = await firestore.collection('quizes').doc(quizPack[i]).get();
    quizList.add(content.data()!);
  }
  return quizList;
});
Run Code Online (Sandbox Code Playgroud)

用户界面

class Quiz extends ConsumerWidget {
  @override
  Widget build(BuildContext, ScopedReader watch) {
    AsyncValue<List> quizList = watch(quizListProvider);

    return quizList.when(
      data: (quizList) {
        return Scaffold(
         some widgets are here
        );
      },
      loading: () => const CircularProgressIndicator(),
      error: (err, stack) => Text('Error: $err'),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样。你能帮我吗?

dan*_*Pyk 12

Riverpod 的创建者将 ScopedReader 更改为 WidgetRef,现在您应该如何使用它:

class Example extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    int count = ref.watch(counterProvider);
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

根据变更日志 - https://pub.dev/packages/flutter_riverpod/versions/1.0.0-dev.11/changelog#100-dev0