flutter - 无法通过调用 ScaffoldState().removeCurrentSnackBar() 删除当前 snackbar

标签 flutter snackbar

由于某种原因,即使我正在调用 ScaffoldState().removeCurrentSnackBar(),我也无法删除当前的 snackbar

我没有收到任何错误消息,但由于某种原因, snackbar 不会消失。当用户从 DropdownButton 中选择一个项目时,还有其他方法可以删除 snackbar 吗?

我已经尝试过 ScaffoldState().hideCurrentSnackBar() 以及所有其他应该删除 SnackBar 的函数。

感谢您的回答。

class MainRoute extends StatefulWidget {
  @override
  _MainRouteState createState() => _MainRouteState();
}

class _MainRouteState extends State<MainRoute> {
  List<Currency> dropdownItems = [
    Currency(currencyName: "FOO", currencyInUSD: 22.0),
    Currency(currencyName: "BOO", currencyInUSD: 22.0),
    Currency(currencyName: "SOO", currencyInUSD: 22.0),
  ];
  Currency dropdownValue;

  Color color = Colors.green;
  MainModel model = MainModel();

  @override
  void initState() {
    super.initState();
    dropdownValue = dropdownItems[0];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      ///A Builder has been added so the context contains the Scaffold which
      ///is required to create a SnackBar
      floatingActionButton: Builder(
        builder: (context) {
          return FloatingActionButton(
            child: Icon(
              Icons.add,
              color: kIconColor,
            ),
            onPressed: () {
              print(dropdownItems.map((item) {
                return DropdownMenuItem(
                  value: item,
                  child: Text(item.currencyName),
                );
              }).toList());
              setState(() {
                Scaffold.of(context).showSnackBar(
                  SnackBar(
                    content: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        Text('Which currency do you want to add to your list?'),
                        SizedBox(
                          height: 25.0,
                        ),
                        DropdownButton<Currency>(
                          items: dropdownItems
                              .map<DropdownMenuItem<Currency>>((item) {
                            return DropdownMenuItem(
                              value: item,
                              child: Text(item.currencyName),
                            );
                          }).toList(),
                          value: dropdownValue,
                          onChanged: (value) {
                            setState(() {
                              dropdownValue = value;
                              ScaffoldState().removeCurrentSnackBar(
                                  reason: SnackBarClosedReason.remove);
                              print("SnackBar removed");
                            });
                          },
                        )
                      ],
                    ),
                    action: SnackBarAction(
                      label: 'Cancel',
                      onPressed: () {
                        print('Cancel');
                      },
                    ),
                  ),
                );
              });
            },
          );
        },
      ),
    );
  }
} 

最佳答案

至于 2021 年,您应该使用

ScaffoldMessenger.of(context).removeCurrentSnackBar()

而不是

Scaffold.of(context).removeCurrentSnackBar();

此功能在 Flutter v1.23.0-14.0.pre 后已弃用。

关于flutter - 无法通过调用 ScaffoldState().removeCurrentSnackBar() 删除当前 snackbar ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60592204/

相关文章:

flutter - 如何使用 flutter 检查输入的电话号码是否有效?

flutter - 如何为外部类创建页面 View

flutter - Charts_flutter软件包中的图形中的domainFn和measureFn是什么?

flutter - 将 Uint8List 转换为 flutter web 中的文件

flutter - SimpleDialog Flutter 中的 Snackbar

dart - 无法在 onDismissible 中删除

flutter - 无法在 flutter 图像小部件中打开大尺寸(500MB)图像

android - 如何在flutter中实现 float Snackbar动画?

android - 如何自定义snackBar 的布局?

flutter - 使用不包含 Scaffold 的上下文调用 Scaffold.of()