svgAsset static method
Future<BitmapDescriptor>
svgAsset({
- required String assetName,
- required BuildContext context,
- required double size,
Implementation
static Future<BitmapDescriptor> svgAsset({
required String assetName,
required BuildContext context,
required double size,
}) async {
final mediaQuery = MediaQuery.of(context);
// Read SVG file as String
String svgString =
await DefaultAssetBundle.of(context).loadString(assetName);
// Create DrawableRoot from SVG String
final PictureInfo pictureInfo =
await vg.loadPicture(SvgStringLoader(svgString), null);
// toPicture() and toImage() don't seem to be pixel ratio aware, so we calculate the actual sizes here
double devicePixelRatio = mediaQuery.devicePixelRatio;
double width =
size * devicePixelRatio; // where 32 is your SVG's original width
double height = size * devicePixelRatio; // same thing
// Convert to ui.Picture
// 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 pictureInfo.picture.toImage(width.toInt(), height.toInt());
ByteData? bytes = await image.toByteData(format: ui.ImageByteFormat.png);
return BitmapDescriptor.fromBytes(bytes!.buffer.asUint8List());
}