Flutter-web TextFormField issue



通常我可以禁用/灰化按钮,直到 TextFormField 满足颤振中的某些参数,如下所示:

TextFormField(
controller: _controller
value: (value)
)
SubmitButton(
onPressed: _controller.text.isNotEmpty ? _submit : null;
)

但是当编译为网站时,按钮似乎不再知道控制器值......

我尝试过以几种不同的方式进行定位,例如_controller.value.text.isEmpty和_controller.text.isEmpty...

我猜我错过了一些东西,或者这种方法对于网络是不可能的......还有其他方法可以获得相同的结果吗?

老实说,您的代码也不应该在flutter mobile中工作,但可能是因为屏幕键盘导致显示或隐藏时小部件重建而工作。 要解决此问题,我们必须将有状态小部件与状态变量(如canSubmit(一起使用,并使用setState方法在 textField 的侦听器onChange中更新它。然后每次文本更改时,我们的有状态小部件都会更新提交按钮。

class Page extends StatefulWidget {
@override
_PageState createState() => _PageState();
}
class _PageState extends State<Page> {
bool canSubmit;
@override
void initState() {
canSubmit = false;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
TextField(
onChanged: (value) {
setState(() {
canSubmit = value.isNotEmpty;
});
},
),
RaisedButton(
onPressed: canSubmit ? _submit : null,
child: Text('Submit'),
)
],
),
),
);
}
void _submit() {
print('Submitted');
}
}

最新更新