0

我是 Flutter 的新手,我的应用程序中有这段代码,可以完美地填充标记列表,其中包含数千个项目,每个项目都是本地存储为 png 文件的 4 个可用图标之一:

        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)

4

1 回答 1

1

是的,该fromAsset方法是同步调用获取Bitmap对象,但现在已被fromAssetImage异步方法取代,我猜是因为响应性和性能相关问题。

虽然它看起来对您来说是一个新主题,但让您的代码与异步编程一起工作应该很容易,您只需将循环标记为async,然后对象返回,然后在标记中使用它awaitfromAssetImage像这样的东西应该可以工作,虽然我还没有尝试过。

         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
          ));
        }
于 2019-10-25T21:39:55.820 回答