SVG для сопоставления маркера с наложением текста - PullRequest
0 голосов
/ 17 мая 2019

У меня есть задача построить карту с маркерами, которые могут иметь динамический контент (текст или значок) сверху (в качестве наложенного слоя). Я пытаюсь добиться этого с помощью библиотек 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();

}

Есть идеи, что я здесь не так делаю? Заранее спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...