Dart 颤振蛇形杆

Dart 颤振蛇形杆,dart,flutter,Dart,Flutter,我正在寻找一种方法来检查Snackbar是否已被用户或超时内容取消。我真的找不到任何人听我这么做 这就是我到目前为止得到的 Scaffold.of(context) .showSnackBar(SnackBar(content: Text("Title"))) .closed .then((reason) { // snackbar is now closed }); 这是唯一的方法,我一直在寻找准确的听众。我不想做任何变通,比如设置Snackbar的duratio

我正在寻找一种方法来检查
Snackbar
是否已被用户或超时内容取消。我真的找不到任何人听我这么做

这就是我到目前为止得到的

Scaffold.of(context)
    .showSnackBar(SnackBar(content: Text("Title")))
    .closed
    .then((reason) {
  // snackbar is now closed
});
这是唯一的方法,我一直在寻找准确的听众。我不想做任何变通,比如设置
Snackbar
duration
,然后在duration过去后收听

请参见下面的完整示例 我刚刚用
WillPopoScope
包装了
SnackBar
内容,如果用户按下后退按钮,它将删除SnackBar。
默认情况下,它将指定SnackBarClosedReason.remove原因

进口“包装:颤振/材料.省道”

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: FirstPage(),
      ),
    );
  }
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        child: Text('go to test page'),
        onPressed: () => Navigator.of(context).push(MaterialPageRoute(builder: (context) => Test())),
      ),
    );
  }
}

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          child: Text('show snack'),
          onPressed: () => _showSnack(context),
        ),
      ),
    );
  }

  void _showSnack(BuildContext context) {
    ScaffoldMessenger.of(context)
        .showSnackBar(
          SnackBar(
            content: WillPopScope(
              onWillPop: () async {
                ScaffoldMessenger.of(context).removeCurrentSnackBar();
                return true;
              },
              child: Text("Title"),
            ),
          ),
        )
        .closed
        .then((reason) {
      print('------------ $reason');
    });
  }
}

这不是解决方法:请参阅@pskink Yes,这就是我正在使用的方法,但问题是当您按下“后退”按钮关闭屏幕时,无法调用原因块。单击“后退”按钮检测该行为时,请返回一些内容。使用return-new-WillPopScope(onWillPop:()async{return\u doSomeChecks(context);},child:SafeArea(…非常感谢,亲爱的,它工作得很好。我搜索这个解决方案已经两天了。再次感谢:)