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
| 归档时间: |
|
| 查看次数: |
4063 次 |
| 最近记录: |