У меня есть задача построить карту с маркерами, которые могут иметь динамический контент (текст или значок) сверху (в качестве наложенного слоя). Я пытаюсь добиться этого с помощью библиотек google_maps_flutter и flutter_svg.
Обычно моя идея - заставить маркер svg конвертировать его в изображение, добавить дополнительные слои (класс FoundableRoot), конвертировать в байты и передать BitmapDescriptor.fromBytes () в конструкторе маркера
Проблема в том, что мне не удается выполнить первый шаг, когда я просто пытаюсь использовать svg в качестве маркера.
Я создаю байты из моей строки SVG, как это:
Future<Uint8List> svg() async {
final raw = r'''<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 40 52" height="52px" id="Layer_1" version="1.1" viewBox="0 0 40 52" width="40px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path d="M20.421-0.125c-11.046,0-20,8.954-20,20s20,32,20,32s20-20.954,20-32S31.467-0.125,20.421-0.125z M20.421,27.875c-5.522,0-10-4.477-10-10s4.478-10,10-10s10,4.477,10,10S25.943,27.875,20.421,27.875z" fill="#231F20"/><path d="M20.421,11.875c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6S23.729,11.875,20.421,11.875z" fill="#231F20"/></g></svg>''';
final pictureInfo = await svg.svgPictureStringDecoder(raw, false, null, raw);
final image = await pictureInfo.picture.toImage(36, 36);
final byteData = await image.toByteData();
final uint8List = byteData.buffer.asUint8List();
return uint8List;
}
А затем после передачи результата в конструктор маркера все, что я получаю, это красный маркер по умолчанию.
Future<Iterable<Marker>> convertPlacesToMarkers(Iterable<Place> places) async {
final markerBytes = await UITools.convertSvg();
return places
.map((place) => Marker(
markerId: MarkerId(place.id),
position: place.latlng,
icon: BitmapDescriptor.fromBytes(markerBytes),
onTap: () => onBusStopMarkerTap(place)))
.toList();
}
Есть идеи, что я здесь не так делаю?
Заранее спасибо за помощь