From da7ec0b98e030600166d879a21d291af41b7442b Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Tue, 21 Nov 2023 15:46:42 +0300 Subject: [PATCH] updating chart pie package --- packages/pie_chart/CHANGELOG.md | 58 ++++ packages/pie_chart/lib/pie_chart.dart | 6 + packages/pie_chart/lib/src/chart_painter.dart | 153 +++++++++++ .../lib/src/chart_values_options.dart | 23 ++ packages/pie_chart/lib/src/legend.dart | 48 ++++ .../pie_chart/lib/src/legend_options.dart | 19 ++ packages/pie_chart/lib/src/pie_chart.dart | 260 ++++++++++++++++++ packages/pie_chart/lib/src/utils.dart | 31 +++ packages/pie_chart/pubspec.lock | 164 +++++++++++ packages/pie_chart/pubspec.yaml | 51 ++++ packages/pie_chart/res/Screenshot1.png | 0 packages/pie_chart/res/app.gif | 0 packages/pie_chart/res/pub_logo.svg | 1 + packages/pie_chart/res/s10.png | 0 packages/pie_chart/res/s2.png | 0 packages/pie_chart/res/s4.png | 0 packages/pie_chart/res/s5.png | 0 packages/pie_chart/res/s6.png | 0 packages/pie_chart/res/s7.png | 0 packages/pie_chart/res/s8.png | 0 packages/pie_chart/res/s9.png | 0 21 files changed, 814 insertions(+) create mode 100644 packages/pie_chart/CHANGELOG.md create mode 100644 packages/pie_chart/lib/pie_chart.dart create mode 100644 packages/pie_chart/lib/src/chart_painter.dart create mode 100644 packages/pie_chart/lib/src/chart_values_options.dart create mode 100644 packages/pie_chart/lib/src/legend.dart create mode 100644 packages/pie_chart/lib/src/legend_options.dart create mode 100644 packages/pie_chart/lib/src/pie_chart.dart create mode 100644 packages/pie_chart/lib/src/utils.dart create mode 100644 packages/pie_chart/pubspec.lock create mode 100644 packages/pie_chart/pubspec.yaml create mode 100644 packages/pie_chart/res/Screenshot1.png create mode 100644 packages/pie_chart/res/app.gif create mode 100644 packages/pie_chart/res/pub_logo.svg create mode 100644 packages/pie_chart/res/s10.png create mode 100644 packages/pie_chart/res/s2.png create mode 100644 packages/pie_chart/res/s4.png create mode 100644 packages/pie_chart/res/s5.png create mode 100644 packages/pie_chart/res/s6.png create mode 100644 packages/pie_chart/res/s7.png create mode 100644 packages/pie_chart/res/s8.png create mode 100644 packages/pie_chart/res/s9.png diff --git a/packages/pie_chart/CHANGELOG.md b/packages/pie_chart/CHANGELOG.md new file mode 100644 index 00000000..533dfd77 --- /dev/null +++ b/packages/pie_chart/CHANGELOG.md @@ -0,0 +1,58 @@ +## [4.0.1] +* Fix README.md for broken images link + +## [4.0.0] **Breaking** +* Wrap different parameters in chartValuesOptions, legendOptions +* Fix number of issues + +## [3.1.1] +* Fix [#22](https://github.com/apgapg/pie_chart/issues/22) showLegends = false causes exception. + +## [3.1.0] +* Add ring shape pie chart support + +## [3.0.0] **Breaking** +* Migrate to AndroidX +* Add dark mode theme +* Remove color from default legendStyle to support dark mode +* Add enum LegendPosition to align chart legend **Breaking** +* Restructure whole project. Optimize code. Code Cleanup + +Thanks [@xsahil03x](https://github.com/xsahil03x) for these changes + +## [2.0.0] +* Fix padding, margin **Breaking** +* Fix error when parent is row +* Adapt to screen size **Breaking** +* Override chartRadius when screen is smaller compare to chartRadius **Breaking** +* Update example with macos and web support + +## [1.3.0] +* Center text to sector center-line +* Add text labels + +## [1.2.0] +* Merge [#12](https://github.com/apgapg/pie_chart/issues/12) Added option for showing decimal places in chart values. Thanks [@VB10](https://github.com/VB10) for PR + +## [1.1.0] +* Merge [#11](https://github.com/apgapg/pie_chart/issues/11) Added option for changing initial angle of pie chart. Thanks [@mschneider](https://github.com/mschneider) for PR + +## [1.0.0] +* Added [#8](https://github.com/apgapg/pie_chart/issues/8) Added option for showing chart values outside the pie chart [@guyzk](https://github.com/guyzk) +* Added [#7](https://github.com/apgapg/pie_chart/issues/7) Hide 0 values on pie chart. Thanks [@guyzk](https://github.com/https://github.com/guyzk) +* Added legend fontFamily support. Thanks [@MahdiPishguy](https://github.com/MahdiPishguy) for PR + +## [0.9.0] +* Fixes [#5](https://github.com/apgapg/pie_chart/issues/5) Added custom colorlist optional parameter. Thanks [@SJente](https://github.com/SJente) +* Fixes [#3](https://github.com/apgapg/pie_chart/issues/3) Update PieChart when data changes. Thanks [@leehuwuj](https://github.com/https://github.com/leehuwuj) +* Fixes [#2](https://github.com/apgapg/pie_chart/issues/2) Added showLegends bool as optional Parameter. Thanks [@cuitao1988](https://github.com/https://github.com/cuitao1988) +* Fixes Exception when data length was greater than 5 +* Added key to PieChart + +## [0.8.0] +* Update README.md +* Format code +* Update min Dart SDK version +Thanks [@xsahil03x](https://github.com/xsahil03x) for this PR + +## [0.7.0] - Initial Release diff --git a/packages/pie_chart/lib/pie_chart.dart b/packages/pie_chart/lib/pie_chart.dart new file mode 100644 index 00000000..0a2e7afa --- /dev/null +++ b/packages/pie_chart/lib/pie_chart.dart @@ -0,0 +1,6 @@ +library pie_chart; + +export 'src/chart_values_options.dart'; +export 'src/legend_options.dart'; +export 'src/pie_chart.dart'; +export 'src/utils.dart' hide defaultColorList; diff --git a/packages/pie_chart/lib/src/chart_painter.dart b/packages/pie_chart/lib/src/chart_painter.dart new file mode 100644 index 00000000..a382433d --- /dev/null +++ b/packages/pie_chart/lib/src/chart_painter.dart @@ -0,0 +1,153 @@ +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:pie_chart/pie_chart.dart'; + +class PieChartPainter extends CustomPainter { + List _paintList = []; + List _subParts; + List _subTitles; + double _total = 0; + double _totalAngle = math.pi * 2; + + final TextStyle chartValueStyle; + final Color chartValueBackgroundColor; + final double initialAngle; + final bool showValuesInPercentage; + final bool showChartValues; + final bool showChartValuesOutside; + final int decimalPlaces; + final bool showChartValueLabel; + final ChartType chartType; + final Function formatChartValues; + final double strokeWidth; + final bool selected; + final List colorList; + double _prevAngle = 0; + final TextStyle sideTextStyle; + + PieChartPainter( + double angleFactor, + this.showChartValues, + this.showChartValuesOutside, + this.colorList, { + this.chartValueStyle, + this.chartValueBackgroundColor, + List values, + List titles, + this.initialAngle, + this.showValuesInPercentage, + this.decimalPlaces, + this.showChartValueLabel, + this.chartType, + this.formatChartValues, + this.strokeWidth, + this.selected = false, + this.sideTextStyle, + }) { + for (int i = 0; i < values.length; i++) { + final paint = Paint()..color = getColor(colorList, i); + if (chartType == ChartType.ring) { + paint.style = PaintingStyle.stroke; + paint.strokeWidth = strokeWidth; + } + + _paintList.add(paint); + } + _totalAngle = angleFactor * math.pi * 2; + _subParts = values; + _subTitles = titles; + _total = values.fold(0, (v1, v2) => v1 + v2); + } + + @override + void paint(Canvas canvas, Size size) { + final side = size.width < size.height ? size.width : size.height; + _prevAngle = this.initialAngle * math.pi / 180; + for (int i = 0; i < _subParts.length; i++) { + canvas.drawArc( + new Rect.fromLTWH(0.0, 0.0, side, size.height), + _prevAngle, + (((_totalAngle) / _total) * _subParts[i]), + chartType == ChartType.disc ? true : false, + _paintList[i], + ); + if (selected) + canvas.drawArc( + new Rect.fromLTWH(-8, -8, side + 16, size.height + 16), + _prevAngle, + (((_totalAngle) / _total) * _subParts[i]), + chartType == ChartType.disc ? true : false, + _paintList[i]..color = _paintList[i].color.withOpacity(0.4), + ); + final radius = showChartValuesOutside ? (side / 2) + 16 : side / 3; + final x = (radius) * math.cos(_prevAngle + ((((_totalAngle) / _total) * _subParts[i]) / 2)); + final y = (radius) * math.sin(_prevAngle + ((((_totalAngle) / _total) * _subParts[i]) / 2)); + if (_subParts.elementAt(i).toInt() != 0) { + final value = formatChartValues != null ? formatChartValues(_subParts.elementAt(i)) : _subParts.elementAt(i).toStringAsFixed(this.decimalPlaces); + +// final name = showValuesInPercentage +// ? (((_subParts.elementAt(i) / _total) * 100) +// .toStringAsFixed(this.decimalPlaces) + +// '%') +// : value; +// final name = showValuesInPercentage ? (((_subParts.elementAt(i) / _total) * 100).toStringAsFixed(this.decimalPlaces) + '%') : _subTitles.elementAt(i); + + if (showChartValues) { + final name = _subTitles[i] + " " + (showValuesInPercentage ? (((_subParts.elementAt(i) / _total) * 100).toStringAsFixed(this.decimalPlaces) + '%') : value); + if (selected) _drawLabel(canvas, name, x, y - 30, side, true, statusColor: getColor(colorList, i)); + _drawLabel(canvas, _subTitles[i], (y > 0 ? x - y : x * 1.7) - 32, y, side + 8, false); + } + } + _prevAngle = _prevAngle + (((_totalAngle) / _total) * _subParts[i]); + } + } + + void _drawLabel(Canvas canvas, String name, double x, double y, double side, bool withBackground, {Color statusColor = Colors.white}) { + TextSpan span = TextSpan( + style: withBackground ? chartValueStyle : sideTextStyle, + text: name, + ); + TextPainter tp = TextPainter( + text: span, + textAlign: TextAlign.center, + textDirection: TextDirection.ltr, + ); + tp.layout(); + + if (withBackground && showChartValueLabel) { + //Draw text background box + final rect = Rect.fromCenter( + center: Offset((side / 2 + (x + 16)), (side / 2 + y)), + width: tp.width + 45, + height: tp.height + 16, + ); + final rect2 = Rect.fromCenter( + center: new Offset( + (side / 2 + x) - ((tp.width - 16) / 2), + (side / 2 + y) - ((tp.height - 16) / 2), + ), + width: 12, + height: 12, + ); + final rRect = RRect.fromRectAndRadius(rect, Radius.circular(8)); + final rRect2 = RRect.fromRectAndRadius(rect2, Radius.circular(1)); + final paint = Paint() + ..color = chartValueBackgroundColor ?? Colors.grey[200] + ..style = PaintingStyle.fill; + canvas.drawRRect(rRect, paint); + canvas.drawRRect(rRect2, paint..color = statusColor); + } + //Finally paint the text above box + tp.paint( + canvas, + new Offset( + (side / 2 + x) - ((tp.width - 50) / 2), + (side / 2 + y) - ((tp.height) / 2), + ), + ); + } + + @override + bool shouldRepaint(PieChartPainter oldDelegate) => oldDelegate._totalAngle != _totalAngle || selected != oldDelegate.selected; +} diff --git a/packages/pie_chart/lib/src/chart_values_options.dart b/packages/pie_chart/lib/src/chart_values_options.dart new file mode 100644 index 00000000..feec3015 --- /dev/null +++ b/packages/pie_chart/lib/src/chart_values_options.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:pie_chart/pie_chart.dart'; +import 'package:pie_chart/src/utils.dart'; + +class ChartValuesOptions { + final bool showChartValueBackground; + final int decimalPlaces; + final bool showChartValuesInPercentage; + final bool showChartValues; + final bool showChartValuesOutside; + final Color chartValueBackgroundColor; + final TextStyle chartValueStyle; + + const ChartValuesOptions({ + this.showChartValueBackground = true, + this.decimalPlaces = 1, + this.chartValueBackgroundColor, + this.showChartValuesInPercentage = false, + this.chartValueStyle = defaultChartValueStyle, + this.showChartValues = true, + this.showChartValuesOutside = false, + }); +} diff --git a/packages/pie_chart/lib/src/legend.dart b/packages/pie_chart/lib/src/legend.dart new file mode 100644 index 00000000..be052197 --- /dev/null +++ b/packages/pie_chart/lib/src/legend.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; + +class Legend extends StatelessWidget { + Legend({ + @required this.title, + @required this.color, + @required this.style, + @required this.legendShape, + }); + + final String title; + final Color color; + final TextStyle style; + final BoxShape legendShape; + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.symmetric(vertical: 2.0), + height: 20.0, + width: 18.0, + decoration: BoxDecoration( + shape: legendShape, + color: color, + ), + ), + SizedBox( + width: 8.0, + ), + Flexible( + fit: FlexFit.loose, + child: Text( + title, + style: style, + softWrap: true, + ), + ), + SizedBox( + width: 8.0, + ), + ], + ); + } +} diff --git a/packages/pie_chart/lib/src/legend_options.dart b/packages/pie_chart/lib/src/legend_options.dart new file mode 100644 index 00000000..f3d17370 --- /dev/null +++ b/packages/pie_chart/lib/src/legend_options.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; +import 'package:pie_chart/pie_chart.dart'; +import 'package:pie_chart/src/utils.dart'; + +class LegendOptions { + final bool showLegends; + final bool showLegendsInRow; + final TextStyle legendTextStyle; + final BoxShape legendShape; + final LegendPosition legendPosition; + + const LegendOptions({ + this.showLegends = true, + this.showLegendsInRow = false, + this.legendTextStyle = defaultLegendStyle, + this.legendShape = BoxShape.circle, + this.legendPosition = LegendPosition.right, + }); +} diff --git a/packages/pie_chart/lib/src/pie_chart.dart b/packages/pie_chart/lib/src/pie_chart.dart new file mode 100644 index 00000000..e4c9a472 --- /dev/null +++ b/packages/pie_chart/lib/src/pie_chart.dart @@ -0,0 +1,260 @@ +import 'package:flutter/material.dart'; +import 'package:pie_chart/pie_chart.dart'; + +import 'chart_painter.dart'; +import 'legend.dart'; +import 'utils.dart'; + +enum LegendPosition { top, bottom, left, right } + +enum ChartType { disc, ring } + +class PieChart extends StatefulWidget { + PieChart({ + @required this.dataMap, + this.chartType = ChartType.disc, + this.chartRadius, + this.animationDuration, + this.chartLegendSpacing = 48, + this.colorList = defaultColorList, + this.initialAngleInDegree = 0.0, + this.formatChartValues, + this.centerWidget, + this.ringStrokeWidth = 20.0, + this.legendOptions = const LegendOptions(), + this.chartValuesOptions = const ChartValuesOptions(), + this.sideTextStyle, + Key key, + }) : super(key: key); + + final Map dataMap; + final ChartType chartType; + final double chartRadius; + final Duration animationDuration; + final double chartLegendSpacing; + final List colorList; + final double initialAngleInDegree; + final Function formatChartValues; + final Widget centerWidget; + final double ringStrokeWidth; + final LegendOptions legendOptions; + final ChartValuesOptions chartValuesOptions; + final TextStyle sideTextStyle; + + @override + _PieChartState createState() => _PieChartState(); +} + +class _PieChartState extends State with SingleTickerProviderStateMixin { + Animation animation; + AnimationController controller; + double _animFraction = 0.0; + bool _selected = false; + + List legendTitles; + List legendValues; + + void initLegends() { + this.legendTitles = widget.dataMap.keys.toList(growable: false); + } + + void initValues() { + this.legendValues = widget.dataMap.values.toList(growable: false); + } + + void initData() { + assert( + widget.dataMap != null && widget.dataMap.isNotEmpty, + "dataMap passed to pie chart cant be null or empty", + ); + initLegends(); + initValues(); + } + + @override + void initState() { + super.initState(); + initData(); + controller = AnimationController( + duration: widget.animationDuration ?? Duration(milliseconds: 800), + vsync: this, + ); + final Animation curve = CurvedAnimation( + parent: controller, + curve: Curves.decelerate, + ); + animation = Tween(begin: 0, end: 1).animate(curve) + ..addListener(() { + setState(() { + _animFraction = animation.value; + }); + }); + controller.forward(); + } + + Widget _getChart() { + return Flexible( + child: Stack( + alignment: Alignment.center, + children: [ + LayoutBuilder( + builder: (_, c) => Container( + height: widget.chartRadius != null + ? c.maxWidth < widget.chartRadius + ? c.maxWidth + : widget.chartRadius + : null, + child: InkWell( + onTap: () { + setState(() { + _selected = !_selected; + }); + }, + child: CustomPaint( + painter: PieChartPainter( + _animFraction, + widget.chartValuesOptions.showChartValues, + widget.chartValuesOptions.showChartValuesOutside, + widget.colorList, + chartValueStyle: widget.chartValuesOptions.chartValueStyle, + chartValueBackgroundColor: widget.chartValuesOptions.chartValueBackgroundColor, + values: legendValues, + titles: legendTitles, + initialAngle: widget.initialAngleInDegree, + showValuesInPercentage: widget.chartValuesOptions.showChartValuesInPercentage, + decimalPlaces: widget.chartValuesOptions.decimalPlaces, + showChartValueLabel: widget.chartValuesOptions.showChartValueBackground, + chartType: widget.chartType, + formatChartValues: widget.formatChartValues, + strokeWidth: widget.ringStrokeWidth, + selected: _selected, + sideTextStyle: widget.sideTextStyle, + ), + child: AspectRatio(aspectRatio: 1), + ), + ), + ), + ), + if (widget.centerWidget != null) widget.centerWidget, + ], + ), + ); + } + + Widget _getPieChart() { + switch (widget.legendOptions.legendPosition) { + case LegendPosition.top: + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + _getLegend( + padding: EdgeInsets.only( + bottom: widget.chartLegendSpacing, + ), + ), + _getChart(), + ], + ); + + case LegendPosition.bottom: + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + _getChart(), + _getLegend( + padding: EdgeInsets.only( + top: widget.chartLegendSpacing, + ), + ), + ], + ); + case LegendPosition.left: + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + _getLegend( + padding: EdgeInsets.only( + right: widget.chartLegendSpacing, + ), + ), + _getChart(), + ], + ); + case LegendPosition.right: + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + _getChart(), + _getLegend( + padding: EdgeInsets.only( + left: widget.chartLegendSpacing, + ), + ), + ], + ); + default: + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + _getChart(), + _getLegend( + padding: EdgeInsets.only( + left: widget.chartLegendSpacing, + ), + ), + ], + ); + } + } + + _getLegend({EdgeInsets padding}) { + if (widget.legendOptions.showLegends) { + return Padding( + padding: padding, + child: Wrap( + direction: widget.legendOptions.showLegendsInRow ? Axis.horizontal : Axis.vertical, + runSpacing: 8, + crossAxisAlignment: WrapCrossAlignment.start, + children: legendTitles + .map( + (item) => Legend( + title: item, + color: getColor( + widget.colorList, + legendTitles.indexOf(item), + ), + style: widget.legendOptions.legendTextStyle, + legendShape: widget.legendOptions.legendShape, + ), + ) + .toList(), + ), + ); + } else + return SizedBox( + height: 0, + width: 0, + ); + } + + @override + Widget build(BuildContext context) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.all(8.0), + child: _getPieChart(), + ); + } + + @override + void didUpdateWidget(PieChart oldWidget) { + initData(); + super.didUpdateWidget(oldWidget); + } + + @override + void dispose() { + controller?.dispose(); + super.dispose(); + } +} diff --git a/packages/pie_chart/lib/src/utils.dart b/packages/pie_chart/lib/src/utils.dart new file mode 100644 index 00000000..8eebb079 --- /dev/null +++ b/packages/pie_chart/lib/src/utils.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +const defaultChartValueStyle = TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.black, +); + +const defaultLegendStyle = TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, +); + +const List defaultColorList = [ + Color(0xFFff7675), + Color(0xFF74b9ff), + Color(0xFF55efc4), + Color(0xFFffeaa7), + Color(0xFFa29bfe), + Color(0xFFfd79a8), + Color(0xFFe17055), + Color(0xFF00b894), +]; + +Color getColor(List colorList, int index) { + if (index > (colorList.length - 1)) { + final newIndex = index % (colorList.length - 1); + return colorList.elementAt(newIndex); + } + return colorList.elementAt(index); +} diff --git a/packages/pie_chart/pubspec.lock b/packages/pie_chart/pubspec.lock new file mode 100644 index 00000000..7a7d0e5f --- /dev/null +++ b/packages/pie_chart/pubspec.lock @@ -0,0 +1,164 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" +sdks: + dart: ">=2.18.0 <3.0.0" diff --git a/packages/pie_chart/pubspec.yaml b/packages/pie_chart/pubspec.yaml new file mode 100644 index 00000000..109577b7 --- /dev/null +++ b/packages/pie_chart/pubspec.yaml @@ -0,0 +1,51 @@ +name: pie_chart +description: A Flutter package for creating beautiful Pie Charts with awesome animation. +version: 4.0.1 + +environment: + sdk: ">=2.2.2 <3.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://www.dartlang.org/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + +# To add assets to your package, add an assets section, like this: +# assets: +# - images/a_dot_burr.jpeg +# - images/a_dot_ham.jpeg +# +# For details regarding assets in packages, see +# https://flutter.io/assets-and-images/#from-packages +# +# An image asset can refer to one or more resolution-specific "variants", see +# https://flutter.io/assets-and-images/#resolution-aware. + +# To add custom fonts to your package, add a fonts section here, +# in this "flutter" section. Each entry in this list should have a +# "family" key with the font family name, and a "fonts" key with a +# list giving the asset and other descriptors for the font. For +# example: +# fonts: +# - family: Schyler +# fonts: +# - asset: fonts/Schyler-Regular.ttf +# - asset: fonts/Schyler-Italic.ttf +# style: italic +# - family: Trajan Pro +# fonts: +# - asset: fonts/TrajanPro.ttf +# - asset: fonts/TrajanPro_Bold.ttf +# weight: 700 +# +# For details regarding fonts in packages, see +# https://flutter.io/custom-fonts/#from-packages diff --git a/packages/pie_chart/res/Screenshot1.png b/packages/pie_chart/res/Screenshot1.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/app.gif b/packages/pie_chart/res/app.gif new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/pub_logo.svg b/packages/pie_chart/res/pub_logo.svg new file mode 100644 index 00000000..a987367c --- /dev/null +++ b/packages/pie_chart/res/pub_logo.svg @@ -0,0 +1 @@ +pubpubv0.3.0 \ No newline at end of file diff --git a/packages/pie_chart/res/s10.png b/packages/pie_chart/res/s10.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s2.png b/packages/pie_chart/res/s2.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s4.png b/packages/pie_chart/res/s4.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s5.png b/packages/pie_chart/res/s5.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s6.png b/packages/pie_chart/res/s6.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s7.png b/packages/pie_chart/res/s7.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s8.png b/packages/pie_chart/res/s8.png new file mode 100644 index 00000000..e69de29b diff --git a/packages/pie_chart/res/s9.png b/packages/pie_chart/res/s9.png new file mode 100644 index 00000000..e69de29b