toScale method
Implementation
BaseScale toScale(num rangeStart, num rangeEnd, [List<DynamicData>? dataSet]) {
List<num> rangeValue = [rangeStart, rangeEnd];
if (category) {
return CategoryScale(categoryList, rangeValue, inverse);
}
List<DynamicData> ds = [];
if (dataSet != null) {
ds.addAll(dataSet);
}
ds.add(DynamicData(min));
if (max != null) {
ds.add(DynamicData(max));
}
if (timeRange != null) {
ds.add(DynamicData(timeRange!.start));
ds.add(DynamicData(timeRange!.end));
}
List<num> list = [];
List<DateTime> timeList = [];
if (dataSet != null) {
for (var data in dataSet) {
if (data.isString) {
continue;
}
if (data.isNum) {
list.add(data.data);
} else if (data.isDate) {
timeList.add(data.data);
}
}
}
if (type == AxisType.time) {
if (timeList.isEmpty) {
throw FlutterError('现有数据无法推导出坐标范围');
}
timeList.sort((a, b) {
return a.millisecondsSinceEpoch.compareTo(b.millisecondsSinceEpoch);
});
DateTime start = timeList[0];
DateTime end = timeList[timeList.length - 1];
return TimeScale(timeSplitType, [start, end], rangeValue, inverse);
}
if (type == AxisType.value || type == AxisType.log) {
List<num> v = extremes<num>(list, (p) => p);
NiceScale step = NiceScale.nice(
v[0],
v[1],
splitNumber,
minInterval: minInterval,
maxInterval: maxInterval,
interval: interval,
start0: start0,
type: niceType,
);
return LinearScale([step.start, step.end], rangeValue, inverse, step.tickCount);
}
throw FlutterError('现有数据无法推导出Scale');
}