Skip to content

Commit

Permalink
Merge pull request #6 from MattyBoy4444/master
Browse files Browse the repository at this point in the history
Fixed: BaseChart was not being destroyed
  • Loading branch information
juliansteenbakker authored Oct 8, 2023
2 parents c1d487b + 995ff99 commit 91dc7b1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 41 deletions.
63 changes: 23 additions & 40 deletions community_charts_flutter/lib/src/chart_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,13 @@ class ChartContainer<D> extends CustomPaint {
}

@override
void updateRenderObject(
BuildContext context, ChartContainerRenderObject renderObject) {
void updateRenderObject(BuildContext context, ChartContainerRenderObject renderObject) {
renderObject.reconfigure(this, context);
}
}

/// [RenderCustomPaint] that implements common [ChartContext].
class ChartContainerRenderObject<D> extends RenderCustomPaint
implements common.ChartContext {
class ChartContainerRenderObject<D> extends RenderCustomPaint implements common.ChartContext {
common.BaseChart<D>? _chart;
List<common.Series<dynamic, D>>? _seriesList;
late BaseChartState<D> _chartState;
Expand All @@ -83,9 +81,8 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
void reconfigure(ChartContainer<D> config, BuildContext context) {
_chartState = config.chartState;

_dateTimeFactory = (config.chartWidget is TimeSeriesChart)
? (config.chartWidget as TimeSeriesChart).dateTimeFactory
: null;
_dateTimeFactory =
(config.chartWidget is TimeSeriesChart) ? (config.chartWidget as TimeSeriesChart).dateTimeFactory : null;
_dateTimeFactory ??= new common.LocalDateTimeFactory();

if (_chart == null) {
Expand All @@ -95,8 +92,7 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
common.Performance.timeEnd('chartsCreate');
}
common.Performance.time('chartsConfig');
config.chartWidget
.updateCommonChart(_chart!, config.oldChartWidget, _chartState);
config.chartWidget.updateCommonChart(_chart!, config.oldChartWidget, _chartState);

_rtlSpec = config.rtlSpec;
_chartContainerIsRtl = config.rtl;
Expand All @@ -113,8 +109,7 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
// does not reprocess the series.
//
// Series list is considered "changed" based on the instance.
if (_seriesList != config.chartWidget.seriesList ||
_chartState.chartIsDirty) {
if (_seriesList != config.chartWidget.seriesList || _chartState.chartIsDirty) {
_chartState.resetChartDirtyFlag();
_seriesList = config.chartWidget.seriesList;

Expand Down Expand Up @@ -153,21 +148,18 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
for (common.SelectionModelType type in newState.selectionModels.keys) {
final model = _chart!.getSelectionModel(type);

final userModel =
newState.selectionModels[type]!.getModel(_chart!.currentSeriesList);
final userModel = newState.selectionModels[type]!.getModel(_chart!.currentSeriesList);

if (model != userModel) {
model.updateSelection(
userModel.selectedDatum, userModel.selectedSeries);
model.updateSelection(userModel.selectedDatum, userModel.selectedSeries);
}
}
}

@override
void performLayout() {
common.Performance.time('chartsLayout');
_chart!
.measure(constraints.maxWidth.toInt(), constraints.maxHeight.toInt());
_chart!.measure(constraints.maxWidth.toInt(), constraints.maxHeight.toInt());
_chart!.layout(constraints.maxWidth.toInt(), constraints.maxHeight.toInt());
common.Performance.timeEnd('chartsLayout');
size = constraints.biggest;
Expand Down Expand Up @@ -253,9 +245,7 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint

@override
bool get isRtl =>
_chartContainerIsRtl &&
(_rtlSpec == null ||
_rtlSpec?.axisDirection == common.AxisDirection.reversed);
_chartContainerIsRtl && (_rtlSpec == null || _rtlSpec?.axisDirection == common.AxisDirection.reversed);

@override
bool get isTappable => _chart!.isTappable;
Expand All @@ -266,12 +256,10 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
/// Gets the chart's gesture listener.
common.ProxyGestureListener get gestureProxy => _chart!.gestureProxy;

TextDirection get textDirection =>
_chartContainerIsRtl ? TextDirection.rtl : TextDirection.ltr;
TextDirection get textDirection => _chartContainerIsRtl ? TextDirection.rtl : TextDirection.ltr;

@override
void enableA11yExploreMode(List<common.A11yNode> nodes,
{String? announcement}) {
void enableA11yExploreMode(List<common.A11yNode> nodes, {String? announcement}) {
_a11yNodes = nodes;
_exploreMode = true;
_setNewPainter();
Expand Down Expand Up @@ -300,6 +288,12 @@ class ChartContainerRenderObject<D> extends RenderCustomPaint
a11yNodes: _a11yNodes ?? [],
textDirection: textDirection);
}

@override
void dispose() {
_chart?.destroy();
super.dispose();
}
}

class ChartContainerCustomPaint extends CustomPainter {
Expand All @@ -321,18 +315,12 @@ class ChartContainerCustomPaint extends CustomPainter {
return oldPainter;
} else {
return new ChartContainerCustomPaint._internal(
chart: chart,
exploreMode: exploreMode,
a11yNodes: a11yNodes,
textDirection: textDirection);
chart: chart, exploreMode: exploreMode, a11yNodes: a11yNodes, textDirection: textDirection);
}
}

ChartContainerCustomPaint._internal(
{required this.chart,
required this.exploreMode,
required this.a11yNodes,
required this.textDirection});
{required this.chart, required this.exploreMode, required this.a11yNodes, required this.textDirection});

@override
void paint(Canvas canvas, Size size) {
Expand Down Expand Up @@ -361,17 +349,12 @@ class ChartContainerCustomPaint extends CustomPainter {
final nodes = <CustomPainterSemantics>[];

for (common.A11yNode node in a11yNodes) {
final rect = new Rect.fromLTWH(
node.boundingBox.left.toDouble(),
node.boundingBox.top.toDouble(),
node.boundingBox.width.toDouble(),
node.boundingBox.height.toDouble());
final rect = new Rect.fromLTWH(node.boundingBox.left.toDouble(), node.boundingBox.top.toDouble(),
node.boundingBox.width.toDouble(), node.boundingBox.height.toDouble());
nodes.add(new CustomPainterSemantics(
rect: rect,
properties: new SemanticsProperties(
value: node.label,
textDirection: textDirection,
onDidGainAccessibilityFocus: node.onFocus)));
value: node.label, textDirection: textDirection, onDidGainAccessibilityFocus: node.onFocus)));
}

return nodes;
Expand Down
2 changes: 1 addition & 1 deletion community_charts_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Material Design charting library for flutter. Forked from google/ch
repository: https://github.com/juliansteenbakker/community_charts

environment:
sdk: '>=2.12.0 <3.0.0'
sdk: '>=2.14.0 <4.0.0'
flutter: '>=2.5.0'

dependencies:
Expand Down

0 comments on commit 91dc7b1

Please sign in to comment.