首页 > 解决方案 > 使用 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,
                        ),
                  );
                }),
          ))

标签: flutterdartflutter-provider

解决方案


我补充说initialData。现在控制台上没有错误..

  return MaterialPageRoute(
      builder: (_) => StreamProvider<List<CategoryModel>>.value(
        initialData: [CategoryModel(categoryName: "no current categories")],
        value: DatabaseService().streamCategories(),
          child:  AddCategory()
      )
    );

推荐阅读