颤振: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
          ));
        }