升级Dart SDK后ObjectBox构建失败问题求助
解决Flutter 2.5.3 + Dart 2.14.4下ObjectBox build_runner执行失败的问题
我之前升级Flutter版本时也碰到过一模一样的ObjectBox代码生成失败问题,这个报错Bad state: lastRelationId 4:6834778133563033891 does not match any standalone relation其实是旧版本ObjectBox和新Dart版本不兼容导致的——你用的objectbox: ^1.2.0是比较早的版本,而Dart 2.14带来了一些工具链的变化,ObjectBox在后续版本才完成适配,给你几个亲测有效的解决步骤:
步骤1:升级ObjectBox依赖版本
打开你的pubspec.yaml,把ObjectBox相关依赖更新到兼容Dart 2.14的版本,建议至少升级到^1.4.0(这个版本开始正式支持Dart 2.14):
dependencies: objectbox: ^1.4.0 objectbox_flutter_libs: ^1.4.0 # 不要用any,指定和objectbox一致的版本更稳妥
修改后执行flutter pub get拉取新依赖。
步骤2:清理缓存并重新生成代码
旧的缓存和生成文件可能残留问题,按顺序执行以下命令:
- 清理项目缓存:
flutter clean
- 重新获取依赖:
flutter pub get
- 重新运行build_runner:
flutter pub run build_runner watch --delete-conflicting-outputs
步骤3:修复objectbox-model.json中的关系ID问题
如果上面的步骤还是报错,那就是你的objectbox-model.json里的关系ID记录出现了不一致:
- 打开
objectbox-model.json,找到lastRelationId字段(通常在文件末尾) - 检查文件中的
relations数组,看看是否存在ID为4:6834778133563033891的条目 - 如果没有这个条目,把
lastRelationId改成当前relations数组中最大的ID值;如果没有任何关系,直接设置为0 - 备份好model文件后再修改,然后重新运行build_runner
步骤4:极端情况:临时移除关系重新生成
如果上面都没用,可以尝试临时注释掉实体类中所有的@Relation注解,然后重新运行build_runner生成基础的.g.dart文件,之后再恢复关系注解,再次执行生成命令。
内容的提问来源于stack exchange,提问作者ViKARLL
相关产品推荐
相关产品推荐

