Riverpod 错误:未定义的类“ScopedReader”

Posted

技术标签:

【中文标题】Riverpod 错误:未定义的类“ScopedReader”【英文标题】:Riverpod error: Undefined class 'ScopedReader' 【发布时间】:2021-10-17 05:28:17 【问题描述】:

现在我使用hooks_riverpod 包来管理状态。 然后我想使用 FutureProvider 从 firestore 获取数据。 我阅读了这个官方文档(API reference)。 链接上的示例表示 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);
    ,
  );

我按照它说的做了,但是我收到了一个错误“Undefined class '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;
);

用户界面

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'),
    );
  

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

【问题讨论】:

【参考方案1】:

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

class Example extends ConsumerWidget 
  @override
  Widget build(BuildContext context, WidgetRef ref) 
    int count = ref.watch(counterProvider);
    ...
  

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

【讨论】:

以上是关于Riverpod 错误:未定义的类“ScopedReader”的主要内容,如果未能解决你的问题,请参考以下文章

我收到错误:未定义的类“必需”。尝试使用 required 关键字时

使用教程中的 Javafx 类对游戏进行编程并遇到未定义的类错误

定义2个有关联的类时,产生的使用了未定义类型的错误

错误:未定义的类常量'MYSQL_ATTR_USE_BUFFERED_QUERY'

Coffeescript 未定义的类?

使用 Firebase 存储时未定义的类 StorageReference