`import 'package:flutter/material.dart';
class SkillEntry extends StatefulWidget {
const SkillEntry({super.key, required this.skll});
final String skll;
@override
State<SkillEntry> createState() => _SkillEntryState();
}
class _SkillEntryState extends State<SkillEntry> {
@override
Widget build(BuildContext context) {
int skillvalue = 0;
return Container(
height: 40,
width: 200,
child: Row(children: [
const Flexible(flex: 20, child:
TextField(decoration:(
InputDecoration(
border: OutlineInputBorder(),
hintText: ('Name and Skill'))),)),
ElevatedButton(onPressed: PlusOne(skillvalue), child: Icon(Icons.add_circle)),
ElevatedButton(onPressed: MinusOne(skillvalue), child: Icon(Icons.exposure_minus_1)),
Flexible(flex: 7, child:
Text('$skillvalue',)),
]));
}
PlusOne(skillvalue) {
setState(() {
skillvalue = skillvalue + 1;
return skillvalue;
});
}
MinusOne(skillvalue) {
setState(() {
skillvalue = skillvalue - 1;
return skillvalue;
});
}
}
就目前情况而言,这些按钮似乎没有任何作用。我怀疑我将
skillvalue
变量放入函数 PlusOne
中,但没有正确地将其返回到主程序,或者我可能没有正确使用 setstate
。我该如何解决这个问题?
问题是你的
skillValue
是在你的 build 方法中声明的 :
@override
Widget build(BuildContext context) {
int skillvalue = 0;
并且 build
方法每隔
setState
重新运行一次。因此,每次更新 UI 时,
skillValue
都会重置为您设置的值。要解决该问题,请将
skillValue
移至
State
类中:
class _SkillEntryState extends State<SkillEntry> {
int skillvalue = 0;
...
代替build
方法
skillValue
是在
build
方法中声明的,其值始终为零。其次,你使用
ElevatedButton
的方式是错误的,你不能使用void方法返回值作为
onPressed
的参数,这意味着
onPressed
始终为空。这是我的演示代码。
class SkillEntry extends StatefulWidget {
const SkillEntry({super.key, required this.skll});
final String skll;
@override
State<SkillEntry> createState() => _SkillEntryState();
}
class _SkillEntryState extends State<SkillEntry> {
int skillvalue = 0;
@override
Widget build(BuildContext context) {
return Container(
height: 40,
width: 200,
child: Row(children: [
const Flexible(flex: 20, child:
TextField(decoration:(
InputDecoration(
border: OutlineInputBorder(),
hintText: ('Name and Skill'))),)),
ElevatedButton(onPressed: PlusOne, child: Icon(Icons.add_circle)),
ElevatedButton(onPressed: MinusOne, child: Icon(Icons.exposure_minus_1)),
Flexible(flex: 7, child:
Text('$skillvalue',)),
]));
}
PlusOne() {
setState(() {
skillvalue = skillvalue + 1;
});
}
MinusOne() {
setState(() {
skillvalue = skillvalue - 1;
});
}
}