我有一个
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,
),
),
],
),
),
),
],
),
);
}
}
向脚手架添加一把钥匙并使用
hideCurrentSnackBar
scaffoldKey.currentState.hideCurrentSnackBar();
或者你也可以使用
ScaffoldMessenger.of(context).hideCurrentSnackBar()
当你做的时候
onPressed: myMethod(),
是直接调用方法,
你可以做
content: SystemMessagesSnackBar(
message: 'No internet access. Check your connection',
textButton: 'Refresh',
onPressed: ScaffoldMessenger.of(context).hideCurrentSnackBar,
),
或
onPressed: () =>
ScaffoldMessenger.of(context).hideCurrentSnackBar(),
你可以用这个
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();
尝试使用下面的代码片段
ScaffoldMessenger.of(context).hideCurrentSnackBar();