Realm 3.1.0无法获取模型类Schema的问题求助
Realm 3.1.0 无法获取模型类schema的解决方案
问题场景
首次使用realm: ^3.1.0,定义了带@RealmModel()注解的私有类_$ProjectModal,并手动创建了子类ProjectTmp。在RealmHelper中尝试通过ProjectModal.schema配置Realm时,报错:The getter 'schema' isn't defined for the type '_$ProjectModal',改用子类ProjectTmp调用schema同样失败。
问题原因
- Realm依赖代码生成机制自动生成包含
schema属性的公共模型类(比如ProjectModal),直接使用私有基类_$ProjectModal无法获取自动生成的schema属性。 - 未执行Realm的代码生成命令,导致自动生成的模型类文件缺失,没有可用的
schema属性。 - 手动创建的子类
ProjectTmp重写了所有属性,未继承到Realm生成类的核心能力,包括schema。
解决步骤
1. 修正模型类结构
无需手动创建子类,直接基于Realm自动生成的公共类扩展方法即可:
import 'dart:developer'; import 'package:realm/realm.dart'; @RealmModel() class _$ProjectModal { @RealmPropertyType.int late int project_id; @RealmPropertyType.string late String project_name; @RealmPropertyType.int late int student_id; @RealmPropertyType.string late String? image_url; } // 扩展自动生成的ProjectModal类,实现fromMap方法 extension ProjectModalExt on ProjectModal { factory ProjectModal.fromMap(Map data) { log(data['image_url'].runtimeType.toString()); return ProjectModal( data['project_id'], data['project_name'], data['student_id'], image_url: data['image_url'], ); } }
2. 执行代码生成命令
在项目根目录执行对应命令,让Realm自动生成包含schema属性的模型类:
- Dart项目:
dart run realm generate
- Flutter项目:
flutter pub run realm generate
执行后会在模型类所在目录生成project_modal.g.dart文件,里面包含自动生成的ProjectModal类及schema属性。
3. 修正Realm配置代码
使用自动生成的公共模型类ProjectModal来配置Realm:
import 'package:realm/realm.dart'; import '../data/modal/project_modal.dart'; class RealmHelper { RealmHelper._(); static final RealmHelper instance = RealmHelper._(); // 调用自动生成类的schema属性 final config = Configuration.local([ProjectModal.schema]); }
额外注意事项
- 确保
pubspec.yaml中配置完整的依赖:
dependencies: realm: ^3.1.0 dev_dependencies: build_runner: ^2.4.0 realm_generator: ^3.1.0
- 每次修改带
@RealmModel()注解的类后,必须重新运行代码生成命令,否则修改不会同步到生成的类中。
内容的提问来源于stack exchange,提问作者Om Trivedi
相关产品推荐
相关产品推荐

