首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter-web TextFormField问题

Flutter-web TextFormField问题
EN

Stack Overflow用户
提问于 2020-02-02 03:53:31
回答 1查看 171关注 0票数 1

通常,我可以禁用/灰显一个按钮,直到TextFormField在flutter中满足某些参数,如下所示:

代码语言:javascript
复制
TextFormField(
controller: _controller
value: (value)
)

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

但是当被编译为网站时,Button似乎不再意识到控制器的值了……

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

我猜我遗漏了一些东西,或者这种方法在web上是不可能的。有没有其他方法可以得到同样的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-02 05:28:27

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

代码语言:javascript
复制
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');
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60020589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档