动态列表无法从JSON数据映射 赋值List<Map<String,dynamic>>失败问题
问题原因
- Dart 具备严格的静态类型检查逻辑,示例中使用
var声明的jsondata所有键值均为 String 类型,编译器会自动将其推断为List<Map<String, String>>类型 - Dart 的泛型类型不支持隐式向上转型,因此无法直接将窄类型的
List<Map<String, String>>赋值给宽类型的List<Map<String, dynamic>>变量
解决方案
方案1:声明时直接指定类型
适合手动定义静态 JSON 数组的场景,声明时直接指定泛型类型即可直接赋值:
var jsondata = <Map<String, dynamic>>[ { 'value': '1', 'label': 'Red', }, { 'value': '2', 'label': 'Green', }, { 'value': '3', 'label': 'Yellow', }, ]; List<Map<String, dynamic>> _items = jsondata;
方案2:显式做集合类型转换
如果jsondata是从其他逻辑获取(比如其他模块传递、本地存储读取),可以用List.from方法完成类型转换:
var jsondata = [ { 'value': '1', 'label': 'Red', }, { 'value': '2', 'label': 'Green', }, { 'value': '3', 'label': 'Yellow', }, ]; List<Map<String, dynamic>> _items = List<Map<String, dynamic>>.from(jsondata);
方案3:服务端JSON字符串解析场景处理
如果数据来自服务端返回的JSON字符串,通过jsonDecode解析后直接转换即可:
import 'dart:convert'; // 示例为服务端返回的JSON数组字符串 String responseJson = '[{"value":"1","label":"Red"},{"value":"2","label":"Green"},{"value":"3","label":"Yellow"}]'; List<Map<String, dynamic>> _items = List<Map<String, dynamic>>.from(jsonDecode(responseJson));
内容的提问来源于stack exchange,提问作者Jahur
相关产品推荐
相关产品推荐

