Index: packages/charted/lib/charts/layout_renderers/pie_chart_renderer.dart |
diff --git a/packages/charted/lib/charts/layout_renderers/pie_chart_renderer.dart b/packages/charted/lib/charts/layout_renderers/pie_chart_renderer.dart |
index 44094693eae6b172d8904dccee1c390bae53287a..e32470d84097be779d2b2ba7fd67b918a1755848 100644 |
--- a/packages/charted/lib/charts/layout_renderers/pie_chart_renderer.dart |
+++ b/packages/charted/lib/charts/layout_renderers/pie_chart_renderer.dart |
@@ -98,43 +98,56 @@ class PieChartRenderer extends LayoutRendererBase { |
indices = indices.reversed.toList(); |
} |
- var accessor = (d, i) { |
+ num accessor(d, int i) { |
var row = d == SMALL_INT_MAX ? otherRow : area.data.rows.elementAt(d); |
return row == null || row.elementAt(measure) == null |
? 0 |
- : row.elementAt(measure); |
- }; |
- var data = (new PieLayout()..accessor = accessor).layout(indices), |
- arc = new SvgArc( |
- innerRadiusCallback: (d, i, e) => innerRadiusRatio * radius, |
- outerRadiusCallback: (d, i, e) => radius), |
- pie = root.selectAll('.pie-path').data(data); |
- |
- pie.enter.append('path').classed('pie-path'); |
- pie |
- ..each((d, i, e) { |
- var styles = stylesForData(d.data, i); |
- e.classes.removeAll(ChartState.VALUE_CLASS_NAMES); |
- if (!isNullOrEmpty(styles)) { |
- e.classes.addAll(styles); |
- } |
- e.attributes |
- ..['fill'] = colorForData(d.data, i) |
- ..['d'] = arc.path(d, i, host) |
- ..['stroke-width'] = '1px' |
- ..['stroke'] = '#ffffff'; |
- |
- e.append( |
- Namespace.createChildElement('text', e)..classes.add('pie-label')); |
- }) |
+ : row.elementAt(measure) as num; |
+ } |
+ var data = (new PieLayout()..accessor = accessor).layout(indices); |
+ var arc = new SvgArc( |
+ innerRadiusCallback: (d, i, e) => innerRadiusRatio * radius, |
+ outerRadiusCallback: (d, i, e) => radius); |
+ var pie = root.selectAll('.pie-path').data(data); |
+ |
+ pie.enter.appendWithCallback((d, i, e) { |
+ var pieSector = Namespace.createChildElement('path', e) |
+ ..classes.add('pie-path'); |
+ var styles = stylesForData(d.data, i); |
+ if (!isNullOrEmpty(styles)) { |
+ pieSector.classes.addAll(styles); |
+ } |
+ pieSector.attributes |
+ ..['fill'] = colorForData(d.data, i) |
+ ..['d'] = arc.path(d, i, host) |
+ ..['stroke-width'] = '1px' |
+ ..['stroke'] = '#ffffff'; |
+ |
+ pieSector.append(Namespace.createChildElement('text', pieSector) |
+ ..classes.add('pie-label')); |
+ return pieSector; |
+ }) |
..on('click', (d, i, e) => _event(mouseClickController, d, i, e)) |
..on('mouseover', (d, i, e) => _event(mouseOverController, d, i, e)) |
..on('mouseout', (d, i, e) => _event(mouseOutController, d, i, e)); |
+ pie.each((d, i, e) { |
+ var styles = stylesForData(d.data, i); |
+ e.classes.removeAll(ChartState.VALUE_CLASS_NAMES); |
+ if (!isNullOrEmpty(styles)) { |
+ e.classes.addAll(styles); |
+ } |
+ e.attributes |
+ ..['fill'] = colorForData(d.data, i) |
+ ..['d'] = arc.path(d, i, host) |
+ ..['stroke-width'] = '1px' |
+ ..['stroke'] = '#ffffff'; |
+ }); |
+ |
pie.exit.remove(); |
_legend.clear(); |
- var items = new List.generate(data.length, (i) { |
+ var items = new List<ChartLegendItem>.generate(data.length, (i) { |
SvgArcData d = data.elementAt(i); |
Iterable row = |
d.data == SMALL_INT_MAX ? otherRow : area.data.rows.elementAt(d.data); |