Flutter如何添加可通过文件系统路径访问而非rootbundle的资源文件
实现方法
Flutter本身没有直接跳过rootbundle将资源直接放到设备可写文件系统的原生机制,但可以通过平台侧配置让文件被打包到应用的原生资源目录,无需经过Flutter的资源归档,具体分平台操作:
Android 端
- 在
android/app/src/main下新建assets文件夹,将someFile.txt放入其中。 - 修改
android/app/build.gradle,在android代码块内添加:sourceSets { main { assets.srcDirs = ['src/main/assets'] } } - 编译后文件会被打包到APK的原生assets目录,可通过以下方式访问:
final dir = await getExternalStorageDirectory(); final filePath = '${dir!.path}/someFile.txt'; File myFile = File(filePath);
iOS 端
- 打开iOS项目(
ios/Runner.xcworkspace),将someFile.txt拖拽到项目导航栏,勾选「Copy items if needed」并确保选中目标应用的「Add to targets」。 - 文件会被打包到App的主bundle目录,访问方式:
final dir = await getApplicationSupportDirectory(); final filePath = '${dir.path}/someFile.txt'; File myFile = File(filePath);
关键提示
- 上述方式下的文件是只读的,如果Objectbox需要读写操作,建议首次启动时将该文件复制到
getApplicationDocumentsDirectory()返回的可写目录,之后直接操作复制后的文件——这样既避免了rootbundle读取的开销,也满足Objectbox的读写需求。
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

