build method
Future<BitmapDescriptor>
build(
)
Implementation
Future<BitmapDescriptor> build() async {
String svgString;
final mediaQueryData = MediaQuery.of(_context);
if (_assetName != null) {
svgString = await DefaultAssetBundle.of(_context).loadString(_assetName!);
} else if (_svgString != null) {
svgString = _svgString!;
} else {
svgString = _dummySvg;
}
if (_interpolateParams != null) {
svgString = svgString.interpolate(_interpolateParams!);
}
//DrawableRoot drawableRoot = await svg.fromSvgString(svgString, "");
final pictureInfo = await vg.loadPicture(SvgStringLoader(svgString), null);
// double width = drawableRoot.viewport.width;
// double height = drawableRoot.viewport.height;
int originalWidth = pictureInfo.size.width.round();
int originalHeight = pictureInfo.size.height.round();
int targetWidth = originalWidth;
int targetHeight = originalHeight;
if (_originalSizeAsLp) {
final ratio = mediaQueryData.devicePixelRatio;
targetWidth = (originalWidth * ratio).round();
targetHeight = (originalHeight * ratio).round();
} else if (_originalSizeAsSp) {
final ratio = mediaQueryData.devicePixelRatio * mediaQueryData.textScaleFactor;
targetWidth = (originalWidth * ratio).round();
targetHeight = (originalHeight * ratio).round();
} else if (_targetLpWidth > 0) {
final int pxWidth = (_targetLpWidth * mediaQueryData.devicePixelRatio).round();
if (pxWidth != originalWidth) {
targetWidth = pxWidth;
targetHeight = (originalHeight * pxWidth / originalWidth).round();
}
} else if (_targetSpWidth > 0) {
final int pxWidth = (_targetSpWidth * mediaQueryData.devicePixelRatio * mediaQueryData.textScaleFactor).round();
if (pxWidth != originalWidth) {
targetWidth = pxWidth;
targetHeight = (originalHeight * pxWidth / originalWidth).round();
}
} else if (_targetPxWidth > 0) {
if (_targetPxWidth != originalWidth) {
targetWidth = _targetPxWidth;
targetHeight = (originalHeight * _targetPxWidth / originalWidth).round();
}
}
BitmapDescriptor? bitmapDescriptor;
bool hit = false;
if (_useCache) {
bitmapDescriptor = bitmapDescriptorCache.get(svgString, targetWidth, targetHeight);
if (bitmapDescriptor == null) {
hit = false;
//ui.Picture picture = drawableRoot.toPicture(size: Size(width, height));
bitmapDescriptor = await _bitmapDescriptorFromPictureInfo(
pictureInfo: pictureInfo,
originalWidth: originalWidth,
originalHeight: originalHeight,
targetWidth: targetWidth,
);
bitmapDescriptorCache.set(svgString, targetWidth, targetHeight, bitmapDescriptor);
} else {
hit = true;
}
} else {
// ui.Picture picture = drawableRoot.toPicture(size: Size(width, height));
bitmapDescriptor = await _bitmapDescriptorFromPictureInfo(
pictureInfo: pictureInfo,
originalWidth: originalWidth,
originalHeight: originalHeight,
targetWidth: targetWidth,
);
}
if (_debugLog) {
debugPrint("BitmapDescriptorFromSvgAssetBuilder");
debugPrint("devicePixelRatio ${mediaQueryData.devicePixelRatio}");
debugPrint("textScaleFactor ${mediaQueryData.textScaleFactor}");
debugPrint("assetName $_assetName");
debugPrint("svgString $svgString");
debugPrint("interpolateParams $_interpolateParams");
debugPrint("original size ${pictureInfo.size}");
debugPrint("originalSizeAsLp $_originalSizeAsLp");
debugPrint("originalSizeAsSp $_originalSizeAsSp");
debugPrint("targetLpWidth $_targetLpWidth");
debugPrint("targetSpWidth $_targetSpWidth");
debugPrint("targetPxWidth $_targetPxWidth");
debugPrint("output width $targetWidth");
debugPrint("output height $targetHeight");
debugPrint("_useCache $_useCache hit $hit");
}
pictureInfo.picture.dispose();
return bitmapDescriptor;
}