Flutter Objectbox如何修复「Read Only File System」错误(代码30)
修复Flutter ObjectBox Android打包时的"Read-only file system"错误
问题根源
你的代码存在异步操作处理错误:getApplicationDocumentsDirectory()是异步方法,但你直接同步初始化_store,此时paths还是初始的空目录,导致ObjectBox尝试访问Android系统的只读目录,触发了存储错误(code 30)。
修复方案
必须等待异步方法获取到正确的可读写目录后,再初始化ObjectBox Store。以下是修正后的代码:
方式1:使用async/await(推荐)
Future<void> initObjectBox() async { // 等待获取应用专属的可读写文档目录 final appDocDir = await getApplicationDocumentsDirectory(); // 基于该目录初始化ObjectBox Store _store = Store( getObjectBoxModel(), directory: p.join(appDocDir.path, 'objectBoxMyDirectory') ); }
方式2:在then回调内完成初始化
void initObjectBox() { getApplicationDocumentsDirectory().then((appDocDir) { _store = Store( getObjectBoxModel(), directory: p.join(appDocDir.path, 'objectBoxMyDirectory') ); // 后续数据操作逻辑需放在此回调内 }); }
说明
Android平台上,getApplicationDocumentsDirectory()返回的是应用专属的私有可读写目录,仅当前应用有权限访问,完全符合ObjectBox的存储要求。Windows平台因文件系统权限限制宽松,初始空目录恰好指向可读写路径,所以未触发错误,但这种写法在Android上必然会出现权限问题。
内容的提问来源于stack exchange,提问作者Trisk Khan
相关产品推荐
相关产品推荐

