Калибровочная диаграмма onSelectionChanged не вернула данные в последней половине финального сегмента - PullRequest
0 голосов
/ 29 июня 2019

Мне удалось получить сигналы выбора, чтобы сработать на каждом из сегментов моей калибровочной / круговой диаграммы, но не могу понять, почему последний сегмент возвращает только 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);
} 

Моя оценка еще недостаточно высока для вставки изображений, посмотрите здесь

...