当前位置: 首页 > 知识库问答 >
问题:

颤振流提供程序“列表”不是“列表”类型的子类型内铸

潘宸
2023-03-14

我正在尝试使用StreamProvider使firestore文档流中的数据在我的应用程序中可用。这是一个食谱应用程序,这是购物清单。

我有一个模型RecipeItem,其中包含关于食谱中项目的详细信息。这个文件保存一个数组,称为列表,包含列表中每个项目的映射。

下面是我与firestore的连接并设置流。我尝试获取文档,然后使用用户映射为列表中的每个项目创建RecipeItem实例。方法如下:

Stream<List<RecipeItem>> getPersonalList() {
    print('Fetching personal list');

    return _db.collection('shopping_lists').document(userId).snapshots().map(
          (DocumentSnapshot documentSnapshot) => documentSnapshot.data['list']
              .map(
                (item) =>
                    // print(item);
                    RecipeItem(
                  category: item['category'],
                  wholeLine: item['wholeLine'],
                  recipeTitle: item['recipeTitle'],
                  recipeId: item['recipeId'],
                  purchased: item['purchased'],
                ),
              )
              .toList(),
        );
  }

现在在main.dart我有一个流提供程序,寻找类型

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider<FirebaseUser>(
            //Access withing the app -> var user = Provider.of<FirebaseUser>(context);
            create: (_) => AuthService().user),
        StreamProvider<List<RecipeItem>>(
          create: (_) => PersonalListDB().getPersonalList(),
          catchError: (context, error) {
            print('This is the error from stream provider *** $error');
          },
        ),
        ChangeNotifierProvider(
          create: (_) => RecipesDB(),
        )
      ],
      child: MaterialApp(
etc etc...

当我运行此命令时,会出现以下错误:

类型“List”不是类型转换中类型“List”的子类型

我唯一能解决这个问题的方法是,如果我改变我所有的列表

我已经尝试了几件(一百万件)事情。

我在这里找到了这个帖子:获取类型列表

这告诉我. toList()可能是问题所在,因为它创建了List。所以我尝试使用List.from和. cast

非常感谢为解决这个问题和帮助我理解这个问题而提供的任何帮助。


共有1个答案

连俊智
2023-03-14

Firestore的列表(db、httpRequest等)是动态类型的,为了避免调用它们时出现问题,您可以尝试告诉映射您试图强制转换对象的类型

return _db.collection('shopping_lists').document(userId).snapshots().map<List<RecipeItem>>( //I'm not sure what kind of object this map should return, is this the method map part of the stream? if it is then it should be of type List<RecipeItem>
      (DocumentSnapshot documentSnapshot) => documentSnapshot.data['list']
          .map<RecipeItem>( //now it will know it's not a dynamic value but of type RecipeItem
            (item) =>
                // print(item);
                RecipeItem(
              category: item['category'],
              wholeLine: item['wholeLine'],
              recipeTitle: item['recipeTitle'],
              recipeId: item['recipeId'],
              purchased: item['purchased'],
            ),
          )
          .toList(),
);
 类似资料:
  • 我是颤振开发方面的新手。我犯了一个错误 列表不是“Iterable”类型的子类型 到目前为止,我已经做到了。 模范班 缅因州班内 } 我试图从2天开始解决这个问题。 请帮忙,谢谢。 这里是JSON响应,您可以检查链接

  • 我有一个问题,因为2小时。我有这个错误,我看到了更多的主题,但我不能解决它。 消息:_TypeError(类型列表不是类型映射的子类型)颤动 我的模型: 我的主题屏幕: 我尝试了更多的教程和不同的主题,但我有相同的错误。。。 非常感谢。

  • 我的JSON有点像这样: 我的模型类: 这是我的api调用: 如何获取图像。小班?如果我需要澄清我的问题,请告诉我。我得到的错误列表不是Map类型的子类型

  • 当我尝试解码json时,它会给我错误。 我的模范班 功能在我使用它的地方 json数据

  • 我正面临着一个奇怪的颤动错误。我使用json序列化。 这是我的密码 我的web api发送的数据如下 这是数组的数组。 生成错误的代码是 它给出的错误 JSON数据这里是JSON数据格式的屏幕截图

  • 我目前正在构建一个应用程序,通过医疗api读取数据,我试图解析JSON。 我为用户创建了一个模型类: 这是我试图阅读的JSON信息: 但是我得到的错误列表不是Map类型的子类型 如何修复此错误?