Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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