我正在寻找一种方法来检查
Snackbar
是否已被用户或超时问题解除。我真的无法让任何听众这样做。
这是我到目前为止所得到的,
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text("Title")))
.closed
.then((reason) {
// snackbar is now closed
});
这是一种方法,我一直在寻找确切的听众。我不想做任何解决办法,比如设置
duration
的 Snackbar
,然后在持续时间过去后收听它。
请参阅下面的完整示例 我刚刚用
SnackBar
包裹了 WillPopoScope
内容,如果用户按下后退按钮,它将删除小吃栏。SnackBarClosedReason.remove
原因
导入'包:flutter/material.dart';
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');
});
}
}
尝试使用下面的代码片段
ScaffoldMessenger.of(context).hideCurrentSnackBar();