Flutter String,dynamic'不是类型的子类型

时间:2019-11-26 19:09:07

标签: flutter

尝试转到详细信息页面时出现此错误:

类型'_InternalLinkedHashMap'不是类型'用户'的子类型

onTap: (){
       print(posts['items'][index]); //return flutter ( 4824): {empno: 7839, ename: KING....
       Navigator.push(context,
       new MaterialPageRoute(builder: (context) => DetailPage(posts['items'][index]))
      );
},


class DetailPage extends StatelessWidget {

  final User user;

  DetailPage(this.user);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(user.ename),
        )
    );
  }
}

2 个答案:

答案 0 :(得分:1)

我猜你有一个这样的用户模型

class User {
  final String empno;
  final String ename;

  User({this.empno, this.ename});
}

您需要将用户传递到“详细信息”页面而不是“地图”。试试

onTap: (){
       print(posts['items'][index]); 
       User _user = User(
           empno: posts['items'][index].empno
           ename: posts['items'][index].ename
       );
       print(_user);
       Navigator.push(context,
       new MaterialPageRoute(builder: (context) => DetailPage(_user))
      );
},

答案 1 :(得分:0)

如您在print()函数中所见,posts['items'][index]的结果为{empno: 7839, ename: KING...。在DetailPage构造函数中,您正在等待User对象,并且正在传递HashMap。您必须将User对象传递给此构造函数才能使其正常工作。否则,如果要传递此LinkedHashMap,则代码应如下所示:

class DetailPage extends StatelessWidget {

  final Map<String, dynamic> user;

  DetailPage(this.user);

  ...
}

然后您将可以通过键访问此地图的每个元素。