Flutter使用FutureBuilder渲染DataTable时List<dynamic>类型不匹配报错
错误原因
报错的核心原因是map操作默认返回的是List<dynamic>类型,而DataTable的rows参数要求必须传入List<DataRow>类型,Dart类型校验不匹配直接抛出异常。
修复方案
只需要显式声明map操作的返回类型,或者对最终列表做类型转换即可,常用两种修改方式:
方式1:给map方法指定泛型
将代码中构建rows的部分修改为:
rows: snapshot.data.map<DataRow>( (data) => DataRow( cells: [ DataCell( Text(data.id.toString()), ), DataCell( Text(data.body), ) ]), ).toList(),
方式2:对列表做强制类型转换
也可以在toList()后追加类型声明:
rows: snapshot.data.map( (data) => DataRow( cells: [ DataCell( Text(data.id.toString()), ), DataCell( Text(data.body), ) ]), ).toList() as List<DataRow>,
额外优化建议
可以给FutureBuilder加上泛型约束,避免后续再出现同类隐式类型转换问题,同时获得更准确的代码提示:
将原有代码
FutureBuilder( future: getPost(), builder: (BuildContext context, AsyncSnapshot snapshot){
修改为
FutureBuilder<List<Post>>( future: getPost(), builder: (BuildContext context, AsyncSnapshot<List<Post>> snapshot){
内容的提问来源于stack exchange,提问作者Nayan Meher
相关产品推荐
相关产品推荐

