我正在尝试获取当前的小吃店(显示一个),以确定它是否是试图显示的相同的小吃;换句话说,我不想复制该小吃,但我无法获得它。
我试着在谷歌上搜索它,但没有显示出来,真正让我生气的是,当我多次调用Scaffold.of(context).showSnackBar(sb);时,他们会一次显示一个,直到它们结束。
import 'package:flutter/material.dart';
const sb = SnackBar(
content: Text('the snack bar'),
);
void main() => runApp(MaterialApp(
title: 'Snack bar test',
home: Scaffold(
appBar: AppBar(
title: Text('snack bar demo'),
),
body: Center(
child: MyApp(),
),
),
));
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return RaisedButton(
child: Text('push to test'),
onPressed: () {
// Scaffold.of(context).
Scaffold.of(context).showSnackBar(sb);
},
);
}
}我想要实现的东西是这样的:
if (sb.isShowing()){
//hide or remove it
}提前谢谢你。
发布于 2019-07-26 13:36:51
您可以使用.close()事件。它指定如何关闭快餐店。详细信息here和示例代码如下:
bool _isSnackbarActive = false ;
...
...
_isSnackbarActive = true ;
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text("Title")))
.closed
.then((SnackBarClosedReason reason) {
// snackbar is now closed.
_isSnackbarActive = false ;
});显示snackBar时将变量_isSnackbarActive设置为true,关闭时将其设置为false。在您的onPressed事件中,只需检查snackbar的状态,并决定是否显示新的snackbar。此外,根据您的要求,您可以检查当前快餐栏上的文本,以查看目标快餐栏与当前快餐栏是否相同。
发布于 2019-07-26 10:31:07
只需调用removeCurrentSnackBar()删除当前的snackbar即可。
import 'package:flutter/material.dart';
const sb = SnackBar(
content: Text('the snack bar'),
);
void main() => runApp(MaterialApp(
title: 'Snack bar test',
home: Scaffold(
appBar: AppBar(
title: Text('snack bar demo'),
),
body: Center(
child: MyApp(),
),
),
));
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('push to test'),
onPressed: () {
// Scaffold.of(context).
Scaffold.of(context).showSnackBar(sb);
},
),
RaisedButton(
child: Text('Remove snackbar'),
onPressed: () {
// Scaffold.of(context).
Scaffold.of(context).removeCurrentSnackBar();
},
),
],
);
}
}发布于 2021-06-23 22:37:44
补充@Sukhi提到的内容
//将此设置为状态...
bool _isSnackbarActive = false;..。
..。..。..。
//如果您想在按钮按下时显示snackBar
onPressed: () {
if (!_isSnackbarActive) {
showSnack();
}//这是showSnack()。当被调用时,它会将_isSnackbarActive设置为true,现在,即使您多次单击该按钮,因为它是true,所以不会显示新的snackBar。当前snackBar关闭后,将_isSnackbarActive设置为false,然后可以再次调用它。
showSnack() {
setState(() {
_isSnackbarActive = true;
});
return ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text("Posts updated!")))
.closed
.then((SnackBarClosedReason reason) {
// snackbar is now closed.
setState(() {
_isSnackbarActive = false;
});
});
}https://stackoverflow.com/questions/57210423
复制相似问题