有没有办法从本机代码访问 Flutter 资源?

die*_*mat 1 android flutter

我想在我的原生 Android 代码中使用 Flutter 资源中的主徽标——例如,显示通知。如您所知,在 Android 中,您通常会从这样的drawable文件夹中获取资源R.drawable.icon。但是后来我也必须将图标复制到 Android drawable 文件夹中。也许有一种方法可以从本机代码访问 Flutter 资源(读取 - 资产)?

rmt*_*zie 7

颤振文档中有一个很好的部分关于这个。

给定一个资源“icons/heart.png”,对于 android(自 1.22 起):

FlutterLoader 加载器 = FlutterInjector.instance().flutterLoader();

String key = loader.getLookupKeyForAsset("icons/heart.png");

对于 iOS(快速):

let key = registrar.lookupKey(forAsset: "icons/heart.png");

let path = Bundle.main.path(forResource: key, ofType: nil)

对于 iOS (obj-c):

NSString* key = [registrar lookupKeyForAsset:@"icons/heart.png"];

NSString* path = [[NSBundle mainBundle] pathForResource:key ofType:nil];

对于 Flutter 1.22 版之前的 android(已弃用):

AssetManager assetManager = registrar.context().getAssets();

String key = registrar.lookupKeyForAsset("icons/heart.png");

AssetFileDescriptor fd = assetManager.openFd(key);

但是,您将无法直接将可绘制项目共享给 flutter,并且主图标是一个特殊情况,您也绝对不能与 flutter 共享。Flutter 不知道“可绘制”是什么,而是以自己的跨平台方式处理资源。


小智 7

更新新版本

对于 flutter 版本 1.22 或更高版本,FlutterLoader只能通过FlutterInjector访问。

import io.flutter.FlutterInjector;

 FlutterLoader loader = FlutterInjector.instance().flutterLoader();
 String key = loader.getLookupKeyForAsset("assets_file_name");
Run Code Online (Sandbox Code Playgroud)