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; } }
核心修改点
- 对象初始化调整:将
elektrikliCihaz_1改为可空类型,不在类初始化阶段赋值,而是等用户输入完成后,通过文本框的值创建对象。 - onPressed事件修正:换成匿名函数
() {},在函数内完成输入值获取、类型转换、对象创建和计算逻辑,最后用setState更新UI显示结果。 - 计算逻辑修复:在
aylikTuketim方法中添加*运算符,确保乘法运算正常执行。 - UI优化:添加内边距、间距,设置数字键盘,增加结果显示区域,提升用户体验。
内容的提问来源于stack exchange,提问作者Zeynep Baysoy
相关产品推荐
相关产品推荐

