gpt4 book ai didi

dart - 如何在自定义按钮 flutter 中给 onPressed 一个方法

转载 作者:IT王子 更新时间:2023-10-29 07:08:43 25 4
gpt4 key购买 nike

我有自定义按钮,我想通过我的参数在我的 onpressed 中添加方法,不幸的是我仍然坚持我应该在我的自定义按钮参数中使用什么类型,目前我硬编码 onpressed 方法并将字符串路由传递给导航 问题不是我所有的按钮都是用来导航的,只有一个按钮可以注销,我已经在我的参数中使用了 void 但它仍然不起作用。这是我的自定义按钮

FlatButton buttonMenu(String title, IconData icon, String route) {
return new FlatButton(
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(25.0)),
color: Colors.blueGrey,
child: new Container(
height: 50.0,
width: 120.0,
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
new Padding(
padding: EdgeInsets.only(right: 10.0),
child: new Icon(
icon,
color: Colors.white70,
size: 30.0,
),
),
new Text(
title,
style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.w300),
),
],
),
),
onPressed: () {
Navigator.of(context).pushNamed('/$route');
},
);
}
}

这是我如何调用自定义按钮

 buttonMenu('MVP Arc', Icons.star, 'EmployeeScreen')

我想要的是我可以将我的参数中的方法发送到我的onpressed所以它会像这样

buttonMenu('MVP Arc', Icons.star, myMethod())

我的导航方法

void _navigate(String route){
Navigator.of(context).pushNamed('/$route');
}

最佳答案

onPressed 类型是 VoidCallback 所以让你的参数像这样这个类型。

FlatButton buttonMenu(String title, IconData icon, VoidCallback onCustomButtonPressed ) 

当你调用它时传递一个引用

buttonMenu('MVP Arc', Icons.star, myMethod)

不要忘记在你的函数体中做同样的事情

  onPressed: onCustomButtonPressed ,

更新:如果你想传递参数,你必须声明你自己的签名:

Example in your case :

typedef VoidNavigate = void  Function(String route);

然后使用这个新类型

FlatButton buttonMenu(String title, IconData icon, VoidNavigate onCustomButtonPressed) 

这样称呼

onPressed: (){onCustomButtonPressed},

然后你像这样传递你的函数

buttonMenu('MVP Arc', Icons.star, _navigate('EmployeeScreen')) 

或者你可以像@Kirill Shashov 说的那样做

buttonMenu('MVP Arc', Icons.star, () {_navigate('EmployeeScreen');})

关于dart - 如何在自定义按钮 flutter 中给 onPressed 一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51398531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com