我有一个Dart类,其中有一个用于显示警报的helper方法。警报在应用上显示多次,但警报上的onPressed()在不同的位置执行不同的操作。我想将我希望onPressed()执行的操作作为参数发送。
下面是我的helper方法:
basicAlertWithOkWithCallback(String message, BuildContext context, void Function() f){
showDialog(
context: context,
builder: (context) =>
AlertDialog(
content: Text(message),
actions: <Widget>[
TextButton(
child: const Text('OK'),
onPressed: () async {
f;
},
),
],
),
);
}
我从另一个屏幕调用该方法,如下所示:
basicAlertWithOkWithCallback('会话成功保存。',上下文,回调(上下文));
在那个屏幕上我做了这个方法,我想在按OK键的时候执行它:
callBack(BuildContext context){
print('CALLED');
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
}
问题是,当警报显示时,甚至在用户按OK之前,这个方法就被直接调用了。为什么它被直接调用,而不是在onPressed()上调用呢?
2条答案
按热度按时间1l5u6lss1#
调用basicAlertWithOkWithCallback时立即调用callBack方法的原因是,您调用的是callBack方法并将其返回值作为参数传递给basicAlertWithOkWithCallback方法,而不是传递callBack方法本身。
要解决此问题,您需要将callBack方法作为参数传递给basicAlertWithOkWithCallback方法,如下所示:
请注意,在上面的代码中,我们没有使用()调用callBack方法,而是传递了一个对callBack方法的引用,这样当用户按下“OK”按钮时,它就可以被调用。
此外,您需要在onPressed回调中调用f函数,方法是在f参数后面添加(),如下所示:
通过这样做,callBack方法将仅在用户按下“OK”按钮时调用。
w6lpcovy2#