有什么方法可以防止用户向下滑动Snackbar
时将其撤消,而无需对Snackbar
类的源代码进行任何修改。
答案 0 :(得分:0)
您可以尝试一下。
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(builder: (context) {
return RaisedButton(
onPressed: () => showSnackbar(context),
child: Text("Show snackbar"),
);
}),
);
}
void showSnackbar(context) {
Scaffold.of(context)
.showSnackBar(SnackBar(
content: Text("I am here"),
backgroundColor: Colors.blue,
))
.closed
.then((reason) {
if (reason == SnackBarClosedReason.swipe)
showSnackbar(context);
});
}
答案 1 :(得分:0)
将GestureDetector
放在SnackBar
content
内并听onVerticalDragStart
使其不那么令人讨厌,而使用多余的\n\n\n
则很烦人-但但是,可以忽略。 :)
在此示例中,它确实防止了从content
区域退出,但没有阻止从SnackBar填充/边距区域退出。
void _showSnackBar(BuildContext context) {
final snackbar = SnackBar(
duration: Duration(days: 1),
content: GestureDetector(
behavior: HitTestBehavior.opaque,
onVerticalDragStart: (_) => debugPrint("no can do!"),
child: Text("Hi! Don't try to dismiss me.\n\n\n"),
)
);
Scaffold.of(context).showSnackBar(snackbar);
}
我什至试图将SnackBar
小部件直接放入Scaffold
的{{1}}中-但是结果是相同的,甚至将bottomsheet
包裹在{ {1}}。