svg_path_parser 0.0.9 svg_path_parser: ^0.0.9 copied to clipboard
A Flutter/Dart utility to parse an SVG path into a equivalent Path object from dart:ui library.
import 'package:flutter/material.dart';
import 'package:svg_path_parser/svg_path_parser.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
final paths = [
"M213.1,6.7c-32.4-14.4-73.7,0-88.1,30.6C110.6,4.9,67.5-9.5,36.9,"
"6.7C2.8,22.9-13.4,62.4,13.5,110.9C33.3,145.1,67.5,170.3,125,217"
"c59.3-46.7,93.5-71.9,111.5-106.1C263.4,64.2,247.2,22.9,213.1,6.7z",
"M 125,75 a100,50 0 0 1 100,50",
"M 25,100C25,150,75,150,75,100S100,25,150,75",
"M 25,75Q 50,150 75,100 T 150,150",
];
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int i = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
setState(() {
i = (i + 1) % widget.paths.length;
});
},
child: Center(
child: Container(
width: 300,
height: 400,
decoration: BoxDecoration(border: Border.all(color: Colors.red, width: 1.0)),
child: CustomPaint(
painter: MyPainter(parseSvgPath(widget.paths[i])),
),
),
),
),
);
}
}
class MyPainter extends CustomPainter {
final Path path;
MyPainter(this.path);
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
..color = Colors.blue
..style = PaintingStyle.stroke
..strokeWidth = 4.0
..strokeCap = StrokeCap.round;
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}