如何解决Flutter 如何获取 Provider 的值
我的代码中有这个 Provider。它假设返回列表
class ServingProvider extends ChangeNotifier {
List<Serving> servings = [];
getServings() {
Firestore.instance
.collection('servings')
.getDocuments()
.then((value) => value.documents)
.then((value) =>
value.map((serving) => Serving.fromJson(serving.data)).toList())
.then((value) => servings.addAll(value))
.then((value) => notifyListeners());
print(servings);
}
// List<Serving> get servings => servings;
}
class KMultiScrollWheel extends StatelessWidget {
final String title;
final String value;
final BuildContext passedContext;
final String dialogTitle;
KMultiScrollWheel({
@required this.title,this.value,@required this.passedContext,this.dialogTitle,});
@override
Widget build(BuildContext context) {
final servings = Provider.of<ServingProvider>(context).servings;
print(servings)
这是我班级的包装。
ChangeNotifierProvider(
create: (_) => ServingProvider(),child: KMultiScrollWheel(
title: 'Serving Size',passedContext: context,dialogTitle: 'Select Serving',),
我来自 React,我完全迷失了一些应该相当简单的东西。提前致谢。
最后一个问题,当我可以访问已经在顶部声明的服务时,使用 get 方法有什么意义。
解决方法
当您使用实时数据库时,请使用 StreamProvider
而不是 ChangeNotifierProvider
,此 medium article 可以帮助您
我是新手,无法发表评论,因为我不确定这是否可行,但我没有看到您调用 getServings 方法,所以您的列表可能还没有填满?
你可以尝试这样的事情:
final servingsProvider = Provider.of<ServingProvider>(context);
(await) servingsProvider.getServings(); //and make getServings() async since it connects to Firebase
print(servingsProvider.servings);
当然,你应该在未来或流构建器中处理它,以呈现它。
,我认为 getServings
是一个 Future 函数,因此您必须处理 servings 为 null 的情况。您可以简单地在 ServingProvider
的构造函数中添加 getServings:
class ServingProvider extends ChangeNotifier {
ServingProvider(){
// call getServings in constructor,notify listener when servings update
getServings();
}
...
并自行处理KMultiScrollWheel build
中的空服务。
其他方式是FutureProvider(在数据未准备好时设置initialData)或StreamProvider。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。