scaleK method
dynamic
scaleK(
- num value,
- dynamic index
)
Implementation
scaleK(num value, index) {
// print('缩放参数 缩放值 :$value 缩放索引:$index');
if (value>=kWMin && value<=kWMax && value != kW) {
//计算缩放基准索引影线距离左边的距离
num leftPx = kStartX + kGap+(index - kStartI)*kWG+kW/2;
// print('缩放前左边间距: $leftPx k线宽度 $kW k线总宽度:$kWG');
//k线宽度新值
kW = value.toDouble();
//k线总宽度加减,带间距的
kWG = kW + kGap;
//更新一屏能展示的k线数量
kNum = (kElement['k']!['w'] / kWG).ceil(); //需要展示的k线数量
// print('缩放后屏幕数量 $kNum');
preLoadkNum = kNum*2;
//根据最新宽度计算左边k线区宽度,减去最新宽度的一半
leftPx-=kW/2;
//计算左边k线数量
int leftkNum = (leftPx / kWG).ceil();
// print('缩放后左边间距: $leftPx. k线宽度 $kW k线总宽度:$kWG 左边数量 : $leftkNum。 缩放索引; $index');
//计算开始索引
kStartI = index - leftkNum;
kStartX = -(kWG * leftkNum - leftPx) - kGap;
// print('计算后开始索引: $kStartI. 开始坐标: $kStartX');
if(kStartI<0){
kStartX-=kStartI*kWG;
kStartI = 0;
// print('计算后调整后索引: $kStartI. 开始坐标: $kStartX');
}
num bx = kStartX + (chartData.kDataL - kStartI) * kWG;
if(kStartX>kElement['k']!['w']-kWG){
// print('超出留白');
kStartX = kElement['k']!['w']-kWG;
}else if (bx < kWG) {
int kknum = (kWG / kWG).ceil();
kStartX = kWG - kknum * kWG;
kStartI = chartData.kDataL - kknum;
if(kStartI<0){
kStartI = 0;
kStartX = 0;
}
// print('到了留白边界 :$bx $kWG. 左侧数量: $kknum. 索引: $kStartI. 开始坐标: $kStartX');
}
if(kStartX>0){
kNum = ((kElement['k']!['w']-kStartX) / kWG).ceil(); //需要展示的k线数量
}else{
if(kNum*kWG+kStartX<kElement['k']!['w']){
kNum+=1;
}
}
kStopI =
kStartI + kNum >= chartData.kDataL ? chartData.kDataL : kStartI + kNum;
kStartObj = chartData.klineData[kStartI];
kStopObj = chartData.klineData[kStopI - 1];
callMM();
// print('最终开始索引: $kStartI');
if (klineState.isMayPreLoad &&
kStartI < preLoadkNum * 0.25 &&
klineState.preLoadK &&
isHaveHisK) {
// print(
// '开始索引: $kStartI preLoadkNum * 0.25 ${preLoadkNum * 0.25} 结束索引:$kStopI 开始坐标 $kStartX isMayPreLoad:${klineState.isMayPreLoad} preLoadK: ${klineState.preLoadK} isHaveHisK:${isHaveHisK}');
// print('加载更多历史数据');
preLoadNum += 1;
klineState.preLoadK = false;
klineState.notify({
'take': TakeType['moreKlineData'],
'codeId': klineState.widget.propertys['codeId'],
'interval': klineState.widget.propertys['interval'],
'code': klineState.widget.propertys['code'],
'quote': klineState.widget.propertys['quote'],
'amount': preLoadkNum,
'time': chartData.klineData[0]['time'],
'isFirst':false,
'dicType': "add", //"cover" 加载类型 add新增, cover覆盖
'dic': -1 //方向 -1左边历史数据,0历史数据,1未来数据
});
}
// 移动k线加载更多未来数据
if (klineState.isMayPreLoad &&
chartData.kDataL - kStopI < preLoadkNum * 0.25 &&
klineState.futureLoadK &&
isHaveFutureK) {
// print(
// '开始索引: $kStartI preLoadkNum * 0.25 ${preLoadkNum * 0.25} 结束索引:$kStopI 开始坐标 $kStartX isMayPreLoad:${klineState.isMayPreLoad} preLoadK: ${klineState.preLoadK} isHaveHisK:${isHaveHisK}');
// print('加载更多未来数据');
preLoadNum += 1;
klineState.futureLoadK = false;
klineState.notify({
'take': TakeType['moreKlineData'],
'codeId': klineState.widget.propertys['codeId'],
'interval': klineState.widget.propertys['interval'],
'code': klineState.widget.propertys['code'],
'quote': klineState.widget.propertys['quote'],
'amount': preLoadkNum,
'time': chartData.klineData[chartData.kDataL - 2]
['time'], //这里从倒数第二个开始,如果有重叠receive里也会清洗数据
'isFirst':false,
'dicType': "add", //"cover" 加载类型 add新增, cover覆盖
'dic': 1 //方向 -1左边历史数据,0历史数据,1未来数据
});
}
}
// else{
// print('无法在缩放 k线宽度 :$kW');
// }
}