Я пытаюсь установить собственный значок маркера для приложения, использующего карты Google. Сейчас значки маркеров не соответствуют стандартному значку красной булавки, даже если я настроил для них использование пользовательского png-ресурса.
Я загружаю ресурсы с помощью BitmapDescriptor.asset, и они по-прежнему показывают значок по умолчанию. Это основано на этом ответе.
// Assets
late BitmapDescriptor redPin;
late BitmapDescriptor bluePin;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) async {
redPin = await BitmapDescriptor.asset(
const ImageConfiguration(size: Size(55, 55)), AppAssets.pinred);
bluePin = await BitmapDescriptor.asset(
const ImageConfiguration(size: Size(55, 55)), AppAssets.pinblue);
setState(() {});
});
super.initState();
}
где AppAssets.pinRed и AppAssets.pinBlue равны assets/icons/pinRed.png и assets/icons/pinBlue.png соответственно.
Я использую такие значки в пользовательском интерфейсе:
GoogleMaps(
....
markers: {
Marker(
icon: isSelected ? bluePin : redPin
)
}
)
и я обязательно включил их в свой pubspec.yaml:
flutter:
uses-material-design: true
assets:
- assets/icons/
Я заметил, что если бы я поставил точку останова рядом с тем местом, где я пытаюсь назначить значок внутри объявления Marker, в VSCode переменные данные bluePin сбоку выглядели бы так:
обратите внимание, что поле _json пусто. Я предполагаю, что это как-то связано с этим.
Что бы я ни пытался, они постоянно застревают на красном маркере по умолчанию, хотя вместо этого мне нужны свои собственные. Почему мои собственные значки маркеров не отображаются?





Попробуйте следующий код:
void initState(){
initiateMarkers();
}
void initiateMarkers()async{
red = await getImage('pass path here');
blue = await getImage('pass path here');
}
и вот как getImage работает:
Future<BitmapDescriptor> getImage(String assetPath)async{
final asset = await rootBundle.load(assetPath);
final icon = BitmapDescriptor.fromBytes(asset.buffer.asUint8List());
return icon;
}
Исправлено обновлением google_maps_flutter с 2.4.0 на 2.7.0. Последняя версия работает нормально