【发布时间】:2020-02-09 11:20:15
【问题描述】:
【问题讨论】:
标签: flutter floating-action-button snackbar
【问题讨论】:
标签: flutter floating-action-button snackbar
你不能设置它!它与从底部加上SnackBar 高度相同。
但是如果你想调整它,你可以不使用 Scaffold 中的 FAB,而是将 body 设置为 Stack,最新的层是你的 FAB 并将它包裹在 AnimatedPositioned 中,这样你就可以对其进行动画处理与底部的适当距离。
【讨论】:
你试过了吗
floatingActionButton: Column(mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [
FloatingActionButton(
onPressed: _doOrder,
mini: false,
elevation: 10,
child: Icon(EvaIcons.shoppingBagOutline),
),
Container(
height: 50,
)
]),
【讨论】:
如果您希望FloatingActionButton 始终具有底部填充,您可以使用Padding 小部件将其包裹起来,如下所示:
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Padding(
padding: EdgeInsets.only(bottom: 40.0),
child: FloatingActionButton(
onPressed: () {},
),
),
appBar: AppBar(
title: Text('SnackBar'),
),
body: Builder(
builder: (context) => RaisedButton(
onPressed: () => _displaySnackBar(context),
child: Text('Show SnackBar'),
),
),
);
}
如果您希望 FloatingActionButton 在 SnackBar 可见时具有新的填充,您可以在显示 SnackBar 时更改填充,如下所示:
double _fabPadding = 0.0;
_displaySnackBar(BuildContext context) {
final snackBar = SnackBar(content: Text('SnackBar'));
setState(() {
_fabPadding = 40.0;
});
Scaffold.of(context).showSnackBar(snackBar).closed.then((_) {
setState(() {
_fabPadding = 0.0;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Padding(
padding: EdgeInsets.only(bottom: _fabPadding),
child: FloatingActionButton(
onPressed: () {},
),
),
appBar: AppBar(
title: Text('SnackBar'),
),
body: Builder(
builder: (context) => RaisedButton(
onPressed: () => _displaySnackBar(context),
child: Text('Show SnackBar'),
),
),
);
}
编辑:如果你想避免SnackBar推动FloatingActionButton的位置,你可以将SnackBar的行为属性设置为SnackBarBehavior.floating
floating → const SnackBarBehavior 这种行为会导致 SnackBar 显示在 Scaffold 中的其他小部件上方。这包括成为 显示在 BottomNavigationBar 和 FloatingActionButton 上方。
【讨论】:
尝试设置:行为:SnackBarBehavior.floating 它可能有效
SnackBar(behavior: SnackBarBehavior.floating, content: Padding(child: Text(message),
padding: EdgeInsets.only(bottom: 30),)));
【讨论】:
您可以使用钥匙将小吃店连接到脚手架。
例如:-
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
void showSnackBar(String text) {
_scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text(
text,
textAlign: TextAlign.center,
),
duration: Duration(seconds: 0, milliseconds: 750),
));
}
然后在脚手架上添加key:
Scaffold(
key: _scaffoldKey,
...
);
您现在可以从任何地方调用此函数。
【讨论】: