如何在单击按钮时关闭 Snackbar?

问题描述 投票:0回答:4

我有一个

SnackBar
告诉我,当我单击其上的按钮时,我需要将其关闭。我尝试编写
ScaffoldMessenger.of(context).hideCurrentSnackBar()
方法,但它给出了错误,可能是因为我在 showSnackBar 方法中调用了它。告诉我,如何通过单击“刷新”按钮来关闭
SnackBar

ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  duration: const Duration(seconds: 3),
                  backgroundColor: Colors.transparent,
                  elevation: 0,
                  content: SystemMessagesSnackBar(
                    message: 'No internet access. Check your connection',
                    textButton: 'Refresh',
                    onPressed: ScaffoldMessenger.of(context).hideCurrentSnackBar(),
                    icon: SvgPicture.asset(constants.Assets.no_connection),
                  ),
                ),
              );

小吃店

class SystemMessagesSnackBar extends StatelessWidget {
  const SystemMessagesSnackBar(
      {Key? key,
      required this.message,
      required this.textButton,
      this.icon,
      this.onPressed})
      : super(key: key);

  final String message;
  final String textButton;
  final SvgPicture? icon;
  final Function()? onPressed;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 80,
      child: Stack(
        children: [
          Container(
              padding: const EdgeInsets.only(left: 16),
              height: 60,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(100),
                color: constants.Colors.purpleDark,
              ),
              child: Row(
                children: [
                  icon != null
                      ? Expanded(
                          flex: 1,
                          child: icon!,
                        )
                      : const SizedBox(width: 8),
                  Expanded(
                    flex: 4,
                    child: Text(
                      message.toString(),
                      style: constants.Styles.smallBookTextStyleWhite,
                      textAlign: TextAlign.start,
                    ),
                  ),
                  TextButton(
                    onPressed: onPressed,
                    child: Text(
                      textButton,
                      style: constants.Styles.tinyBookTextStyleWhite,
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}
flutter dart
4个回答
2
投票

向脚手架添加一把钥匙并使用

hideCurrentSnackBar

scaffoldKey.currentState.hideCurrentSnackBar();

或者你也可以使用

ScaffoldMessenger.of(context).hideCurrentSnackBar()

1
投票

当你做的时候

onPressed: myMethod(),
是直接调用方法,

你可以做

content: SystemMessagesSnackBar(
  message: 'No internet access. Check your connection',
  textButton: 'Refresh',
  onPressed: ScaffoldMessenger.of(context).hideCurrentSnackBar,
),

onPressed: () =>
    ScaffoldMessenger.of(context).hideCurrentSnackBar(),

1
投票

你可以用这个

final Snackbar snackBar = Snackbar.make(findViewById(android.R.id.content), "Snackbar Message", Snackbar.LENGTH_LONG);
 snackBar.setAction("Discard", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Call your action method here
            snackBar.dismiss();
        }
    });

snackBar.show();

0
投票

尝试使用下面的代码片段

ScaffoldMessenger.of(context).hideCurrentSnackBar();
© www.soinside.com 2019 - 2024. All rights reserved.