当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter中禁用按钮?

常永怡
2023-03-14

所以我的问题是我该怎么做?这似乎是一个非常简单的需求,但我在文档中找不到任何关于如何执行的内容。

多谢了。

共有1个答案

齐琦
2023-03-14

我认为您可能希望引入一些帮助函数来build您的按钮,以及一个有状态的小部件,以及一些要关闭键的属性。

  • 使用StateFulWidget/State并创建一个变量来保存条件(例如isButtonDisabled)
  • 首先将此设置为true(如果您希望如此)
  • 呈现按钮时,不要直接将onpressed值设置为null或某些函数onpressed:(){}
  • 相反,使用三元函数或帮助函数(下面的示例)有条件地设置它
  • 检查作为此条件的一部分的isButtonDisabled并返回Null或某些函数。
  • 按下按钮时(或只要您想禁用按钮),使用setstate(()=>isButtonDisabled=true)翻转条件变量。
  • Flutter将使用新状态再次调用build()方法,并且按钮将以null按下处理程序呈现并被禁用。

下面是使用Flutter counter项目的更多上下文。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  bool _isButtonDisabled;

  @override
  void initState() {
    _isButtonDisabled = false;
  }

  void _incrementCounter() {
    setState(() {
      _isButtonDisabled = true;
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("The App"),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'You have pushed the button this many times:',
            ),
            new Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
            _buildCounterButton(),
          ],
        ),
      ),
    );
  }

  Widget _buildCounterButton() {
    return new RaisedButton(
      child: new Text(
        _isButtonDisabled ? "Hold on..." : "Increment"
      ),
      onPressed: _isButtonDisabled ? null : _incrementCounter,
    );
  }
}
Widget _buildCounterButton() {
    return new RaisedButton(
      child: new Text(
        _isButtonDisabled ? "Hold on..." : "Increment"
      ),
      onPressed: _counterButtonPress(),
    );
  }

  Function _counterButtonPress() {
    if (_isButtonDisabled) {
      return null;
    } else {
      return () {
        // do anything else you may want to here
        _incrementCounter();
      };
    }
  }
 类似资料:
  • 问题内容: 我有这个组成部分: 我希望在输入值为空时禁用按钮。但是上面的代码不起作用。它说: add-item.component.js:78未捕获的TypeError:无法读取未定义的属性“值” 指向。我在这里怎么做错了?我猜测执行方法时可能尚未创建ref 。如果是,那么解决方法是什么? 问题答案: 使用不是最佳实践,因为它直接读取DOM,最好使用React的。另外,您的按钮不会更改,因为该组件

  • 问题内容: 我有angularJS 1.5.0-rc.2 我在互联网上发现可以使用该指令 但这不会禁用按钮。 我试过的 在我的控制器中,loaded定义为$ scope.loaded = false。 如何禁用按钮?谢谢 问题答案: 仅当表达式为 true时, 该按钮才会被禁用。

  • 我在Java中的ButtonGroup中有四个JRatioButton。前两个已启用,另两个已禁用。如果选择了一个特定的JRatioButton,我需要启用两个禁用的JRatioButton。 我试图找到按钮的状态并启用禁用的按钮,显然我找到了禁用状态的按钮,但没有更改该状态。 我得到了禁用按钮的文本,但我不能禁用它们。 需要帮忙吗?谢谢!

  • 问题内容: 在Swing中,我们可以禁用这样的按钮: 无论如何,使用JavaFX Button可以做到这一点吗?用户只能按一次按钮。 问题答案: 当然。只有相关 属性具有相反的语义,并称为。这意味着您可以使用(not )和。由于它是JavaFX属性,因此您还可以将侦听器附加到。 在http://docs.oracle.com/javafx/2/api/javafx/scene/Node.html#

  • 在Swing中,我们可以禁用如下按钮: 有什么方法可以用JavaFX按钮做到这一点吗?用户应该只能按一次按钮。

  • 我不知道如何使Tkinter变灰。 我试着使用,但它不起作用,我得到一个错误,说 _特金特。TclError:错误选项“-enable”:必须是-column、-columnspan、-in、-ipadx、-ipady、-padx、-pady、-row、-rowspan或-sticky 如何临时禁用?