App在很多情况下由于各种需求需要自定义标题栏,而在能够构建Android和IOS应用的Flutter中,如果不在Scaffold中使用AppBar会发现默认是沉浸式。
猜想:我们使用自定义标题栏好像需要知道状态栏的高度,我看到网上很多人想要自定义标题栏,却老是去找怎么获取状态栏的高度解惑:其实并不用获取状态栏的高度,你想AppBar也是状态栏,它也需要知道状态栏的高度,它需要说明Flutter已经帮我们获取到了
接下来一步一步来看
一、怎么自定义标题栏
轻车熟路的就直接看第二步
自定义MAppBar类
class MAppBar extends StatefulWidget implements PreferredSizeWidget { MAppBar({@required this.child}) : assert(child != null); final Widget child; @override Size get preferredSize { return new Size.fromHeight(56.0); } @override State createState() { return new MAppBarState(); }}class MAppBarState extends State{ @override Widget build(BuildContext context) { return widget.child; }}
使用
class GoodsPageState extends State{ @override Widget build(BuildContext context) { return new Scaffold( appBar: new MAppBar( child: new Text("我是标题"), ), body: new Text("我是内容"), ); }}
效果
二、增加状态栏
修改代码
class MAppBarState extends State{ @override Widget build(BuildContext context) { return new SafeArea( top: true, child: widget.child, ); }}
说明
/// Whether to avoid system intrusions at the top of the screen, typically the/// system status bar.final bool top;
效果
效果已经很明显了