scaleK method

dynamic scaleK(
  1. num value,
  2. 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');
  // }
}