Flutter 创建一个包含 setState 的方法

Flutter Create a method including setState

我正在尝试创建自定义小吃店。它包括在 snackbar 关闭后执行的“setState”。但是 setStat 函数不起作用(即 snackBarIsOn = false;)。快餐栏弹出并在 2 秒后消失。它还应该将“snackBarIsOn”更改为“true”,但它并没有发生。我在没有方法的情况下在主代码中测试了它。它按预期工作。我怀疑“actionAfterClosed”的类型。

请帮助我。

customSnackBar(
     context: context,
     content: 'Enter a Title.',
     label: 'Close',
     textColor: Colors.white,
     snackBarAction: () {
               ScaffoldMessenger.of(context).hideCurrentSnackBar();
               setState(() {
                    snackBarIsOn = false;
               });
          },
     actionAfterClosed:
          setState(() {
               snackBarIsOn = false;
          })
     );



void customSnackBar(
    {required BuildContext context,
    required String content,
    required String label,
    required Color textColor,
    required VoidCallback snackBarAction,
    required **VoidCallback** actionAfterClosed}) {
  ScaffoldMessenger.of(context)
      .showSnackBar(SnackBar(
        content: Text(content),
        duration: const Duration(seconds: 2),
        action: SnackBarAction(
          label: label,
          textColor: textColor,
          onPressed: snackBarAction,
        ),
      ))
      .closed
      .then((_) =>
    actionAfterClosed
  );
}



我认为这是问题所在:

actionAfterClosed:
          setState(() {
               snackBarIsOn = false;
          })

在这里,你告诉 flutter 到 运行 setState,然后使用它 return 作为回调,所以它期望 setState 到 return 一个在 snackbar 关闭后调用的函数,而不是调用 setState 本身。

要解决此问题,您必须像 snackbarAction:

那样使用函数文字
actionAfterClosed:
          () => setState(() {
               snackBarIsOn = false;
          })

我能找到的第二个问题在这里:

.closed
      .then((_) =>
    actionAfterClosed
  );

你忘了括号!这样函数就不是 运行ning!

.closed
      .then((_) =>
    actionAfterClosed()
  );