我正在尝试使用Y轴(垂直轴)具有自定义标签的TimeSeriesChart。
我可以验证字符串('final List<dynamic> string = data.data['options'];
')是否包含我期望的值。而且我什至可以像字符串[0]一样引用它们,但是当我做strings[value.toInt()]
时,它会抛出RangeError
。
请参见这段代码。
在初始化“最终标签”的地方,有两行代码定义了BasicNumericTickFormatterSpec
。
第一行是我要执行的操作。我想使用value
在strings[]
中查找字符串。
我可以做((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
答案 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';
});