Мне удалось получить сигналы выбора, чтобы сработать на каждом из сегментов моей калибровочной / круговой диаграммы, но не могу понять, почему последний сегмент возвращает только selectedDatum, если сегмент отмечен красным цветом регион (см. скриншот) сегмента. Прикосновение к последнему сегменту за пределами отмеченной области вызывает обратный вызов, но список возвращаемых данных пуст.
Я прочитал (в ограниченном количестве) документы для пакета Google Charts и, похоже, не могу понять, что я делаю неправильно, поэтому, если кто-то сможет точно определить мою ошибку, большой.
class GaugeChart extends StatefulWidget {
final List<charts.Series> seriesList;
final bool animate;
final int pos;
final List<GaugeSegment> segmentList;
final Function onSegmentTap;
GaugeChart(this.seriesList, {this.animate, this.pos, this.segmentList, this.onSegmentTap});
factory GaugeChart.withSegmentData(List<GaugeSegment> list, Function onTap) {
return new GaugeChart(
_createSegmentData(list),
animate: true,
onSegmentTap: onTap,
);
}
@override
_GaugeChartState createState() => _GaugeChartState();
static List<charts.Series<GaugeSegment, String>> _createSegmentData(List<GaugeSegment> list) {
return [
new charts.Series<GaugeSegment, String>(
id: 'Segments',
domainFn: (GaugeSegment segment, _) => segment.segment,
measureFn: (GaugeSegment segment, _) => segment.size,
data: list,
colorFn: (GaugeSegment segment, _) => charts.Color.fromHex(code: segment.color),
)
];
}
}
class _GaugeChartState extends State<GaugeChart> {
@override
Widget build(BuildContext context) {
return new charts.PieChart(widget.seriesList,
animate: widget.animate,
defaultInteractions: false,
behaviors: [
new charts.SelectNearest(
expandToDomain: true,
selectClosestSeries: false,
eventTrigger: charts.SelectionTrigger.tap,
),
],
selectionModels: [
new charts.SelectionModelConfig(
type: charts.SelectionModelType.info,
changedListener: _onSelectionChanged,
)
],
defaultRenderer: new charts.ArcRendererConfig(
arcWidth: 120, startAngle: 4 / 5 * pi, arcLength: 7 / 5 * pi,
strokeWidthPx: 0,
arcRendererDecorators: [
new charts.ArcLabelDecorator(
insideLabelStyleSpec: charts.TextStyleSpec(
color: charts.Color.fromHex(code: '#FFFFFF'),
fontSize: 14,
)
)
],
)
);
}
_onSelectionChanged(charts.SelectionModel model) {
final selectedDatum = model.selectedDatum;
if (selectedDatum.isNotEmpty) {
setState(() {
widget.onSegmentTap(selectedDatum.first.datum.segment, selectedDatum.first.datum.setID);
});
}
}
}
class GaugeSegment {
final String segment;
final int size;
final String color;
final int setID;
GaugeSegment(this.segment, this.size, this.color, this.setID);
}
Моя оценка еще недостаточно высока для вставки изображений, посмотрите здесь