Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions third_party/packages/flutter_svg/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,43 @@ import 'dart:ui' as ui;
pictureInfo.picture.dispose();
```

or if you want to scale it, you can do something like:

<?code-excerpt "example/lib/readme_excerpts.dart (OutputScaling)"?>
```dart
import 'dart:ui' as ui;

// ···
const rawSvg = '''<svg ...>...</svg>''';
final PictureInfo pictureInfo = await vg.loadPicture(
const SvgStringLoader(rawSvg),
null,
);

// You can convert the picture to a scaled image:
const double targetWidth = 512;
const double targetHeight = 512;
final pictureRecorder = ui.PictureRecorder();
final canvas = Canvas(
pictureRecorder,
Rect.fromPoints(
Offset.zero,
const Offset(targetWidth, targetHeight),
),
);
canvas.scale(
targetWidth / pictureInfo.size.width,
targetHeight / pictureInfo.size.height,
);
canvas.drawPicture(pictureInfo.picture);
final ui.Image scaledImage = await pictureRecorder.endRecording().toImage(
targetWidth.ceil(),
targetHeight.ceil(),
);

pictureInfo.picture.dispose();
```

The `SvgPicture` helps to automate this logic, and it provides some convenience
wrappers for getting assets from multiple sources.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
// intended for use as an actual example application.

// #docregion OutputConversion
// #docregion OutputScaling
import 'dart:ui' as ui;

// #enddocregion OutputConversion
// #enddocregion OutputScaling

import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
Expand Down Expand Up @@ -101,6 +103,41 @@ Future<ui.Image> convertSvgOutput() async {
return image;
}

/// Demonstrates scaling SVG to a larger image
Future<ui.Image> scaleSvgOutput() async {
// #docregion OutputScaling
const rawSvg = '''<svg ...>...</svg>''';
final PictureInfo pictureInfo = await vg.loadPicture(
const SvgStringLoader(rawSvg),
null,
);

// You can convert the picture to a scaled image:
const double targetWidth = 512;
const double targetHeight = 512;
final pictureRecorder = ui.PictureRecorder();
final canvas = Canvas(
pictureRecorder,
Rect.fromPoints(
Offset.zero,
const Offset(targetWidth, targetHeight),
),
);
canvas.scale(
targetWidth / pictureInfo.size.width,
targetHeight / pictureInfo.size.height,
);
canvas.drawPicture(pictureInfo.picture);
final ui.Image scaledImage = await pictureRecorder.endRecording().toImage(
targetWidth.ceil(),
targetHeight.ceil(),
);

pictureInfo.picture.dispose();
// #enddocregion OutputScaling
return scaledImage;
}

// #docregion ColorMapper
class _MyColorMapper extends ColorMapper {
const _MyColorMapper();
Expand Down