我想展示一个Snackbar。
在我点击手势检测器后,这个小吃有两个按钮。
问题是 Snackbar 出现了几秒钟然后就消失了。
所以我有两个问题:
- 如何防止 Snackbar 在用户采取行动并点击按钮之前消失?
- 此外,Snackbar 具有整个屏幕的高度。
如何使它在屏幕底部具有特定的高度?
您可以使用长时间 duration
HomeScreen.scaffoldKey.currentState.showSnackBar(
SnackBar(duration: const Duration(minutes: 5), content: Text(message)));
另请参见https://material.io/design/components/snackbars.html#behavior
出现和消失
Snackbars会突然出现,无需用户交互。它们会自动在屏幕上停留至少4秒,最多10秒后消失。
onPressed: ...
中,您可以调用 ScaffoldState
的 hideCurrentSnackBar(...)
方法来移除当前的 Snackbar。文档链接:https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html - Günter Zöchbauer我写了一篇关于如何解决这个问题的小文章:https://dev.to/eyewritecode/persisting-flutter-snackbar-until-user-interacts-with-it-2583
基本上,你需要设置一个很长的持续时间。
duration: Duration(days: 1)
每当您想隐藏它时,请调用以下内容。
Scaffold.of(context).hideCurrentSnackBar();
您可以通过设置不同的最大行数(通常默认为2)来更改 Snackbar 的高度:
您可以像这样进行操作(例如,设置为10行):
View snackbarView = snackbar.getView();
TextView snackTextView = (TextView) snackbarView.findViewById(
com.google.android.material.R.id.snackbar_text);
snackTextView.setMaxLines(10);
snackbar.show();
final Snackbar snack = Snackbar.make(findViewById(android.R.id.content), helpMsg, Snackbar.LENGTH_INDEFINITE);
snack.setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Respond to the click dismiss is automatic with this
}
});
View view = snack.getView();
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show();
android
或java
标签。 - Andrii Turkovskyi