Skip to content

Commit

Permalink
Add NumberFormat using intl package
Browse files Browse the repository at this point in the history
  • Loading branch information
Afroz-Shaikh committed May 14, 2024
1 parent deadcb4 commit 2c65b39
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 37 deletions.
90 changes: 55 additions & 35 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -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(),
),
);
}
Expand All @@ -23,21 +26,38 @@ class LinearGaugeExample extends StatefulWidget {
}

class _LinearGaugeExampleState extends State<LinearGaugeExample> {
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,
// )
],
),
),
Expand All @@ -50,29 +70,29 @@ class _LinearGaugeExampleState extends State<LinearGaugeExample> {
/// 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<RadialGaugeExample> createState() => _RadialGaugeExampleState();
}
// @override
// State<RadialGaugeExample> createState() => _RadialGaugeExampleState();
// }

class _RadialGaugeExampleState extends State<RadialGaugeExample> {
@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<RadialGaugeExample> {
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// backgroundColor: Colors.white,
// body: RadialGauge(
// track: RadialTrack(
// start: 0,
// end: 100,
// ),
// needlePointer: [
// NeedlePointer(
// value: 30,
// ),
// ],
// ),
// );
// }
// }
10 changes: 9 additions & 1 deletion example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
15 changes: 15 additions & 0 deletions lib/src/linear_gauge/gauge_container/linear_gauge_container.dart
Original file line number Diff line number Diff line change
@@ -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';

Expand All @@ -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!,
Expand Down Expand Up @@ -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!
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -130,6 +134,7 @@ class RenderLinearGaugeContainer extends RenderBox {
required LinearGradient? linearGradient,
}) : _start = start,
_end = end,
_numberFormat = numberFormat,
_value = value,
_steps = steps,
_gaugeOrientation = gaugeOrientation,
Expand Down Expand Up @@ -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();
}

Expand All @@ -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.
///
Expand Down Expand Up @@ -700,6 +714,7 @@ class RenderLinearGaugeContainer extends RenderBox {
}

_linearGaugeLabel.addLabels(
numberFormat: getNumberFormat,
distanceValueInRangeOfHundred: getSteps == 0.0 ? interval : getSteps,
start: getStart,
end: getEnd,
Expand Down
7 changes: 7 additions & 0 deletions lib/src/linear_gauge/linear_gauge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
///
Expand Down Expand Up @@ -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!,
Expand Down Expand Up @@ -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!
Expand Down
12 changes: 11 additions & 1 deletion lib/src/linear_gauge/linear_gauge_label.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -18,14 +19,23 @@ class LinearGaugeLabel {
TextPainter(textDirection: TextDirection.ltr);

void addLabels({
NumberFormat? numberFormat,
required double distanceValueInRangeOfHundred,
required double start,
required double end,
}) {
_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 =
Expand Down
14 changes: 14 additions & 0 deletions lib/src/linear_gauge/linear_gauge_painter.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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';

Expand All @@ -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,
Expand Down Expand Up @@ -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();
Expand All @@ -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.
///
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ environment:
dependencies:
flutter:
sdk: flutter
intl: ^0.19.0

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 2c65b39

Please sign in to comment.