diff --git a/example/lib/main.dart b/example/lib/main.dart index 30e7c13..caf6448 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,12 +1,15 @@ import 'package:example/gauge_vertical.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; +// import 'package:syncfusion_flutter_gauges/gauges.dart'; +import 'package:intl/intl.dart'; void main() { runApp( const MaterialApp( debugShowCheckedModeBanner: false, - home: MyVerticalGauge(), + home: LinearGaugeExample(), ), ); } @@ -23,21 +26,38 @@ class LinearGaugeExample extends StatefulWidget { } class _LinearGaugeExampleState extends State { + NumberFormat formatter = + NumberFormat.currency(locale: 'en_US', name: 'Rupees'); + @override Widget build(BuildContext context) { return Scaffold( body: Center( - child: LinearGauge( - gaugeOrientation: GaugeOrientation.horizontal, - enableGaugeAnimation: true, - rulers: RulerStyle( - rulerPosition: RulerPosition.bottom, - ), - pointers: const [ - Pointer( - value: 50, - shape: PointerShape.circle, + child: Column( + children: [ + LinearGauge( + numberFormat: + NumberFormat.currency(decimalDigits: 1, symbol: 'F'), + start: -70.33, + end: 62.4444, + gaugeOrientation: GaugeOrientation.horizontal, + enableGaugeAnimation: true, + rulers: RulerStyle( + rulerPosition: RulerPosition.bottom, + ), + pointers: const [ + Pointer( + value: 50, + shape: PointerShape.circle, + ), + ], ), + // SfLinearGauge( + // showAxisTrack: true, + // minimum: -70.333333, + // numberFormat: NumberFormat.currency(decimalDigits: 1, symbol: ''), + // maximum: 62.4, + // ) ], ), ), @@ -50,29 +70,29 @@ class _LinearGaugeExampleState extends State { /// You can customize the [RadialGauge] Widget as per your need. /// -class RadialGaugeExample extends StatefulWidget { - const RadialGaugeExample({super.key}); +// class RadialGaugeExample extends StatefulWidget { +// const RadialGaugeExample({super.key}); - @override - State createState() => _RadialGaugeExampleState(); -} +// @override +// State createState() => _RadialGaugeExampleState(); +// } -class _RadialGaugeExampleState extends State { - @override - Widget build(BuildContext context) { - return const Scaffold( - backgroundColor: Colors.white, - body: RadialGauge( - track: RadialTrack( - start: 0, - end: 100, - ), - needlePointer: [ - NeedlePointer( - value: 30, - ), - ], - ), - ); - } -} +// class _RadialGaugeExampleState extends State { +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// backgroundColor: Colors.white, +// body: RadialGauge( +// track: RadialTrack( +// start: 0, +// end: 100, +// ), +// needlePointer: [ +// NeedlePointer( +// value: 30, +// ), +// ], +// ), +// ); +// } +// } diff --git a/example/pubspec.lock b/example/pubspec.lock index 7ead57d..4b5d659 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -81,7 +81,15 @@ packages: path: ".." relative: true source: path - version: "1.0.3" + version: "1.0.4" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" leak_tracker: dependency: transitive description: diff --git a/lib/src/linear_gauge/gauge_container/linear_gauge_container.dart b/lib/src/linear_gauge/gauge_container/linear_gauge_container.dart index 15486ee..404fe60 100644 --- a/lib/src/linear_gauge/gauge_container/linear_gauge_container.dart +++ b/lib/src/linear_gauge/gauge_container/linear_gauge_container.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; +import 'package:intl/intl.dart'; import 'dart:math' as math; import '../linear_gauge_label.dart'; @@ -19,6 +20,7 @@ class LinearGaugeContainer extends LeafRenderObjectWidget { return RenderLinearGaugeContainer( start: linearGauge.start!, end: linearGauge.end!, + numberFormat: linearGauge.numberFormat ?? NumberFormat('#.##'), value: linearGauge.value!, steps: linearGauge.steps!, gaugeOrientation: linearGauge.gaugeOrientation!, @@ -59,6 +61,7 @@ class LinearGaugeContainer extends LeafRenderObjectWidget { renderObject ..setStart = linearGauge.start! ..setEnd = linearGauge.end! + ..setNumberFormat = linearGauge.numberFormat ?? NumberFormat('#.##') ..setValue = linearGauge.value! ..setSteps = linearGauge.steps! ..setGaugeOrientation = linearGauge.gaugeOrientation! @@ -98,6 +101,7 @@ class RenderLinearGaugeContainer extends RenderBox { RenderLinearGaugeContainer({ required double start, required double end, + required NumberFormat numberFormat, required double steps, required double value, required GaugeOrientation gaugeOrientation, @@ -130,6 +134,7 @@ class RenderLinearGaugeContainer extends RenderBox { required LinearGradient? linearGradient, }) : _start = start, _end = end, + _numberFormat = numberFormat, _value = value, _steps = steps, _gaugeOrientation = gaugeOrientation, @@ -181,6 +186,7 @@ class RenderLinearGaugeContainer extends RenderBox { set setStart(double start) { if (_start == start) return; _start = start; + // _start = double.parse(start.toStringAsFixed(2)); markNeedsPaint(); } @@ -205,6 +211,14 @@ class RenderLinearGaugeContainer extends RenderBox { markNeedsPaint(); } + NumberFormat get getNumberFormat => _numberFormat ?? NumberFormat('#.##'); + NumberFormat? _numberFormat; + set setNumberFormat(NumberFormat? numberFormat) { + if (_numberFormat == numberFormat) return; + _numberFormat = numberFormat; + markNeedsPaint(); + } + /// /// Getter and Setter for the [_steps] parameter. /// @@ -700,6 +714,7 @@ class RenderLinearGaugeContainer extends RenderBox { } _linearGaugeLabel.addLabels( + numberFormat: getNumberFormat, distanceValueInRangeOfHundred: getSteps == 0.0 ? interval : getSteps, start: getStart, end: getEnd, diff --git a/lib/src/linear_gauge/linear_gauge.dart b/lib/src/linear_gauge/linear_gauge.dart index 0b45332..e6364d0 100644 --- a/lib/src/linear_gauge/linear_gauge.dart +++ b/lib/src/linear_gauge/linear_gauge.dart @@ -7,6 +7,7 @@ import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/label_painter.d import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/rulers.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/rulers_painter.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/value_bar/valuebar_painter.dart'; +import 'package:intl/intl.dart' show NumberFormat; import 'linear_gauge_painter.dart'; /// Creates a LinearGauge Widget to display the values in a linear scale. The @@ -44,6 +45,7 @@ class LinearGauge extends StatefulWidget { Key? key, this.start = 0, this.end = 100, + this.numberFormat, this.steps = 0, @Deprecated('Use ValueBar instead') this.value = 0, this.gaugeOrientation = GaugeOrientation.horizontal, @@ -155,6 +157,9 @@ class LinearGauge extends StatefulWidget { /// final double? steps; + //! + final NumberFormat? numberFormat; + /// /// `extendLinearGauge` Sets the rulers & labels away from the ending points of [LinearGauge] Container /// @@ -712,6 +717,7 @@ class _RLinearGauge extends MultiChildRenderObjectWidget { return RenderLinearGauge( start: lGauge.start!, end: lGauge.end!, + numberFormat: lGauge.numberFormat ?? NumberFormat('#.##'), steps: lGauge.steps!, gaugeOrientation: lGauge.gaugeOrientation!, primaryRulersWidth: lGauge.rulers!.primaryRulersWidth!, @@ -741,6 +747,7 @@ class _RLinearGauge extends MultiChildRenderObjectWidget { BuildContext context, RenderLinearGauge renderObject) { renderObject ..setCustomLabels = lGauge.customLabels! + ..setNumberFormat = lGauge.numberFormat! ..setGaugeOrientation = lGauge.gaugeOrientation! ..setPrimaryRulersHeight = lGauge.rulers!.primaryRulersHeight! ..setPrimaryRulersWidth = lGauge.rulers!.primaryRulersWidth! diff --git a/lib/src/linear_gauge/linear_gauge_label.dart b/lib/src/linear_gauge/linear_gauge_label.dart index 140d7a4..c52c90a 100644 --- a/lib/src/linear_gauge/linear_gauge_label.dart +++ b/lib/src/linear_gauge/linear_gauge_label.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/gauge_container/linear_gauge_container.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/rulers_painter.dart'; +import 'package:intl/intl.dart' show NumberFormat; class LinearGaugeLabel { String? text; @@ -18,6 +19,7 @@ class LinearGaugeLabel { TextPainter(textDirection: TextDirection.ltr); void addLabels({ + NumberFormat? numberFormat, required double distanceValueInRangeOfHundred, required double start, required double end, @@ -25,7 +27,15 @@ class LinearGaugeLabel { _linearGaugeLabel.clear(); for (double i = start; i <= end; i += distanceValueInRangeOfHundred) { - _linearGaugeLabel.add(LinearGaugeLabel(text: i.toString(), value: i)); + String temp; + if (numberFormat != null) { + temp = numberFormat.format(i); + } else { + temp = i.toString(); + } + _linearGaugeLabel.add(LinearGaugeLabel(text: temp, value: i)); + // _linearGaugeLabel + // .add(LinearGaugeLabel(text: i.toStringAsFixed(2), value: i)); } final LinearGaugeLabel localLabel = diff --git a/lib/src/linear_gauge/linear_gauge_painter.dart b/lib/src/linear_gauge/linear_gauge_painter.dart index 3058d88..768e224 100644 --- a/lib/src/linear_gauge/linear_gauge_painter.dart +++ b/lib/src/linear_gauge/linear_gauge_painter.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; @@ -7,6 +9,7 @@ import 'package:geekyants_flutter_gauges/src/linear_gauge/linear_gauge_label.dar import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/label_painter.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/rulers/rulers_painter.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/value_bar/valuebar_painter.dart'; +import 'package:intl/intl.dart' show NumberFormat; import 'gauge_container/linear_gauge_container.dart'; @@ -18,6 +21,7 @@ class RenderLinearGauge extends RenderBox RenderLinearGauge({ required double start, required double end, + required NumberFormat numberFormat, required double steps, required GaugeOrientation gaugeOrientation, required TextStyle textStyle, @@ -143,6 +147,8 @@ class RenderLinearGauge extends RenderBox double get getStart => _start; double _start; set setStart(double start) { + log('Setting start as $start'); + if (_start == start) return; _start = start; markNeedsPaint(); @@ -159,6 +165,14 @@ class RenderLinearGauge extends RenderBox markNeedsPaint(); } + get getNumberFormat => _numberFormat; + NumberFormat? _numberFormat; + set setNumberFormat(NumberFormat? numberFormat) { + if (_numberFormat == numberFormat) return; + _numberFormat = numberFormat; + markNeedsPaint(); + } + /// /// Getter and Setter for the [_steps] parameter. /// diff --git a/pubspec.yaml b/pubspec.yaml index 2d64f0f..ed664fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,6 +11,7 @@ environment: dependencies: flutter: sdk: flutter + intl: ^0.19.0 dev_dependencies: flutter_test: