Flutter报错:'List<dynamic>'非'Uint8List?'子类型 求解决
错误原因
当你通过toJson()将Uint8List类型的thumbImage序列化时,Dart会自动把它转换成List<dynamic>类型的JSON数组存储。而在fromJson()中直接将json[POST_THUMBIMAGE]赋值给Uint8List?类型的变量时,由于List<dynamic>和Uint8List是不同的类型,Dart无法自动完成类型转换,因此抛出类型不匹配的异常。
解决方法
需要手动将反序列化得到的List<dynamic>转换成Uint8List,可以使用Uint8List.fromList()方法,同时要处理字段为null的情况。修改PostModel.fromJson()中的thumbImage赋值逻辑即可:
PostModel.fromJson(Map<String, dynamic> json) { category = json[POST_CATEGORY] ?? ""; title = json[POST_TITLE] ?? ""; // 处理类型转换,同时兼容null final imageData = json[POST_THUMBIMAGE]; thumbImage = imageData != null ? Uint8List.fromList(imageData.cast<int>()) : null; }
补充说明
cast<int>()是为了确保List<dynamic>中的元素都是int类型(因为Uint8List是8位无符号整数的列表,元素范围0-255),避免类型转换时出现异常。- 如果你的序列化/反序列化是使用
jsonEncode/jsonDecode完成的,这个转换逻辑完全适用,因为jsonDecode解析二进制数组时会返回List<dynamic>(内部元素是int)。
内容的提问来源于stack exchange,提问作者Kevin Yang
相关产品推荐
相关产品推荐

