在google_maps_flutter Flutter插件中使用SVG标记

是否可以使用SVG路径通过google_maps_flutter插件创建标记?我知道您可以.png通过以下方式使用文件:

icon: BitmapDescriptor.fromAsset("images/myFile.png")

SVG路径如何?

谢谢

回答:

这可以使用flutter_svg包来实现。

import 'dart:ui' as ui; // imported as ui to prevent conflict between ui.Image and the Image widget

import 'package:flutter/services.dart';

import 'package:flutter_svg/flutter_svg.dart';

import 'package:google_maps_flutter/google_maps_flutter.dart';

Future<BitmapDescriptor> _bitmapDescriptorFromSvgAsset(BuildContext context, String assetName) async {

// Read SVG file as String

String svgString = await DefaultAssetBundle.of(context).loadString(assetName);

// Create DrawableRoot from SVG String

DrawableRoot svgDrawableRoot = await svg.fromSvgString(svgString, null);

// toPicture() and toImage() don't seem to be pixel ratio aware, so we calculate the actual sizes here

MediaQueryData queryData = MediaQuery.of(context);

double devicePixelRatio = queryData.devicePixelRatio;

double width = 32 * devicePixelRatio; // where 32 is your SVG's original width

double height = 32 * devicePixelRatio; // same thing

// Convert to ui.Picture

ui.Picture picture = svgDrawableRoot.toPicture(size: Size(width, height));

// Convert to ui.Image. toImage() takes width and height as parameters

// you need to find the best size to suit your needs and take into account the

// screen DPI

ui.Image image = await picture.toImage(width, height);

ByteData bytes = await image.toByteData(format: ui.ImageByteFormat.png);

return BitmapDescriptor.fromBytes(bytes.buffer.asUint8List());

}

然后,您可以照常使用BitmapDescriptor创建标记:

BitmapDescriptor bitmapDescriptor = await _bitmapDescriptorFromSvgAsset(context, 'assets/images/someimage.svg');

Marker marker = Marker(markerId: MarkerId('someId'), icon: bitmapDescriptor, position: LatLng(someLatitude, someLongitude));

以上是 在google_maps_flutter Flutter插件中使用SVG标记 的全部内容, 来源链接: utcz.com/qa/418192.html

回到顶部