Flutter API请求报错:List<dynamic>无法转为Future<List<List<Furni>>>
错误原因解析
1. 类型期望与实际返回值完全不匹配
你的_futureAllFurnis变量被声明为Future<List<List<Furni>>>(即一个异步未来值,最终要返回「由Furni列表组成的嵌套列表」),但实际_getAllFurnis()方法返回的是List<dynamic>类型的普通单层列表,既不是异步Future类型,也不符合嵌套列表的结构,强行类型转换就会触发这个类型不兼容错误。
2. 异步逻辑处理混乱
HTTP请求是异步操作,_getAllFurnis()作为发起请求的方法,必须返回Future类型,但你可能存在两种错误:
- 要么给方法标记了
async却错误指定返回List<dynamic>(async方法会自动把返回值包装成Future,实际返回的是Future<List<dynamic>>,但你硬转成了Future<List<List<Furni>>>) - 要么调用方法时没有正确等待异步结果,直接把同步的列表值赋值给需要Future类型的
_futureAllFurnis
举个典型错误场景:
// 错误示例:变量声明 late Future<List<List<Furni>>> _futureAllFurnis; // 错误的方法实现 List<dynamic> _getAllFurnis() async { final responses = await Future.wait([ http.get(Uri.parse('/chairs')), http.get(Uri.parse('/sofas')), http.get(Uri.parse('/furnis')), ]); // 错误地把三个端点的数据合并成了单层列表 return responses.expand((res) => jsonDecode(res.body)).map((json) => Furni.fromJson(json)).toList(); } // 错误的赋值 _futureAllFurnis = _getAllFurnis() as Future<List<List<Furni>>>;
这里既把本该是嵌套列表的结构合并成了单层,又错误地进行了类型强转。
3. JSON转换时的类型推断缺失
在把JSON转为Furni对象的过程中,你可能没有明确指定泛型类型,导致Dart只能推断出List<dynamic>,而无法识别出你需要的List<List<Furni>>嵌套结构,进一步加剧了类型不匹配问题。
内容的提问来源于stack exchange,提问作者Shreyas K S
相关产品推荐
相关产品推荐

