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

Flutter构造函数使用求助:文本框输入计算月耗电量的问题

解决Flutter中构造函数调用与按钮点击事件的问题

问题出在哪

  • 对象初始化参数错误:你初始化ElektrikliCihaz elektrikliCihaz_1时,用的cihazAdi、cihazKW、gunlukSaatKullanim都是未定义的变量,这些值得从用户输入的文本框里获取,不能在类刚初始化时直接使用。
  • onPressed写法不符合语法:onPressed需要接收一个无参函数,你当前的写法aylikTuketim() { setState(() {}); }既语法错误,也没实际执行计算逻辑。
  • 计算逻辑缺失运算符:ElektrikliCihaz类的aylikTuketim方法中,乘法运算缺少*运算符,直接写cihazKWgunlukSaatKullanim30会导致语法报错。

修正后的完整代码

class _MyHomePageState extends State<MyHomePage> { // 别忘了给State添加泛型参数MyHomePage
  TextEditingController t1 = TextEditingController();
  TextEditingController t2 = TextEditingController();
  TextEditingController t3 = TextEditingController();
  ElektrikliCihaz? elektrikliCihaz_1;
  int? aylikTuketimSonucu; // 用于存储计算结果

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        padding: EdgeInsets.all(16), // 添加内边距优化布局
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: t1,
              decoration: InputDecoration(hintText: "Cihaz Adi"),
            ),
            SizedBox(height: 10), // 输入框之间添加间距
            TextField(
              controller: t2,
              keyboardType: TextInputType.number, // 设置数字键盘方便输入
              decoration: InputDecoration(hintText: "Cihaz Gücü (KW)"),
            ),
            SizedBox(height: 10),
            TextField(
              controller: t3,
              keyboardType: TextInputType.number,
              decoration: InputDecoration(hintText: "Günlük Kullanılan Saat"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              child: Text("Hesapla"),
              onPressed: () {
                // 获取文本框输入并转换为对应类型
                String cihazAdi = t1.text;
                int? cihazKW = int.tryParse(t2.text);
                int? gunlukSaat = int.tryParse(t3.text);

                // 确保输入的数字有效再执行计算
                if (cihazKW != null && gunlukSaat != null) {
                  setState(() {
                    // 用输入值创建ElektrikliCihaz对象
                    elektrikliCihaz_1 = ElektrikliCihaz(cihazAdi, cihazKW, gunlukSaat);
                    // 调用方法计算月耗电量并存储结果
                    aylikTuketimSonucu = elektrikliCihaz_1?.aylikTuketim();
                  });
                }
              },
            ),
            SizedBox(height: 20),
            // 有计算结果时显示内容
            if (aylikTuketimSonucu != null)
              Text(
                "Aylık Tüketim: ${aylikTuketimSonucu} KW",
                style: TextStyle(fontSize: 18),
              ),
          ],
        ),
      ),
    );
  }
}

class ElektrikliCihaz {
  String cihazAdi;
  int cihazKW;
  int gunlukSaatKullanim;

  ElektrikliCihaz(this.cihazAdi, this.cihazKW, this.gunlukSaatKullanim);

  int aylikTuketim() {
    // 补充乘法运算符,修正计算逻辑
    return cihazKW * gunlukSaatKullanim * 30;
  }
}

核心修改点

  1. 对象初始化调整:将elektrikliCihaz_1改为可空类型,不在类初始化阶段赋值,而是等用户输入完成后,通过文本框的值创建对象。
  2. onPressed事件修正:换成匿名函数() {},在函数内完成输入值获取、类型转换、对象创建和计算逻辑,最后用setState更新UI显示结果。
  3. 计算逻辑修复:在aylikTuketim方法中添加*运算符,确保乘法运算正常执行。
  4. UI优化:添加内边距、间距,设置数字键盘,增加结果显示区域,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:29:59