我正在尝试获取当前的小吃店(显示一个)以确定它是否与我试图展示的小吃相同;换句话说,我不想复制小吃,但我无法得到它。
我试图用谷歌搜索它,但没有任何显示,真正让我生气的是当我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);
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是这样的:-
if (sb.isShowing()){
//hide or remove it
}
Run Code Online (Sandbox Code Playgroud)
并提前致谢。
对我来说,这工作得很好,并且不需要外部变量来控制可见性状态。也许对其他人有帮助。
我认为这不是最好的方法,因为它不会阻止新的 SnackBars,它只会在关闭时清理“队列”。
ScaffoldMessenger.of(context)
.showSnackBar(_snackBar)
.closed
.then((value) => ScaffoldMessenger.of(context).clearSnackBars());
Run Code Online (Sandbox Code Playgroud)
您可以使用 .close() 事件。它指定小吃店的关闭方式。此处的详细信息和下面的示例代码:
bool _isSnackbarActive = false ;
...
...
_isSnackbarActive = true ;
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text("Title")))
.closed
.then((SnackBarClosedReason reason) {
// snackbar is now closed.
_isSnackbarActive = false ;
});
Run Code Online (Sandbox Code Playgroud)
当显示snackBar 时变量_isSnackbarActive 为true,关闭时将其设置为false。在您的 onPressed 事件中,只需检查小吃店的状态并决定是否显示新的小吃店。此外,根据您的要求,您可以检查当前小吃店上的文字,看看预期的小吃店和当前的小吃店是否相同。
小智 5
使用ScaffoldMessenger.of(context).removeCurrentSnackBar();sinceScaffold.of(context).removeCurrentSnackBar();已被弃用。
| 归档时间: |
|
| 查看次数: |
4652 次 |
| 最近记录: |