drawable
文件夹获取资源R.drawable.icon
。但是我还需要将图标复制到Android drawable文件夹中。也许有一种方法可以从本地代码访问Flutter资源(即资产)?"最初的回答"在Flutter文档中有一个关于此的不错的章节。
对于Android(自1.22版本以来)给定资源“icons/heart.png”:
FlutterLoader loader = FlutterInjector.instance().flutterLoader();
String key = loader.getLookupKeyForAsset("icons/heart.png");
对于iOS(Swift):
let key = registrar.lookupKey(forAsset: "icons/heart.png");
let path = Bundle.main.path(forResource: key, ofType: nil)
对于iOS(Objective-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不知道什么是“drawable”,而是以自己的跨平台方式处理资源。
新版本更新说明
针对Flutter 1.22及以上版本,FlutterLoader仅能通过FlutterInjector来访问。
import io.flutter.FlutterInjector;
FlutterLoader loader = FlutterInjector.instance().flutterLoader();
String key = loader.getLookupKeyForAsset("assets_file_name");
final FlutterLoader flutterLoader = FlutterLoader.getInstance()
这一行出现了错误,但是使用您提供的解决方案后问题得到了解决。谢谢! - undefined您需要获取资产文件的相对路径。
以下是从Swift本地代码访问文件/图像路径的辅助方法。
func flutterAssetLottieFilePath(imageName : String) -> String {
var flutterViewController = FlutterViewController()
flutterViewController = UIWindow.init(frame: UIScreen.main.bounds).rootViewController as! FlutterViewController
let key = flutterViewController.lookupKey(forAsset:"assets/images/\(imageName).png")
let path = Bundle.main.path(forResource: key, ofType: nil)
return path ?? ""
}
import android.content.Context
import io.flutter.embedding.engine.loader.FlutterLoader
import java.io.InputStream
val myAssetPath : Sting = "assets/my_asset"
val assetLookupKey = FlutterLoader.getInstance().getLookupKeyForAsset(myAssetPath)
val inputStream: InputStream = applicationContext.assets.open(assetLookupKey)
// Read in the file from the InputStream...
flutter run
/flutter build
工具创建的.apk
文件?你注意到它包含在根目录下的assets
文件夹了吗? - undefined