Flutter: BitmapDescriptor.fromAsset устарел - PullRequest
0 голосов
/ 25 октября 2019

Я новичок во 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 ? Мне кажется странным назначать Future внутри цикла for, но я нуб.

Это ошибка, которую я получаю с новым методом *: тип аргумента 'Future'нельзя назначить типу параметра «BitmapDescriptor». (arguments_type_not_assignable в [flutter_app] lib / lash.dart: 81)

1 Ответ

0 голосов
/ 26 октября 2019

Да, метод fromAsset был синхронным вызовом для получения объекта Bitmap, но теперь он был заменен асинхронным методом fromAssetImage, я полагаю, это из-за проблем с отзывчивостью и производительностью.

Хотя это выглядит так, как будто это новая тема для вас, должно быть легко заставить ваш код работать с асинхронным программированием , вам просто нужно пометить ваш цикл как async,а затем await объект fromAssetImage возвращается, прежде чем использовать его в своем маркере. Нечто подобное должно работать, хотя я не пробовал.

         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
          ));
        }
...