如何修复Dart中Object?类型值无法赋值给List<Space>类型变量的问题
问题修复方案
错误原因
你没有为FutureBuilder指定泛型,导致snapshot.data的默认推断类型为Object?,无法直接赋值给明确声明为List<Space>的变量,所以触发了类型校验报错。
修复方法
方案1(推荐):为FutureBuilder指定泛型
直接在FutureBuilder后声明你的异步返回值类型,Dart会自动完成类型匹配,代码修改如下:
Padding( padding: EdgeInsets.symmetric(horizontal: edge), // 新增泛型<List<Space>> child: FutureBuilder<List<Space>>( future: spaceProvider.getRecommendedSpaces(), builder: (context, snapshot) { if (snapshot.hasData) { // hasData为true时data非空,用!空断言即可 List<Space> data = snapshot.data!; int index = 0; return Column( children: data.map((item) { index++; return Container( margin: EdgeInsets.only(top: index == 1 ? 0 : 30), child: SpaceCard(item)); }).toList(), ); } return const Center( child: CircularProgressIndicator(), ); }, ), ),
方案2:对返回值做强制类型转换
如果不想修改FutureBuilder声明,也可以对snapshot.data做强制类型转换,修改报错行即可:
List<Space> data = snapshot.data as List<Space>;
注:该方案没有泛型声明的方式安全,优先推荐方案1
内容的提问来源于stack exchange,提问作者Muhamad Syah Reza
相关产品推荐
相关产品推荐

