dart - Flutter Snackbar 关闭监听器

标签 dart flutter

我正在寻找一种方法来检查 Snackbar已被用户或超时内容驳回。我真的无法让任何听众听到这样做。

这是我目前得到的

Scaffold.of(context)
    .showSnackBar(SnackBar(content: Text("Title")))
    .closed
    .then((reason) {
  // snackbar is now closed
});

这是一种方法,我正在寻找确切的听众。我不想做任何工作,比如设置 durationSnackbar然后在持续时间过去后听它。

最佳答案

请参阅下面的完整示例
我刚包好 SnackBar内容与 WillPopoScope如果用户按下后退按钮,它将删除 snackbar 。
默认情况下,它将指定 SnackBarClosedReason.remove原因
导入 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: FirstPage(),
      ),
    );
  }
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        child: Text('go to test page'),
        onPressed: () => Navigator.of(context).push(MaterialPageRoute(builder: (context) => Test())),
      ),
    );
  }
}

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          child: Text('show snack'),
          onPressed: () => _showSnack(context),
        ),
      ),
    );
  }

  void _showSnack(BuildContext context) {
    ScaffoldMessenger.of(context)
        .showSnackBar(
          SnackBar(
            content: WillPopScope(
              onWillPop: () async {
                ScaffoldMessenger.of(context).removeCurrentSnackBar();
                return true;
              },
              child: Text("Title"),
            ),
          ),
        )
        .closed
        .then((reason) {
      print('------------ $reason');
    });
  }
}

关于dart - Flutter Snackbar 关闭监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450046/

相关文章:

oop - 如何在dart/flutter中将变量内容传递给参数值?

dart - 在扩展类中找不到扩展方法

pointers - Dart编程中的链接列表,如何在Dart中处理指针或如何在堆上存储变量?

layout - 文本未使用 crossaxisalignment 居中

listview - 无法在ListView中使用MediaQuery

twitter - Flutter (Dart 2) 访问 twitter GET api

dart - 如何在同一文件夹中导入多个 Dart 文件

android - 返回在 Flutter 中显示黑屏

flutter - "error: A value of type ' double ' can' t被赋值给类型为'int'的变量”在Flutter中进行数字求和时

flutter - Flutter/Dart-嵌套的水平和垂直PageView构建器?