当前位置: 首页 > 面试题库 >

在google_maps_flutter Flutter插件中使用SVG标记

唐经国
2023-03-14
问题内容

是否可以使用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));


 类似资料:
  • 我有许多大的SVG文件(用在线工具减小大小后大约有200kb)。我真的不希望访问者每次访问时都从我的服务器上下载所有的文本。我想利用CDN和varnish缓存。 如果我使用SVG标签,浏览器、CDN或Varish都会将svg代码缓存在html文档中。SVG没有src属性。 如果我使用图像标记,它将被缓存,但我无法利用SVG标记的preserveAspectRatio和viewBox。在调整浏览器窗

  • 问题内容: 我已经看到了很多用于svg on react的库,但是没有一个给我如何在react组件中导入.svg的代码,我已经看到了谈论将svg代码带入反应而不是使用.svg图标作为图像进行显示的代码。在用户界面中。 请告诉我是否有嵌入图标的方法。 问题答案: 如果图像是远程托管的,则可以直接将扩展名与标记一起使用。 这是小提琴:http : //codepen.io/srinivasdamam-

  • 问题内容: 因此,通常包括我需要简单样式的大多数SVG图标,我这样做: 现在,我一直在玩ReactJS作为它的后期评估在我的新的前端开发堆栈可能的成分,但是我注意到,在其支持的标记/属性列表,无论是或支持。 是否可以使用svg精灵并以这种方式在ReactJS中加载它们? 问题答案: 2018年9月更新 :不建议使用此解决方案,请阅读乔恩的答案。 - 反应并不支持所有的SVG标签就像你说的,有支持的

  • jsTree的某些功能已移出核心,因此您只能在需要时使用它。要启用插件,请使用 plugins 配置选项 ,并将该插件的名称添加到数组中。 例如,启用所有插件可以通过以下方式完成: (仅启用您需要的插件) "plugins" : [ "checkbox", "contextmenu", "dnd", "massload", "search", "sort", "stat

  • 问题内容: 如何使用JavaScript创建SVG元素?我尝试了这个: 但是,它将创建宽度为零,高度为零的SVG元素。 问题答案: 尝试这个 :

  • 然后指向 如果我为其中任何一个指定了新值,那么将发生变化 如果我更改,那么在中可以看到

  • 关于 SVG GIF、JPEG、WBMP 和 PNG 等用于 Web 的位图图像格式,都使用像素网格来描述图像。生成的文件有可能很庞大,局限于单一(通常较低)的分辨率,且在 Web 上会占用大量带宽。SVG 是将图像描述为形状、路径、文本和滤镜效果的矢量格式。生成的文件很小,可在 Web、打印甚至资源有限的手持设备上提供较高品质的图像。用户无须牺牲锐利程度、细节或清晰度,即可在屏幕上放大 SVG

  • 问题内容: 我有一个安装程序,其中我的大多数项目都需要同时运行xtend插件才能实现compile和testCompile目标。我在pluginManagement部分中对其进行描述: 现在,有些项目不需要一个目标或另一个目标。我尝试了继承的标签,使用了随机属性,但是没有用。如何覆盖执行以仅包含所需目标? 更新 :这个故事的结论是,个人目标不能残废。可以管理的最小范围是。 问题答案: 通常,您只能