Используя gauge.dart
файл из приведенного здесь примера , я только что добавил обратный вызов changedListener
, чтобы узнать, на какой сегмент нажал пользователь.
Работает, как и ожидалось, только для 3 из 4 сегментов, но нажатие на последний сегмент вызывает исключение, если его коснуться в конце его области (в зависимости от того, какое случайное значение было дано в примере, еслиэто относительно небольшой сегмент, тогда весь сегмент выдает ту же ошибку).
static List<charts.Series<GaugeSegment, String>> _createRandomData() {
final random = new Random();
final data = [
new GaugeSegment('Low', random.nextInt(100)),
new GaugeSegment('Acceptable', random.nextInt(100)),
new GaugeSegment('High', random.nextInt(100)),
new GaugeSegment('Highly Unusual', random.nextInt(100)),
];
return [
new charts.Series<GaugeSegment, String>(
id: 'Segments',
domainFn: (GaugeSegment segment, _) => segment.segment,
measureFn: (GaugeSegment segment, _) => segment.size,
data: data,
)
];
}
@override
Widget build(BuildContext context) {
return new charts.PieChart(seriesList,
animate: animate,
// added selectionModels to pass in _onSelectionChanged callback
selectionModels: [
new charts.SelectionModelConfig(
type: charts.SelectionModelType.info,
changedListener: _onSelectionChanged,
)
],
defaultRenderer: new charts.ArcRendererConfig(
arcWidth: 30, startAngle: 4 / 5 * pi, arcLength: 7 / 5 * pi));
}
_onSelectionChanged(charts.SelectionModel model) {
final selectedDatum = model.selectedDatum;
print("DATUM: ${selectedDatum.first.datum}");
if (selectedDatum.isNotEmpty) {
print('IS_NOT_EMPTY');
}
}
даст это исключение
The following StateError was thrown while handling a gesture:
Bad state: No element
When the exception was thrown, this was the stack
#0 List.first (dart:core-patch/array.dart:202:5)
#1 GaugeChart._onSelectionChanged
package:example/pie_chart/gauge.dart:89
#2 MutableSelectionModel.updateSelection.<anonymous closure>
package:charts_common/…/selection_model/selection_model.dart:178
#3 List.forEach (dart:core-patch/growable_array.dart:283:8)
#4 MutableSelectionModel.updateSelection
package:charts_common/…/selection_model/selection_model.dart:178
...
Handler: "onTapUp"
Recognizer: TapGestureRecognizer#1d1a0
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(286.5, 261.0)
finalLocalPosition: Offset(278.5, 153.0)
sent tap down