Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CustomAnnotation threated as TagAnnotation #33

Closed
Teocrito opened this issue Dec 17, 2021 · 2 comments
Closed

CustomAnnotation threated as TagAnnotation #33

Teocrito opened this issue Dec 17, 2021 · 2 comments

Comments

@Teocrito
Copy link
Contributor

Teocrito commented Dec 17, 2021

I´m trying to make a bar char with 2 series, i have all setup and working but i wanted to add one annotation to show the color of each serie at the bottomCenter of the chart, so i use a CustomAnnotation but when i save my changes i got the following error:

E/flutter ( 8790): [ERROR:flutter/shell/common/shell.cc(94)] Dart Unhandled Exception: type 'Null' is not a subtype of type 'Label' in type cast, stack trace: #0 TagAnnotOp.evaluate (package:graphic/src/guide/annotation/tag.dart:40:35)
E/flutter ( 8790): #1 Operator.run (package:graphic/src/dataflow/operator.dart:87:29)
E/flutter ( 8790): #2 Dataflow.evaluate (package:graphic/src/dataflow/dataflow.dart:95:27)
E/flutter ( 8790): #3 View.evaluate (package:graphic/src/chart/view.dart:69:17)
E/flutter ( 8790): #4 Dataflow.run (package:graphic/src/dataflow/dataflow.dart:123:16)
E/flutter ( 8790): #5 new View (package:graphic/src/chart/view.dart:25:5)
E/flutter ( 8790): #6 _ChartLayoutDelegate.getPositionForChild (package:graphic/src/chart/chart.dart:680:20)
E/flutter ( 8790): #7 RenderCustomSingleChildLayoutBox.performLayout (package:flutter/src/rendering/shifted_box.dart:1361:41)
E/flutter ( 8790): #8 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #9 RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:277:14)
E/flutter ( 8790): #10 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #11 _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:319:14)
E/flutter ( 8790): #12 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #13 ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:56:11)
E/flutter ( 8790): #14 RenderFlex._computeSizes (package:flutter/src/rendering/flex.dart:896:45)
E/flutter ( 8790): #15 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:931:32)
E/flutter ( 8790): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #17 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:233:12)
E/flutter ( 8790): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #19 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
E/flutter ( 8790): #20 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1005:7)
E/flutter ( 8790): #21 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
E/flutter ( 8790): #22 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:403:14)
E/flutter ( 8790): #23 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #24 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #25 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #26 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #27 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
E/flutter ( 8790): #28 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #29 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #30 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #31 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #32 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #33 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #34 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
Reloaded 2 of 1223 libraries in 1,410ms.
E/flutter ( 8790): #35 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #36 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #37 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #38 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #39 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #40 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #41 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #42 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)
E/flutter ( 8790): #43 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
E/flutter ( 8790): #44 RenderObject.layout (package:flutter/src/rendering/object.dart:1852:7)

This is my CustomAnnotation declaration:

CustomAnnotation(
    renderer: (position) => chart_utils.buildSeriesAnnotation(position, labels),
    anchor: (size) => Offset(((size.width - 60) / 2) + 60, size.height)
)

And my renderer:

List<Figure> buildSeriesAnnotation(Offset position, Map<String, Color> series) {
  List<Figure> resut = [];
  final colors = series.values.toList(growable: false);
  final labels = series.entries.map((e) => _buildText(e.key, e.value, true)).toList(growable: false);
  for (var l in labels) {
    l.layout();
  }
  final width = (quiver.max( labels.map((e) => e.width) ) ?? 0) + (15 * labels.length);
  final height = math.max( 20, quiver.max( labels.map((e) => e.height) ) ?? 0 );
  var leftTop = Offset(position.dx - (width / 2), position.dy - height);
  
  for (int i = 0; i < labels.length; i++) {
    var labelPainter = labels[i];
    var colorRect = Rect.fromLTWH(leftTop.dx, leftTop.dy, 20, 20);
    var labelPaintPoint = leftTop + Offset(25, labelPainter.height / 2);
    var colorPath = Path()..addRRect( RRect.fromRectAndRadius(colorRect, Radius.zero) );
    resut.addAll([
      PathFigure(colorPath, Paint()..color = colors[i]),
      TextFigure(labelPainter, labelPaintPoint)
    ]);
    leftTop += Offset(labelPainter.width + 35, 0);
  }
  return resut;
}
@Teocrito
Copy link
Contributor Author

I think i found the error in src/parse/parse.dart: line 604, you're assigning TagAnnotationOp instead of CustomAnnotOp

} else {
  annotSpec as CustomAnnotation;
  annot = view.add(TagAnnotOp({
    'anchor': anchor,
    'renderer': annotSpec.renderer,
  }));
}

Teocrito added a commit to Teocrito/graphic that referenced this issue Dec 17, 2021
entronad added a commit that referenced this issue Dec 18, 2021
@entronad
Copy link
Owner

The issue is fixed in the latest v0.6.2. Please have a try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants