首页 > 解决方案 > Flutter如何命名一个函数然后将它传递给另一个函数?

问题描述

我是 Flutter 的新手,来自 Angular / React 背景。

我正在尝试找到正确的语法来将函数存储在变量中并将该函数传递给另一个函数。

这是我的代码:

负BtnFunc 表示“预计会找到'}'”。但我看不出我错过了什么。

positiveBtnFunc 似乎工作得很好。

onPressed: () {
    negativeBtnFunc() => {
        RouteGenerator().hasAcceptedTAndC = false;
        if (Platform.isAndroid) {
           SystemChannels.platform.invokeMethod('SystemNavigator.pop');
        } else if (Platform.isIOS) {
          exit(0);
        }
    };
    positiveBtnFunc() => {};
    return showAlertDialog(
           context,
           kTermsAlertTitle,
           kTermsAlertBody,
           kAlertPosOk,
           positiveBtnFunc,
           kAlertNegCloseApp,
           negativeBtnFunc
    );
 },

标签: flutterdart

解决方案


在 dart 中,以下代码返回一个Set. 所以两个按钮代码都是无效的。与 JavaScript 不同,除非您想返回 a或 a ,否则您不会使用 curly {}after 。fat-arrow 之后的任何内容都被视为一个值。=>SetMap

// invalid ...
negativeBtnFunc() => {
    RouteGenerator().hasAcceptedTAndC = false;
    if (Platform.isAndroid) {
       SystemChannels.platform.invokeMethod('SystemNavigator.pop');
    } else if (Platform.isIOS) {
       exit(0);
    }
}

对于传递函数,您可以这样做:

onPressed: () {
    Function negativeBtnFunc = () {
        RouteGenerator().hasAcceptedTAndC = false;
        if (Platform.isAndroid) {
           SystemChannels.platform.invokeMethod('SystemNavigator.pop');
        } else if (Platform.isIOS) {
          exit(0);
        }
        return;
    };
    Function positiveBtnFunc = () {
        return;
    };
    return showAlertDialog(
           context,
           kTermsAlertTitle,
           kTermsAlertBody,
           kAlertPosOk,
           positiveBtnFunc,
           kAlertNegCloseApp,
           negativeBtnFunc
    );
},

推荐阅读