首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查看是否有小吃店?

如何查看是否有小吃店?
EN

Stack Overflow用户
提问于 2019-07-26 05:36:39
回答 4查看 5.7K关注 0票数 5

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

我试着在谷歌上搜索它,但没有显示出来,真正让我生气的是,当我多次调用Scaffold.of(context).showSnackBar(sb);时,他们会一次显示一个,直到它们结束。

代码语言:javascript
复制
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);
      },
    );
  }
}

我想要实现的东西是这样的:

代码语言:javascript
复制
if (sb.isShowing()){
  //hide or remove it
  }

提前谢谢你。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-26 13:36:51

您可以使用.close()事件。它指定如何关闭快餐店。详细信息here和示例代码如下:

代码语言:javascript
复制
   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。此外,根据您的要求,您可以检查当前快餐栏上的文本,以查看目标快餐栏与当前快餐栏是否相同。

票数 7
EN

Stack Overflow用户

发布于 2019-07-26 10:31:07

只需调用removeCurrentSnackBar()删除当前的snackbar即可。

代码语言:javascript
复制
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();
          },
        ),
      ],
    );
  }
}
票数 3
EN

Stack Overflow用户

发布于 2021-06-23 22:37:44

补充@Sukhi提到的内容

//将此设置为状态...

代码语言:javascript
复制
bool _isSnackbarActive = false;

..。

..。..。..。

//如果您想在按钮按下时显示snackBar

代码语言:javascript
复制
onPressed: () {
        if (!_isSnackbarActive) {
          showSnack();
        }

//这是showSnack()。当被调用时,它会将_isSnackbarActive设置为true,现在,即使您多次单击该按钮,因为它是true,所以不会显示新的snackBar。当前snackBar关闭后,将_isSnackbarActive设置为false,然后可以再次调用它。

代码语言:javascript
复制
  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;
      });
    });
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57210423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档