使用Flutter图表添加自定义primaryMeasureAxis

时间:2019-05-28 08:28:37

标签: flutter

我正在尝试使用Y轴(垂直轴)具有自定义标签的TimeSeriesChart。

我可以验证字符串('final List<dynamic> string = data.data['options'];')是否包含我期望的值。而且我什至可以像字符串[0]一样引用它们,但是当我做strings[value.toInt()]时,它会抛出RangeError

请参见这段代码。 在初始化“最终标签”的地方,有两行代码定义了BasicNumericTickFormatterSpec

第一行是我要执行的操作。我想使用valuestrings[]中查找字符串。

我可以做((num value) => 'MyValue: ${string[0]}'),效果很好。 我可以做((num value) => 'MyValue: ${string}')只是为了输出每个“步骤”上的所有值。

因此,基本上,我可以验证string是否确实保存了我期望的值,并且可以访问这些值,但是如果我尝试查找一个值((num value) => 'MyValue: ${string[value.toInt()]}'),则它会因RangeError而中断。

Widget _buildChart(BuildContext context, DocumentSnapshot data) {
    final List<dynamic> string = data.data['options'];

    final labels =
    charts.BasicNumericTickFormatterSpec((num value) =>  'MyValue: ${string[value.toInt()]}');
    // charts.BasicNumericTickFormatterSpec((num value) =>  'MyValue: ${string[0]}')

    var chart = charts.TimeSeriesChart(seriesList,
        // Sets up a currency formatter for the measure axis.
        primaryMeasureAxis: new charts.NumericAxisSpec(tickFormatterSpec: labels),
        animate: animate,
        // Optionally pass in a [DateTimeFactory] used by the chart. The factory
        // should create the same type of [DateTime] as the data provided. If none
        // specified, the default creates local date time.
        dateTimeFactory: const charts.LocalDateTimeFactory());

    return new Padding(
        padding: new EdgeInsets.all(10.0),
        child: new SizedBox(
          height: 200.0,
          child: chart,
        ));
  }

我希望我放入((num value) => '$strings[value.toInt()])的每个“值”都会从字符串[]中返回一个字符串。

相反,我得到了:

  

flutter:在performLayout()期间引发了以下RangeError:   颤振:RangeError(索引):无效值:不在0..1范围内,   包含在内:2

1 个答案:

答案 0 :(得分:0)

尝试扩大您的tick格式器封闭范围,以便获得更多诊断信息:

final labels = charts.BasicNumericTickFormatterSpec((num value) {
  var index = value.floor();
  print('--- tick for $value in $string with $index ---');
  return (index < string.length)
      ? 'MyValue: ${string[index]}'
      : 'overflow ${string.length} $index';
});