Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter

Posted

技术标签:

【中文标题】Dart 未处理的异常:类型 \'List<dynamic>\' 不是类型 \'Family\' 的子类型,- Flutter【英文标题】:Dart Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Family', - FlutterDart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter 【发布时间】:2021-08-18 08:16:54 【问题描述】:

我正在尝试将 Firebase Firestore 中的数据添加到包含 Provider 的列表中。我得到了一个错误。我对 Provider 很陌生,所以我可能在做一些傻事。

“Dart 未处理的异常:'List' 类型不是'Family' 类型的子类型,”。

family_view.dart

class FamilyView extends StatelessWidget 
  Widget familyMember(BuildContext context) 
    var family = Provider.of<Family>(context);

    CollectionReference ref = FirebaseFirestore.instance.collection("users");

    ref.doc(user.uid)..get().then((val) 
      family = val["family"];
      print(family);
    );

    return ListView.builder(
        itemBuilder: (BuildContext context, int index) 
          return Container(
            child: Column(
              children: [
                ListTile(
                  title: Text(family[index]["name"]),
                ),
                Divider(
                  height: 2,
                ),
              ],
            ),
          );
        ,
        itemCount: family.length);
  

family_provider.dart

import 'package:flutter/material.dart';

class Family with ChangeNotifier 
  List _family = [];

  List get family 
    return [..._family];
  

【问题讨论】:

你能显示什么值 "family = val["family"];"有吗? 我不确定它有什么,但我认为它是相等的:["name": "Killian"] 【参考方案1】:

我认为该代码没有问题,如果 family 是您所说的那样,它是一个包含 ["name": "Killian"] 的列表,它应该可以工作。

我试过了,没发现问题

  Widget build(BuildContext context) 
List<dynamic> family = ['name': 'Killian', ['name': 'Killian', 'name': 'Killian']];
return Scaffold(

  body: Center(
    child: ListView.builder(
    itemBuilder: (BuildContext context, int index) 
      return Container(
        child: Column(
          children: [
            ListTile(
              title: Text(family[1][index]["name"]),
            ),
            Divider(
              height: 2,
            ),
          ],
        ),
      );
    ,
    itemCount: family.length,))
  );    

最终出现在屏幕上的是许多 ListTiles,上面写着 Killian 等于家庭列表的长度。

也许你收到了一些你意想不到的东西。

我错过了什么吗?

【讨论】:

数据来自 Firebase 会有所作为吗? prnt.sc/13m1vae 哦,抱歉,等一下,它正在从 Firebase 接收整个文档 啊,我明白了,你照片上的文件对吗?让我看看 试试标题:Text(family[1][index]["name"]), "未为类型 'Family' 定义运算符 '[]'。尝试定义运算符 '[]'。" - 这就是我得到的错误【参考方案2】:

我没有找出问题所在,但我认为我遵循的 tut 不适合我的用例,所以我使用了 Stream Builder。

【讨论】:

以上是关于Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter的主要内容,如果未能解决你的问题,请参考以下文章

错误:flutter/lib/ui/ui_dart_state.cc(157) 未处理的异常:类型 'Future<dynamic>' 不是类型 'FutureOr<Null>

未处理的异常:从 jsonplaceholder.typecode.com/photos 获取 Json 时,类型“List<dynamic>”不是“Map<String, dyna

未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振

未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic

未处理的异常:类型“List<dynamic>”不是“List<CustomerTransactionDetail>”类型的子类型

未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型