颤振:BitmapDescriptor.fromAsset 已弃用
Flutter: BitmapDescriptor.fromAsset deprecated
我是 Flutter 的新手,我的应用程序中有这段代码可以完美地填充标记列表,其中包含数千个项目,每个项目都是 4 个可用图标之一,本地存储为 png 文件:
for (var bla in jData) {
LatLng _markerPos =
LatLng(
double.parse(bla['lat']),
double.parse(bla['lng'])
);
String _iconImage = 'assets/images/' + bla['q'].toString() + '.png';
markers.add(Marker(
position: _markerPos,
markerId: MarkerId(bla['hash']),
icon: BitmapDescriptor.fromAsset(_iconImage)
));
}
但现在 fromAsset 方法已被弃用,分配 BitmapDescriptor 的新方法似乎是通过一个会抛出错误的 Future 函数*(对我来说也像用旧方法可以轻松完成的事情很麻烦。
那么谁能帮我用新方法 fromAssetImage 实现这个目标?在 for 循环中分配 Future 对我来说似乎很奇怪,但我是菜鸟。
这是我用新方法得到的错误*:参数类型'Future'无法分配给参数类型'BitmapDescriptor'。 (argument_type_not_assignable 在 [flutter_app] lib/lash.dart:81)
是的,fromAsset
方法是同步调用得到一个Bitmap
对象,现在已经被fromAssetImage
异步方法代替了,我猜是因为响应能力和性能相关的问题。
虽然看起来这对您来说是一个新主题,但让您的代码片段与 asynchronous programming 一起工作应该很容易,您只需要将循环标记为 async
,并且然后 await
fromAssetImage
对象 return 在你的标记中使用它之前。这样的东西应该可以,虽然我没有尝试过。
for (var bla in jData) async {
LatLng _markerPos =
LatLng(
double.parse(bla['lat']),
double.parse(bla['lng'])
);
String _iconImage = 'assets/images/' + bla['q'].toString() + '.png';
final bitmapIcon = await BitmapDescriptor.fromAsset(_iconImage);
markers.add(Marker(
position: _markerPos,
markerId: MarkerId(bla['hash']),
icon: bitmapIcon
));
}
我是 Flutter 的新手,我的应用程序中有这段代码可以完美地填充标记列表,其中包含数千个项目,每个项目都是 4 个可用图标之一,本地存储为 png 文件:
for (var bla in jData) {
LatLng _markerPos =
LatLng(
double.parse(bla['lat']),
double.parse(bla['lng'])
);
String _iconImage = 'assets/images/' + bla['q'].toString() + '.png';
markers.add(Marker(
position: _markerPos,
markerId: MarkerId(bla['hash']),
icon: BitmapDescriptor.fromAsset(_iconImage)
));
}
但现在 fromAsset 方法已被弃用,分配 BitmapDescriptor 的新方法似乎是通过一个会抛出错误的 Future 函数*(对我来说也像用旧方法可以轻松完成的事情很麻烦。
那么谁能帮我用新方法 fromAssetImage 实现这个目标?在 for 循环中分配 Future 对我来说似乎很奇怪,但我是菜鸟。
这是我用新方法得到的错误*:参数类型'Future'无法分配给参数类型'BitmapDescriptor'。 (argument_type_not_assignable 在 [flutter_app] lib/lash.dart:81)
是的,fromAsset
方法是同步调用得到一个Bitmap
对象,现在已经被fromAssetImage
异步方法代替了,我猜是因为响应能力和性能相关的问题。
虽然看起来这对您来说是一个新主题,但让您的代码片段与 asynchronous programming 一起工作应该很容易,您只需要将循环标记为 async
,并且然后 await
fromAssetImage
对象 return 在你的标记中使用它之前。这样的东西应该可以,虽然我没有尝试过。
for (var bla in jData) async {
LatLng _markerPos =
LatLng(
double.parse(bla['lat']),
double.parse(bla['lng'])
);
String _iconImage = 'assets/images/' + bla['q'].toString() + '.png';
final bitmapIcon = await BitmapDescriptor.fromAsset(_iconImage);
markers.add(Marker(
position: _markerPos,
markerId: MarkerId(bla['hash']),
icon: bitmapIcon
));
}