在Flutter中使用onPressed调用函数时遇到问题

时间:2019-03-26 22:08:07

标签: flutter

我正在尝试在Flutter中的onPressed上调用函数。

我尝试过

onPressed: (){ 
   _showDialog;
},

onPressed: _showDialog,

onPressed: () => _showDialog,

这是我的职责。

  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();
              },
            ),
          ],
        );
      },
    );
  }

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

编辑:

这是我打电话给onPressed的地方:

                      secondary: const IconButton(
                        icon: Icon(Icons.domain),
                        onPressed: (){
                          _showDialog();
                        },
                      ),

Error when onPressed

4 个答案:

答案 0 :(得分:2)

您应该尝试以下方式:

onPressed: (){ 
   _showDialog();
},

onPressed: _showDialog,

onPressed: () => _showDialog(),

更新

轻松解决:删除 const 关键字

      secondary: IconButton(
                    icon: Icon(Icons.domain),
                    onPressed: (){
                      _showDialog();
                    },
                  ),

答案 1 :(得分:-1)

您需要检查并删除容器(小工具)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",
                ),
              )

(O)

child: TextFormField(
                decoration:InputDecoration(
                 ...
              )

答案 2 :(得分:-2)

删除常量关键字

您的代码

   secondary: const IconButton(
                icon: Icon(Icons.domain),
                onPressed: (){
                  _showDialog();
                },
              ),

已更新

   secondary: IconButton(
                icon: Icon(Icons.domain),
                onPressed: (){
                  _showDialog();
                },
              ),

答案 3 :(得分:-2)

在某些情况下,您可以声明顶级或静态函数:

  static void myHandler() {
    _showDialog();
  }

...

  secondary: const IconButton(
                icon: Icon(Icons.domain),
                onPressed: myHandler,
              ),

仅在这种情况下(顶级或静态),myHandler可以被视为常量并传递给常量构造函数。