当用户开始编辑textformfield时,我想更改提交按钮的颜色,这是我尝试做的事情:
final _text = TextEditingController();
实现我的控制器的textformfield
TextFormField(
controller: _text,
最后是我的提交按钮
(_text.text.isNotEmpty) ?
new RaisedButton(
color: mmpataColorBlue,
child: new Text(
"Valider",
style: TextStyle(color: Colors.white),
),
onPressed: () async {
await createOrder(vm);
},
)
:
new RaisedButton(
color: Colors.grey,
child: new Text(
"Valider",
style: TextStyle(color: Colors.white),
),
onPressed: () async {
await createOrder(vm);
},
)
运行代码时出现此错误:引发了另一个异常:'package:flutter / src / material / text_form_field.dart':断言失败:第176行 排名15:“ initialValue == null || controller == null':不正确。
答案 0 :(得分:0)
从消息错误中,我认为您确实为textforifield设置了一个初始值,这是不可能的,因为您有一个控制器,而是使用:
_text.text = 'your initial value';
答案 1 :(得分:0)
这将通过向控制器添加listener
来实现。每次控制器值更改时,它将触发侦听器上的功能(在本例中为setState
)。 RaisedButton
然后将检查控制器值是否为空,并继续显示相应的颜色。
class TestPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return TestPageState();
}
}
class TestPageState extends State<TestPage> {
TextEditingController _myController = TextEditingController();
@override
void initState() {
super.initState();
_myController.text = '<initial value>';
_myController.addListener(() {
setState(() {}); // setState every time text changes
});
}
@override
void dispose() {
_myController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Row(
children: <Widget>[
SizedBox(
height: 32.0,
width: 200.0,
child: TextFormField(
controller: _myController,
),
),
RaisedButton(
onPressed: () {
print('pressed');
},
color: (_myController.text.isEmpty) ? Colors.blue : Colors.green,
child: Text('test'),
)
],
),
),
);
}
}
答案 2 :(得分:0)
我认为您可以为此使用验证器。您可以使用变量定义按钮的颜色,并在验证器中使用setState进行更改。