flutter 如何在async方法中调用snackbar?

dced5bon  于 2023-06-07  发布在  Flutter
关注(0)|答案(2)|浏览(163)

在这里,当你在async内部调用snackbar时,你可能会注意到警告或错误,说不要在async间隙中使用BuildContexts。如何在类对象而不是小部件树中避免这种情况

m1m5dgzv

m1m5dgzv1#

首先,我创建了一个showSnack bar方法,之后我使用了异步的future.delay来调用snackbar,我希望这个解决方案可以帮助将来遇到这种情况的人,下面是我为showSnack bar创建的函数

void showsnackbar(BuildContext context, String text) {
    final snackBar = SnackBar(
      content: Text(text),
      duration: Duration(seconds: 5),
    );
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

下面是我的异步函数,我调用showsnackbar函数,例如..如果你想在状态码上显示snackbar,那么你可以做下面的方法

class sample{
    Future<void> sample(BuildContext context) async {
    
    switch (res.statusCode) {
            case 201:
              Future.delayed(Duration.zero)
                  .then((value) => showsnackbar(context, "sample text"));
          }
    }
}
vktxenjb

vktxenjb2#

将snackBar代码 Package 在context.mounted if条件中

if (context.mounted) {
  ScaffoldMessenger.of(context).showSnackBar(snackBar);
}

相关问题