参数类型“AsyncSnapshot<Object?>”不能分配给参数类型“Map<String, dynamic>”

Posted

技术标签:

【中文标题】参数类型“AsyncSnapshot<Object?>”不能分配给参数类型“Map<String, dynamic>”【英文标题】:The argument type 'AsyncSnapshot<Object?>' can't be assigned to the parameter type 'Map<String, dynamic>' 【发布时间】:2021-11-07 13:12:50 【问题描述】:

我有一个工厂方法将 json 转换为一个对象,该对象接受 Map json 作为来自 sqlite 数据库的参数,如下所示

 factory Lecturer.fromJson(Map<String, dynamic> json)=>Lecturer(
    name:json['name'],
    email: json['email'],
  );

数据在未来的构建器中返回并像这样访问

          FutureBuilder(
              future: DB.getLecturer(),
              builder: (_,lect)
                if(!lect.hasData)
                  return CircularProgressIndicator();
                
               Lecturer l=Lecturer.fromJson(lect.data[0]);
              ),

但是在将 Flutter 升级到更新版本后,我意识到 SQL 查询的返回类型不再是 Map 而是 Map ,我现在从上周运行良好的代码中得到以下错误。请任何帮助将不胜感激

Error: The operator '[]' isn't defined for the class 'Object?'

【问题讨论】:

你在DB.getLecturer()里面做什么,为什么不从未来收到Lecturer 【参考方案1】:

在您的构建器中将 lect 类型指定为 AsyncSnapshot:

      builder: (_, AsyncSnapshot lect)
        if(!lect.hasData)
          return CircularProgressIndicator();
                       
           Lecturer l=Lecturer.fromJson(lect.data[0]);
          

【讨论】:

以上是关于参数类型“AsyncSnapshot<Object?>”不能分配给参数类型“Map<String, dynamic>”的主要内容,如果未能解决你的问题,请参考以下文章

获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'

给定传递给它的参数类型,如何确定函数参数的类型?

参数类型“Type”不能分配给参数类型“FirebaseUser”

类型提示,其中一个参数是另一个参数的类型

参数类型“对象?”不能分配给参数类型'String'最新版本

Python参数类型以及常见的坑