我想在我的本机Android代码中使用Flutter资源中的主要徽标-例如,显示通知。如您所知,在Android中,您通常会从drawable
文件夹中获取资源,例如R.drawable.icon
。但是然后我也必须将图标复制到Android drawable文件夹。也许有一种方法可以从本机代码访问Flutter资源(读取资产)?
答案 0 :(得分:1)
您需要获取资产文件的相对路径。
下面是从快速的本机代码访问文件/图像路径的帮助方法。
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 ?? ""
}
答案 1 :(得分:1)
截至我撰写本文时,documentation已过时。在我的flutter版本中, 1.17.1 是下面的 kotlin android 示例,上面带有必要的导入:
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor(props){
super(props);
this.state = {
datas: []
};
}
componentDidMount() {
fetch('https://api.inquickerstaging.com/v3/winter.inquickerstaging.com/services')
.then(res => res.json())
.then((data) => {
this.setState({ datas: data.data })
})
.catch(console.log)
}
render() {
return (
<ul>
{this.state.datas.map((book) => (
<li key={book.id}>{book.type}</li>
))}
</ul>
)
}
}
export default App;
请注意,此 getLookupKeyForAsset 方法返回的值通常是您的资产路径,包括在 pubspec.yaml 中资产下方,该路径的前缀为“ flutter_assets /”。因此,在上述示例中,它将返回 flutter_assets / assets / my_asset
答案 2 :(得分:1)
更新新版本
对于Flutter 1.22或更高版本,只能通过 FlutterInjector 访问 FlutterLoader 。
import io.flutter.FlutterInjector;
FlutterLoader loader = FlutterInjector.instance().flutterLoader();
String key = loader.getLookupKeyForAsset("assets_file_name");
答案 3 :(得分:0)
flutter documentation中有一个不错的部分。
为Android提供资产“ icons / heart.png”:
AssetManager assetManager = registrar.context()。getAssets();
字符串键= registrar.lookupKeyForAsset(“ icons / heart.png”);
AssetFileDescriptor fd = assetManager.openFd(key);
,对于iOS:
NSString *键= [注册商lookupKeyForAsset:@“ icons / heart.png”];
NSString * path = [[NSBundle mainBundle] pathForResource:key ofType:nil];
但是,您将不能直接将可绘制的项目共享给Flutter,并且主图标有点特殊情况,您也绝对不能与Flutter共享。 Flutter不知道什么是“可绘制”,而是以自己的跨平台方式处理资源。