Skip to content

Commit

Permalink
Merge pull request #220 from SahilSharma2710/update-child_widgets
Browse files Browse the repository at this point in the history
fix:data flow in children
  • Loading branch information
hasnentai authored May 29, 2023
2 parents eea79ef + ed687ed commit a1fcbea
Show file tree
Hide file tree
Showing 12 changed files with 220 additions and 190 deletions.
14 changes: 7 additions & 7 deletions example/lib/multiple_pointer_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ class _MultiplePointerExampleState extends State<MultiplePointerExample> {
showLabel: true,
shape: PointerShape.rectangle,
quarterTurns: QuarterTurns.two,
labelStyle: TextStyle(color: Colors.green),
color: Color(0xff624CAB),
labelStyle: const TextStyle(color: Colors.green),
color: const Color(0xff624CAB),
// shape: PointerShape.circle,
),
Pointer(
Expand All @@ -37,7 +37,7 @@ class _MultiplePointerExampleState extends State<MultiplePointerExample> {
height: 50,
showLabel: true,
shape: PointerShape.rectangle,
labelStyle: TextStyle(color: Colors.green),
labelStyle: const TextStyle(color: Colors.green),
color: Colors.red,
),
Pointer(
Expand All @@ -46,8 +46,8 @@ class _MultiplePointerExampleState extends State<MultiplePointerExample> {
height: 70,
showLabel: true,
shape: PointerShape.rectangle,
labelStyle: TextStyle(color: Colors.red),
color: Color(0xffD64933),
labelStyle: const TextStyle(color: Colors.red),
color: const Color(0xffD64933),
// shape: PointerShape.circle,
),
Pointer(
Expand All @@ -56,8 +56,8 @@ class _MultiplePointerExampleState extends State<MultiplePointerExample> {
height: 45,
showLabel: true,
shape: PointerShape.rectangle,
labelStyle: TextStyle(color: Colors.red),
color: Color(0xffB5FFE9),
labelStyle: const TextStyle(color: Colors.red),
color: const Color(0xffB5FFE9),
// shape: PointerShape.circle,
),
],
Expand Down
2 changes: 1 addition & 1 deletion example/lib/pointer_alignment_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart';

class PointerAlignmentExample extends StatefulWidget {
PointerAlignmentExample({super.key});
const PointerAlignmentExample({super.key});

@override
State<PointerAlignmentExample> createState() =>
Expand Down
2 changes: 1 addition & 1 deletion example/lib/tickness_extend_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class _ThicknessExtendExampleState extends State<ThicknessExtendExample> {
width: 20,
value: 150,
showLabel: false,
labelStyle: TextStyle(
labelStyle: const TextStyle(
color: Colors.black,
),
),
Expand Down
46 changes: 20 additions & 26 deletions lib/src/linear_gauge/curve/custom_curve_painter.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import 'package:flutter/material.dart';
import 'package:geekyants_flutter_gauges/src/linear_gauge/gauge_container/linear_gauge_container.dart';
import 'package:geekyants_flutter_gauges/src/linear_gauge/linear_gauge_label.dart';
import 'package:geekyants_flutter_gauges/src/linear_gauge/linear_gauge_painter.dart';

import '../../../geekyants_flutter_gauges.dart';
Expand Down Expand Up @@ -32,6 +30,7 @@ class RenderCurve extends RenderBox {
_paintStyle = paintStyle;

double yAxisForGaugeContainer = 0, xAxisForGaugeContainer = 0;
late double gaugeStart, gaugeEnd;

LinearGauge get linearGauge => _linearGauge;
LinearGauge _linearGauge;
Expand Down Expand Up @@ -269,19 +268,17 @@ class RenderCurve extends RenderBox {
}

final double midPointInPixel = valueToPixel(calculatedValue) +
RenderLinearGaugeContainer.gaugeStart +
gaugeStart +
linearGauge.extendLinearGauge!;
final double endValueInPX =
RenderLinearGaugeContainer.gaugeEnd - valueToPixel(end!);
final double endValueInPX = gaugeEnd - valueToPixel(end!);

final OffsetTuple? tuple = getStartAndEndOffsets(
linearGauge.gaugeOrientation!,
curvePosition,
offset,
linearGauge.linearGaugeBoxDecoration!.thickness!,
RenderLinearGaugeContainer.gaugeEnd +
RenderLinearGaugeContainer.gaugeStart,
RenderLinearGaugeContainer.gaugeStart,
gaugeEnd + gaugeStart,
gaugeStart,
xAxisForGaugeContainer,
yAxisForGaugeContainer,
linearGauge,
Expand Down Expand Up @@ -382,12 +379,14 @@ class RenderCurve extends RenderBox {
double valueToPixel(double value) {
final double pixel = ((value - getLinearGaugeStart()) /
(getLinearGaugeEnd() - getLinearGaugeStart())) *
RenderLinearGaugeContainer.gaugeEnd;
gaugeEnd;
return pixel;
}

@override
void performLayout() {
LinearGaugeParentData parentDataRef = parentData as LinearGaugeParentData;

double greatestHeight = 0;
double currentGreatestHeight = startHeight!;
if (midHeight! > currentGreatestHeight) {
Expand All @@ -401,6 +400,9 @@ class RenderCurve extends RenderBox {
greatestHeight = currentGreatestHeight;
}

gaugeStart = parentDataRef.gaugeStart;
gaugeEnd = parentDataRef.gaugeEnd;

double startInPixel = valueToPixel(start!);
double endInPixel = valueToPixel(end!);
double totalWidth = endInPixel - startInPixel;
Expand All @@ -419,34 +421,26 @@ class RenderCurve extends RenderBox {
@override
void paint(PaintingContext context, Offset offset) {
Canvas canvas = context.canvas;
xAxisForGaugeContainer = RenderLinearGauge.xAxisForGaugeContainer;
yAxisForGaugeContainer = RenderLinearGauge.yAxisForGaugeContainer;
LinearGaugeParentData parentDataRef = parentData as LinearGaugeParentData;

xAxisForGaugeContainer = parentDataRef.xAxisForGaugeContainer;
yAxisForGaugeContainer = parentDataRef.yAxisForGaugeContainer;

var firstOff =
LinearGaugeLabel.primaryRulers[getLinearGaugeStart().toString()]![0];
var firstOff = parentDataRef
.linearGaugeLabel.primaryRulers[getLinearGaugeStart().toString()]![0];

// Drawing CustomCurves

if (linearGauge.rulers!.inverseRulers!) {
if (linearGauge.gaugeOrientation == GaugeOrientation.horizontal) {
firstOff = Offset(
RenderLinearGaugeContainer.gaugeEnd -
firstOff.dx +
RenderLinearGaugeContainer.gaugeStart * 2,
firstOff.dy);
firstOff = Offset(gaugeEnd - firstOff.dx + gaugeStart * 2, firstOff.dy);
} else {
firstOff = Offset(
firstOff.dx,
RenderLinearGaugeContainer.gaugeEnd -
firstOff.dy +
RenderLinearGaugeContainer.gaugeStart * 2);
firstOff = Offset(firstOff.dx, gaugeEnd - firstOff.dy + gaugeStart * 2);
}
}
double value = valueToPixel(midPoint);
if (linearGauge.rulers!.inverseRulers!) {
value = RenderLinearGaugeContainer.gaugeEnd -
value +
RenderLinearGaugeContainer.gaugeStart * 2;
value = gaugeEnd - value + gaugeStart * 2;
}
drawCurve(canvas, linearGauge, value, firstOff);
}
Expand Down
55 changes: 15 additions & 40 deletions lib/src/linear_gauge/gauge_container/linear_gauge_container.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart';
import 'package:geekyants_flutter_gauges/src/linear_gauge/linear_gauge_painter.dart';
import 'dart:math' as math;
import '../linear_gauge_label.dart';

Expand Down Expand Up @@ -167,11 +166,10 @@ class RenderLinearGaugeContainer extends RenderBox {
final Paint _linearGaugeContainerPaint = Paint();
final Paint _linearGaugeRangePaint = Paint();
final LinearGaugeLabel _linearGaugeLabel = LinearGaugeLabel();
late Size _startLabelSize, _endLabelSize, _axisActualSize;
late Size _axisActualSize;
List<Pointer> filteredShapePointers = [];

static late double gaugeStart, gaugeEnd;
static late Size startLabelSize, endLabelSize;
late double gaugeStart, gaugeEnd;
late bool _isHorizontalOrientation;
late double yAxisForGaugeContainer = 0, xAxisForGaugeContainer = 0;

Expand Down Expand Up @@ -219,6 +217,8 @@ class RenderLinearGaugeContainer extends RenderBox {
markNeedsPaint();
}

LinearGaugeLabel get linearGaugeLabel => _linearGaugeLabel;

///
/// Getter and Setter for the [_gaugeAnimation] parameter.
///
Expand Down Expand Up @@ -560,31 +560,6 @@ class RenderLinearGaugeContainer extends RenderBox {
super.detach();
}

calculateStartAndEndLabelSize() {
_startLabelSize = _linearGaugeLabel.getLabelSize(
textStyle: getTextStyle,
value: !getInversedRulers
? getCustomLabels!.isEmpty
? getStart.toInt().toString()
: getCustomLabels!.first.text
: getCustomLabels!.isEmpty
? getEnd.toInt().toString()
: getCustomLabels!.last.text);

_endLabelSize = _linearGaugeLabel.getLabelSize(
textStyle: getTextStyle,
value: !getInversedRulers
? getCustomLabels!.isEmpty
? getEnd.toInt().toString()
: getCustomLabels!.last.text
: getCustomLabels!.isEmpty
? getStart.toInt().toString()
: getCustomLabels!.first.text);

startLabelSize = _startLabelSize;
endLabelSize = _endLabelSize;
}

calculateStartAndEndOffsetOfGauge() {
Offset offset = Offset(
0,
Expand All @@ -602,20 +577,20 @@ class RenderLinearGaugeContainer extends RenderBox {
if (showLabel) {
end = GaugeOrientation.horizontal == getGaugeOrientation
? size.width -
((_endLabelSize.width / 2) +
(_startLabelSize.width / 2) +
((linearGaugeLabel.endLabelSize.width / 2) +
(linearGaugeLabel.startLabelSize.width / 2) +
(largestPointerWidth))
: (size.height -
((_endLabelSize.height / 2) +
(_startLabelSize.height / 2) +
((linearGaugeLabel.endLabelSize.height / 2) +
(linearGaugeLabel.startLabelSize.height / 2) +
(largestPointerWidth)));

start = GaugeOrientation.horizontal == getGaugeOrientation
? (offset.dx +
(_startLabelSize.width / 2) +
(linearGaugeLabel.startLabelSize.width / 2) +
(largestPointerWidth / 2))
: (offset.dx +
(_startLabelSize.height / 2) +
(linearGaugeLabel.startLabelSize.height / 2) +
(largestPointerWidth / 2));
} else {
end = GaugeOrientation.horizontal == getGaugeOrientation
Expand Down Expand Up @@ -702,6 +677,8 @@ class RenderLinearGaugeContainer extends RenderBox {
}

void _calculateRulerPoints() {
_linearGaugeLabel.calculateStartAndEndLabelSize(
getTextStyle, getStart, getEnd, getCustomLabels!, getInversedRulers);
if (getCustomLabels!.isEmpty) {
double screenSize = getGaugeOrientation == GaugeOrientation.horizontal
? 3 * size.width
Expand Down Expand Up @@ -734,8 +711,8 @@ class RenderLinearGaugeContainer extends RenderBox {
}

_linearGaugeLabel.generateOffSetsForLabel(
_startLabelSize,
_endLabelSize,
linearGaugeLabel.startLabelSize,
linearGaugeLabel.endLabelSize,
size,
getEnd,
getPrimaryRulersHeight,
Expand Down Expand Up @@ -973,8 +950,6 @@ class RenderLinearGaugeContainer extends RenderBox {
@override
void performLayout() {
filterShapePointers(getPointers);
calculateStartAndEndLabelSize();

double parentWidgetSize;

final double actualParentWidth = constraints.maxWidth;
Expand All @@ -994,8 +969,8 @@ class RenderLinearGaugeContainer extends RenderBox {

size = _axisActualSize;

calculateStartAndEndOffsetOfGauge();
_calculateRulerPoints();
calculateStartAndEndOffsetOfGauge();
}

@override
Expand Down
32 changes: 29 additions & 3 deletions lib/src/linear_gauge/linear_gauge_label.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ 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 'dart:math' as math;

class LinearGaugeLabel {
String? text;
Expand All @@ -11,9 +10,10 @@ class LinearGaugeLabel {

// Will be adding other members as required

static final List<LinearGaugeLabel> _linearGaugeLabel = [];
final List<LinearGaugeLabel> _linearGaugeLabel = [];
late Size _startLabelSize, _endLabelSize;

static final Map<String, List<Offset>> primaryRulers = {};
final Map<String, List<Offset>> primaryRulers = {};
final TextPainter _textPainter =
TextPainter(textDirection: TextDirection.ltr);

Expand Down Expand Up @@ -338,7 +338,33 @@ class LinearGaugeLabel {
return Size(_textPainter.width, _textPainter.height);
}

calculateStartAndEndLabelSize(TextStyle textStyle, double start, double end,
List<CustomRulerLabel> customLabels, bool inversedRulers) {
_startLabelSize = getLabelSize(
textStyle: textStyle,
value: !inversedRulers
? customLabels.isEmpty
? start.toInt().toString()
: customLabels.first.text
: customLabels.isEmpty
? end.toInt().toString()
: customLabels.last.text);

_endLabelSize = getLabelSize(
textStyle: textStyle,
value: !inversedRulers
? customLabels.isEmpty
? end.toInt().toString()
: customLabels.last.text
: customLabels.isEmpty
? start.toInt().toString()
: customLabels.first.text);
}

List<LinearGaugeLabel> get getListOfLabel => _linearGaugeLabel;

Size get startLabelSize => _startLabelSize;
Size get endLabelSize => _endLabelSize;

Map<String, List<Offset>> get getPrimaryRulersOffset => primaryRulers;
}
Loading

0 comments on commit a1fcbea

Please sign in to comment.