Flutter:无法通过端口向其他Isolate发送序列化Freezed对象
问题原因解析
这个报错的核心问题出在**EqualUnmodifiableListView<bool>类型的对象无法跨Isolate传递**:
- Dart的Isolate之间传递数据时,要求对象必须是支持结构化克隆的核心类型(比如普通
List/Map、字符串、数字,或是实现了可序列化协议的类),而EqualUnmodifiableListView是Freezed默认生成的不可修改列表包装类,属于非核心的自定义类型,不在可传递范围内。 - 你把Freezed类序列化为Map时,这个包装后的List并没有被自动转换成普通
List<bool>,而是保留了原有的EqualUnmodifiableListView类型,导致SendPort.send时触发类型校验异常。 - 移除该List后,Map里不再包含不可序列化的包装类型,自然就能正常跨Isolate传递了。
临时解决思路
转Map时手动把包装列表转成普通List:
final serializedMap = yourFreezedInstance.toJson().map((key, value) { if (key == '目标列表字段名' && value is EqualUnmodifiableListView) { return MapEntry(key, value.toList()); } return MapEntry(key, value); });
内容的提问来源于stack exchange,提问作者Gazihan Alankus
相关产品推荐
相关产品推荐

