Flutter: BitmapDescriptor.fromAsset устарел

Я новичок во 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». (тип_аргумента_not_assignable в [flutter_app] lib / lash.dart: 81)


person Zyraj    schedule 25.10.2019    source источник


Ответы (1)


Да, метод 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
          ));
        }
person drogel    schedule 25.10.2019
comment
Спасибо друг! это имеет большой смысл, я собираюсь более глубоко взглянуть на асинхронные функции !! - person Zyraj; 29.10.2019
comment
Ответ по-прежнему с fromAsset, а не fromAssetImage ... - person giorgio79; 17.07.2020