You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Text组件无法显示计算类返回结果的求助

问题排查与修复

核心问题分析

  1. 计算逻辑完全未触发:calculateOptiTijd方法中,每次循环都会重新初始化j = []并仅添加单个元素,导致j.length始终为1。传入的uren值为2或7时,j.length > uren-1的条件永远不成立(1>1、1>6均为false),内部计算代码从未执行,返回的optiTijdStart和optiTijdEind始终是空字符串,Text组件自然无内容。
  2. 循环范围可能无效:如果HourlyResults的长度小于等于24,i < HourlyResults.length -24的条件不成立,循环直接跳过,直接返回空值。
  3. 索引越界风险:当i从0开始时,i-7为负数,访问HourlyResults[i-7]会触发数组越界异常(若循环执行的话)。

修复方案

1. 修正数据收集逻辑

改为收集连续uren个小时的结果到j列表中,而非每次仅添加一个元素。

2. 调整循环范围

将循环上限改为HourlyResults.length - uren,确保能取到连续的uren个元素,避免越界。

3. 初始化默认值

给返回的字符串设置默认值,方便排查未触发计算的情况。

4. 添加调试输出

在关键位置添加打印,确认逻辑是否正常执行。

修改后的代码

class OptiTijdCalculator {
  List<String> calculateOptiTijd(double uren) {
    // 设置默认值,避免空字符串导致Text无显示
    String optiTijdStart = "0";
    String optiTijdEind = "0";
    int hourCount = uren.toInt(); // 小时数转为整数处理

    // 调整循环范围,确保能取到连续hourCount个元素
    for (int i = 0; i <= HourlyResults.length - hourCount; i++) {
      List<double> j = [];
      // 收集连续hourCount个小时的结果
      for (int k = 0; k < hourCount; k++) {
        j.add(HourlyResults[i + k].result);
      }

      // 确保j列表有足够数据再执行计算
      if (j.length >= hourCount) {
        double sum1 = j.reduce((a, b) => a + b);
        // 滑动窗口,取下一组连续hourCount个元素
        List<double> j2 = [];
        for (int k = 1; k <= hourCount; k++) {
          if (i + k < HourlyResults.length) {
            j2.add(HourlyResults[i + k].result);
          }
        }

        if (j2.length >= hourCount) {
          double sum2 = j2.reduce((a, b) => a + b);
          // 增加索引判断,避免负数越界
          if (sum1 > sum2) {
            if (i >=7) {
              optiTijdStart = HourlyResults[i -7].dateTime.hour.toString();
              optiTijdEind = HourlyResults[i + hourCount -1].dateTime.hour.toString();
            }
          } else {
            if (i >=6) {
              optiTijdStart = HourlyResults[i -6].dateTime.hour.toString();
              optiTijdEind = HourlyResults[i + hourCount].dateTime.hour.toString();
            }
          }
          // 调试打印,确认计算是否触发
          print("计算结果:start=$optiTijdStart, end=$optiTijdEind");
        }
      }
    }
    return [optiTijdStart, optiTijdEind];
  }
}

// WhiteContainersRowOne组件保持原代码不变
class WhiteContainersRowOne extends StatelessWidget {
  const WhiteContainersRowOne({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final double screenWidth = MediaQuery.of(context).size.width;
    final double screenHeight = MediaQuery.of(context).size.height;

    OptiTijdCalculator calculator = OptiTijdCalculator();

    double urenContainer1 = 2; // Container 1的小时数设置
    double urenContainer2 = 7; // Container 2的小时数设置

    List<String> resultContainer1 =
        calculator.calculateOptiTijd(urenContainer1);
    List<String> resultContainer2 =
        calculator.calculateOptiTijd(urenContainer2);

    return SizedBox(
      width: screenWidth * 0.9,
      height: screenWidth * 0.4,
      child: Row(
        children: [
          Container(
            height: screenHeight * 0.30,
            width: screenWidth * 0.42,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(7.0),
              color: const Color.fromARGB(255, 255, 255, 255),
            ),
            child: Center(
              child: Column(
                children: [
                  SizedBox(height: screenWidth * 0.05),
                  Icon(
                    Icons.local_laundry_service,
                    size: (screenWidth * 0.17),
                  ),
                  SizedBox(height: screenWidth * 0.02),
                  Column(
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Text(
                            "Van ",
                            style: TextStyle(
                              fontSize: 14,
                            ),
                          ),
                          Text(
                            resultContainer1[0],
                            style: const TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 18,
                            ),
                          ),
                        ],
                      ),
                      const Divider(
                        thickness: 2,
                        indent: 48,
                        endIndent: 48,
                        color: Colors.black,
                        height: 10,
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          const Text(
                            "Tot ",
                            style: TextStyle(
                              fontSize: 14,
                            ),
                          ),
                          Text(
                            resultContainer1[1],
                            style: const TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 18,
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
          SizedBox(
            width: screenWidth * 0.06,
          ),
          Container(
            height: screenWidth * 0.42,
            width: screenWidth * 0.42,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(7.0),
              color: const Color.fromARGB(255, 255, 255, 255),
            ),
            child: Center(
              child: Column(
                children: [
                  SizedBox(height: screenWidth * 0.05),
                  Icon(
                    Icons.electric_car,
                    size: (screenWidth * 0.14),
                  ),
                  SizedBox(height: screenWidth * 0.05),
                  Column(
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          const Text(
                            "Van ",
                            style: TextStyle(
                              fontSize: 14,
                            ),
                          ),
                          Text(
                            resultContainer2[0],
                            style: const TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 18,
                            ),
                          ),
                        ],
                      ),
                      const Divider(
                        thickness: 2,
                        indent: 48,
                        endIndent: 48,
                        color: Colors.black,
                        height: 10,
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          const Text(
                            "Tot ",
                            style: TextStyle(
                              fontSize: 14,
                            ),
                          ),
                          Text(
                            resultContainer2[1],
                            style: const TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 18,
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者Koen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:57:04