升级Flutter版本后出现Object?无法赋值给List类型参数错误如何解决
问题原因
新版Flutter引入空安全特性后,未指定泛型的FutureBuilder默认的snapshot.data类型为Object?,Dart无法直接确认该值可以转为List类型,因此抛出类型不匹配错误。另外原代码中的snapshot.data == 0判断逻辑不符合返回值为List的场景,属于错误的无数据判断规则。
修复方案
首先给FutureBuilder明确指定泛型类型,同步优化判断逻辑,修复后的代码如下:
list() { return Expanded( child: FutureBuilder<List<Url>>( // 此处指定Future返回值的实际类型 future: employees, builder: (context, snapshot) { if (snapshot.hasData) { // 泛型指定后snapshot.data类型为List<Url>?,非空时可直接使用 return dataTable(snapshot.data!); } // 无数据或返回空列表时的处理 if (snapshot.data == null || snapshot.data?.isEmpty == true) { return const Text("Tiada Data"); } return const CircularProgressIndicator(); }, ), ); }
额外说明
如果你的employees返回的是动态类型列表,没有明确声明为List<Url>,可以将泛型修改为FutureBuilder<List<dynamic>>,再通过List<Url>.from(snapshot.data!)完成类型转换即可。
内容的提问来源于stack exchange,提问作者Hakim Rahim
相关产品推荐
相关产品推荐

