You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Windows环境ObjectBox异常:实体ID与现有UID不匹配

ObjectBox跨平台(Android/Windows)UID不匹配问题排查与解决

错误核心原因

这个报错本质是Windows本地残留了旧的ObjectBox数据库文件,其存储的实体UID与当前代码中objectbox-model.json定义的UID不匹配。Android设备的数据库是独立存储的(调试时重新安装应用会清空旧数据),所以无冲突;但Windows桌面端的数据库文件会保存在本地文件系统,即使更新了模型文件,旧数据库的UID校验依然会失败。

完整解决步骤

你已完成模型同步、重新生成等操作,缺失的关键步骤是清理Windows本地旧数据库,以下是完整流程:

  1. 定位并删除Windows本地数据库文件

    • 先在代码中打印数据库存储路径,确认具体位置:
      final store = await Store.open(getObjectBoxModel());
      print('ObjectBox DB Path: ${store.directory.path}');
      
    • 运行Windows应用,在控制台复制该路径,手动删除路径下的整个objectbox文件夹。
    • 若找不到路径,可直接去用户目录查找:C:\Users\<你的用户名>\AppData\Roaming\<你的应用名称>,删除其中的数据库文件夹。
  2. 彻底清理缓存与生成文件

    • 执行命令确保所有缓存和冲突文件被清理:
      flutter clean
      flutter pub get
      flutter pub run build_runner clean
      flutter pub run build_runner build --delete-conflicting-outputs
      
  3. 跨平台一致性保障方案

    • 确保objectbox-model.json在所有平台共享同一文件,放在项目根目录通过版本控制同步,禁止分平台维护。
    • 绝对不要手动修改objectbox-model.json中的UID值,所有实体结构变更(新增字段、修改注解等)后,必须通过build_runner重新生成模型文件,由ObjectBox自动维护UID。
    • 开发阶段可临时在初始化Store时添加removeExisting: true参数(上线前务必移除),避免每次改模型手动删数据库:
      final store = await Store.open(
        getObjectBoxModel(),
        removeExisting: true, // 仅开发环境使用,生产环境禁用
      );
      

跨平台差异说明

Android与Windows的ObjectBox数据库存储完全独立:

  • Android端数据库默认在应用私有目录,卸载或重装应用会自动清空;
  • Windows端数据库存储在用户本地文件系统,除非手动删除,否则旧数据会一直保留,这就是只有Windows出现UID冲突的根本原因。

内容的提问来源于stack exchange,提问作者Thiago Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:47:43