Flutter ObjectBox使用问题:如何存储实体类中的Map类型属性?
问题原因
你使用的对象持久化框架(从@Entity注解判断为ObjectBox)默认不支持直接持久化Map类型字段,未做特殊配置时会直接忽略该字段的存储操作,因此其余基础类型字段存储正常,仅Map字段读取为空。同时注意你的代码存在笔误:类名为PossessionStats,但构造函数命名为CardPossessionStats,需要修正避免出现编译问题。
解决方案
通过自定义类型转换器将Map序列化为JSON字符串存储,读取时再反序列化为Map即可,具体操作如下:
- 实现自定义转换器
import 'dart:convert'; import 'package:objectbox/objectbox.dart'; class MapStringIntConverter extends Converter<Map<String, int>?, String?> { @override Map<String, int>? fromDatabase(String? dbValue) { if (dbValue == null || dbValue.isEmpty) return null; return Map<String, int>.from(jsonDecode(dbValue)); } @override String? toDatabase(Map<String, int>? value) { if (value == null) return null; return jsonEncode(value); } }
- 给Map字段添加转换器注解,修正实体类笔误
@JsonSerializable() @Entity() class PossessionStats { @JsonKey(defaultValue: 0) int id; String cardUuid; int total; @Convert(converter: MapStringIntConverter) Map<String, int>? totalByVersion; PossessionStats({ this.id = 0, required this.cardUuid, this.total = 0, this.totalByVersion, }); }
- 重新生成框架绑定代码
执行以下命令重新生成持久化框架的关联代码:dart run build_runner build
配置完成后重新运行项目,Map字段即可正常持久化。
内容的提问来源于stack exchange,提问作者DimZ
相关产品推荐
相关产品推荐

