如何检查是否有小吃店显示?

Ove*_*den 5 snackbar flutter

我正在尝试获取当前的小吃店(显示一个)以确定它是否与我试图展示的小吃相同;换句话说,我不想复制小吃,但我无法得到它。

我试图用谷歌搜索它,但没有任何显示,真正让我生气的是当我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)

并提前致谢。

rne*_*ves 9

对我来说,这工作得很好,并且不需要外部变量来控制可见性状态。也许对其他人有帮助。

我认为这不是最好的方法,因为它不会阻止新的 SnackBars,它只会在关闭时清理“队列”。

ScaffoldMessenger.of(context)
    .showSnackBar(_snackBar)
    .closed
    .then((value) => ScaffoldMessenger.of(context).clearSnackBars());
Run Code Online (Sandbox Code Playgroud)


Suk*_*khi 7

您可以使用 .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();已被弃用。