在 Flutter 中使用 onPressed 调用函数的问题

Jim*_*ler 5 flutter

我试图在 Flutter 中的 onPressed 上调用一个函数。

我试过了

onPressed: (){ 
   _showDialog;
},
Run Code Online (Sandbox Code Playgroud)

onPressed: _showDialog,
Run Code Online (Sandbox Code Playgroud)

onPressed: () => _showDialog,
Run Code Online (Sandbox Code Playgroud)

这是我的职能。

  void _showDialog() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text("Title"),
          content: Text("Body"),
          actions: <Widget>[
            FlatButton(
              child: Text("Close"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

我不断收到“无效的常数值”。

编辑:

这是我调用 onPressed 的地方:

                      secondary: const IconButton(
                        icon: Icon(Icons.domain),
                        onPressed: (){
                          _showDialog();
                        },
                      ),
Run Code Online (Sandbox Code Playgroud)

按下时出错

die*_*per 9

您应该尝试以下方式:

onPressed: (){ 
   _showDialog();
},
Run Code Online (Sandbox Code Playgroud)

或者

onPressed: _showDialog,
Run Code Online (Sandbox Code Playgroud)

或者

onPressed: () => _showDialog(),
Run Code Online (Sandbox Code Playgroud)

更新

简单修复:删除const关键字

      secondary: IconButton(
                    icon: Icon(Icons.domain),
                    onPressed: (){
                      _showDialog();
                    },
                  ),
Run Code Online (Sandbox Code Playgroud)

  • 这是因为在你的上层树上,某个地方有另一个“const”(甚至多个)。将所有内容追溯到根并删除找到的任何“const”关键字。 (5认同)
  • 我仍然收到“无效常量值”错误 (2认同)

小智 6

您需要const 像这样检查并删除容器(小部件)

(X)

child: TextFormField(
                decoration: **const** InputDecoration(
                  prefixIcon: Icon(Icons.person),
                  suffixIcon: IconButton(
                      icon: Icon(Icons.remove_red_eye),
                      onPressed: showPassword,
                  ),
                  labelText: "Name *",
                  hintText: "Your Github account username",
                ),
              )
Run Code Online (Sandbox Code Playgroud)

(O)

child: TextFormField(
                decoration:InputDecoration(
                 ...
              )
Run Code Online (Sandbox Code Playgroud)