Skip to content
Merged
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
4 changes: 4 additions & 0 deletions packages/vector_graphics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## NEXT

* Updates minimum supported SDK version to Flutter 3.29/Dart 3.7.

## 1.1.19

* Updates minimum supported SDK version to Flutter 3.24/Dart 3.5.
Expand Down
36 changes: 19 additions & 17 deletions packages/vector_graphics/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Vector Graphics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
theme: ThemeData(primarySwatch: Colors.blue),
home: const Scaffold(
body: Center(
child: VectorGraphic(
Expand All @@ -49,20 +47,24 @@ class NetworkSvgLoader extends BytesLoader {

@override
Future<ByteData> loadBytes(BuildContext? context) async {
return compute((String svgUrl) async {
final http.Response request = await http.get(Uri.parse(svgUrl));
final TimelineTask task = TimelineTask()..start('encodeSvg');
final Uint8List compiledBytes = encodeSvg(
xml: request.body,
debugName: svgUrl,
enableClippingOptimizer: false,
enableMaskingOptimizer: false,
enableOverdrawOptimizer: false,
);
task.finish();
// sendAndExit will make sure this isn't copied.
return compiledBytes.buffer.asByteData();
}, url, debugLabel: 'Load Bytes');
return compute(
(String svgUrl) async {
final http.Response request = await http.get(Uri.parse(svgUrl));
final TimelineTask task = TimelineTask()..start('encodeSvg');
final Uint8List compiledBytes = encodeSvg(
xml: request.body,
debugName: svgUrl,
enableClippingOptimizer: false,
enableMaskingOptimizer: false,
enableOverdrawOptimizer: false,
);
task.finish();
// sendAndExit will make sure this isn't copied.
return compiledBytes.buffer.asByteData();
},
url,
debugLabel: 'Load Bytes',
);
}

@override
Expand Down
79 changes: 41 additions & 38 deletions packages/vector_graphics/example/lib/svg_string.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ class MyApp extends StatefulWidget {
}

class _MyAppState extends State<MyApp> {
final TextEditingController _controller =
TextEditingController(text: _flutterLogoString);
final TextEditingController _controller = TextEditingController(
text: _flutterLogoString,
);
ByteData? _data;
Timer? _debounce;
int _svgLength = 0;
Expand All @@ -61,32 +62,38 @@ class _MyAppState extends State<MyApp> {
_debounce?.cancel();
}
_debounce = Timer(const Duration(milliseconds: 250), () {
compute((String svg) {
final Uint8List compiledBytes = encodeSvg(
xml: svg,
debugName: '<string>',
enableClippingOptimizer: false,
enableMaskingOptimizer: false,
enableOverdrawOptimizer: false,
);
return compiledBytes.buffer.asByteData();
}, text, debugLabel: 'Load Bytes')
.then((ByteData data) {
if (!mounted) {
return;
}
setState(() {
// String is UTF-16.
_svgLength = text.length * 2;
_gzSvgLength = gzip.encode(utf8.encode(text)).length;
_vgLength = data.lengthInBytes;
_gzVgLength = gzip.encode(data.buffer.asUint8List()).length;
_data = data;
});
}, onError: (Object error, StackTrace stack) {
debugPrint(error.toString());
debugPrint(stack.toString());
});
compute(
(String svg) {
final Uint8List compiledBytes = encodeSvg(
xml: svg,
debugName: '<string>',
enableClippingOptimizer: false,
enableMaskingOptimizer: false,
enableOverdrawOptimizer: false,
);
return compiledBytes.buffer.asByteData();
},
text,
debugLabel: 'Load Bytes',
).then(
(ByteData data) {
if (!mounted) {
return;
}
setState(() {
// String is UTF-16.
_svgLength = text.length * 2;
_gzSvgLength = gzip.encode(utf8.encode(text)).length;
_vgLength = data.lengthInBytes;
_gzVgLength = gzip.encode(data.buffer.asUint8List()).length;
_data = data;
});
},
onError: (Object error, StackTrace stack) {
debugPrint(error.toString());
debugPrint(stack.toString());
},
);
});
}

Expand All @@ -109,9 +116,7 @@ class _MyAppState extends State<MyApp> {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Vector Graphics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
theme: ThemeData(primarySwatch: Colors.blue),
home: Scaffold(
body: Center(
child: ListView(
Expand All @@ -120,14 +125,12 @@ class _MyAppState extends State<MyApp> {
if (_data == null)
const Placeholder()
else
VectorGraphic(
loader: RawBytesLoader(
_data!,
),
),
VectorGraphic(loader: RawBytesLoader(_data!)),
const Divider(),
Text('SVG size (compressed): $_svgLength ($_gzSvgLength). '
'VG size (compressed): $_vgLength ($_gzVgLength)'),
Text(
'SVG size (compressed): $_svgLength ($_gzSvgLength). '
'VG size (compressed): $_vgLength ($_gzVgLength)',
),
const Divider(),
Padding(
padding: const EdgeInsets.all(8.0),
Expand Down
2 changes: 1 addition & 1 deletion packages/vector_graphics/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: An example of the vector_graphics package
publish_to: 'none'

environment:
sdk: ^3.6.0
sdk: ^3.7.0

dependencies:
flutter:
Expand Down
55 changes: 26 additions & 29 deletions packages/vector_graphics/lib/src/html_render_vector_graphics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,10 @@ class RenderWebVectorGraphic extends RenderBox {
void paint(PaintingContext context, ui.Offset offset) {
assert(size == pictureInfo.size);
if (kDebugMode && debugSkipRaster) {
context.canvas
.drawRect(offset & size, Paint()..color = const Color(0xFFFF00FF));
context.canvas.drawRect(
offset & size,
Paint()..color = const Color(0xFFFF00FF),
);
return;
}

Expand All @@ -144,33 +146,28 @@ class RenderWebVectorGraphic extends RenderBox {

// The HTML backend cannot correctly draw saveLayer opacity or color
// filters. Nor does it support toImageSync.
_transformLayer.layer = context.pushTransform(
true,
offset,
_transform,
(PaintingContext context, Offset offset) {
_opacityHandle.layer = context.pushOpacity(
offset,
(_opacityValue * 255).round(),
(PaintingContext context, Offset offset) {
if (colorFilter != null) {
_filterLayer.layer = context.pushColorFilter(
offset,
colorFilter!,
(PaintingContext context, Offset offset) {
context.canvas.drawPicture(pictureInfo.picture);
},
oldLayer: _filterLayer.layer,
);
} else {
_filterLayer.layer = null;
_transformLayer.layer = context.pushTransform(true, offset, _transform, (
PaintingContext context,
Offset offset,
) {
_opacityHandle.layer = context.pushOpacity(
offset,
(_opacityValue * 255).round(),
(PaintingContext context, Offset offset) {
if (colorFilter != null) {
_filterLayer.layer = context.pushColorFilter(offset, colorFilter!, (
PaintingContext context,
Offset offset,
) {
context.canvas.drawPicture(pictureInfo.picture);
}
},
oldLayer: _opacityHandle.layer,
);
},
oldLayer: _transformLayer.layer,
);
}, oldLayer: _filterLayer.layer);
} else {
_filterLayer.layer = null;
context.canvas.drawPicture(pictureInfo.picture);
}
},
oldLayer: _opacityHandle.layer,
);
}, oldLayer: _transformLayer.layer);
}
}
Loading