flutter - 使用 Provider 的长度为空
问题描述
应用程序运行顺利。但是错误显示在控制台上。
在 null 上调用了 getter 'length'。接收者:空尝试调用:长度用户创建的导致错误的小部件的祖先是:
StreamProvider> file:///Users/Documents/flutter_job_manager/lib/components/router.dart:23:24
我将 Firebase 云存储与 Provider 一起使用
错误来了:(在我的generateRoute上)
case AddCategory.route:
return MaterialPageRoute(
builder: (_) => StreamProvider<List<CategoryModel>>.value(
value: DatabaseService().streamCategories(),
child: AddCategory()
)
);
只是要知道:
streamCategories
在 DatabaseService()
Stream<List<CategoryModel>> streamCategories() {
var ref = _db.collection('categories');
return ref.snapshots().map((list) =>
list.documents.map((doc) => CategoryModel.fromFirestore(doc)).toList());
}
AddCategory
在 StatelessWidget
StreamProvider<List<CategoryModel>>.value(
value: db.streamCategories(),
child:ListView.builder(
itemCount: category.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(
category[index].categoryName,
),
);
}),
))
解决方案
我补充说initialData
。现在控制台上没有错误..
return MaterialPageRoute(
builder: (_) => StreamProvider<List<CategoryModel>>.value(
initialData: [CategoryModel(categoryName: "no current categories")],
value: DatabaseService().streamCategories(),
child: AddCategory()
)
);
推荐阅读
- python - logits 和 labels 必须是可广播的,labels 和 logits 维度不匹配
- regex - 如何使用正则表达式提取信息
- php - 在 PHP 中的 mySQL Server 上执行存储过程时如何获取 lastInsertID?
- javascript - 如何在反应中没有eval()的情况下从一个输入计算值
- javascript - 不兼容的 Bable 版本 React
- javascript - 通过调用返回要打开的jsp名称的java方法打开新标签jsp
- ios - 删除collectionView中特定位置的特定单元格
- julia - 如何在 Julia 中表示抽象时间
- python - 由于版本问题,安装 virt-manager 时出错
- javascript - NodeJS:发送电子邮件(例如向我的应用程序的用户发送通知)无需对其进行身份验证或接收电子邮件