没有 AppBar 的 Flutter 布局
Flutter layout without AppBar
我需要一个没有应用栏的布局,所以最明显的方法是只省略 Scaffold
上的 appbar
标签,但如果我这样做,内容就会放在状态栏下面,比如这个:
如您所见,我的蓝色容器从状态栏下方开始,情况不应该如此,因此我不得不手动设置不太好的容器边距,这是结果:
我感觉设备的状态栏可能具有不同的高度,因此将我的上边距设置为固定大小可能无法在其他设备上正确呈现。有没有一种方法可以让 flutter 自动将我的内容定位在状态下方,就像将 AppBar
很好地定位在状态栏下方一样。
这是我的脚手架代码:
return new Scaffold(
body: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new HeaderLayout(),
],
),
);
这是我的 header 容器:
class HeaderLayout extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Container(
color: Colors.blue,
margin: const EdgeInsets.only(top: 30.0),
child: new SizedBox(
height: 80.0,
child: new Center(
child: new Text(
"Recommended Courses",
style: new TextStyle(color: Colors.white),
),
),
)
);
}
}
您可以使用 MediaQuery
获得 OS 填充。
你必须更换你的
margin: const EdgeInsets.only(top: 30.0),
来自
margin: MediaQuery.of(context).padding,
另一种解决方案是将您的内容包装在 SafeArea
中。这基本上做同样的事情。
用 SafeArea 包裹你的专栏
body: new SafeArea(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new HeaderLayout(),
],
)
) ,
SafeArea 是一个小部件,它通过足够的填充来插入其子部件以避免操作系统的入侵。
例如,这将使子项缩进足够多以避免屏幕顶部的状态栏。
void main() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
systemNavigationBarColor: Colors.blue, // navigation bar color
statusBarColor: Colors.pink, // status bar color
));
}
我需要一个没有应用栏的布局,所以最明显的方法是只省略 Scaffold
上的 appbar
标签,但如果我这样做,内容就会放在状态栏下面,比如这个:
如您所见,我的蓝色容器从状态栏下方开始,情况不应该如此,因此我不得不手动设置不太好的容器边距,这是结果:
我感觉设备的状态栏可能具有不同的高度,因此将我的上边距设置为固定大小可能无法在其他设备上正确呈现。有没有一种方法可以让 flutter 自动将我的内容定位在状态下方,就像将 AppBar
很好地定位在状态栏下方一样。
这是我的脚手架代码:
return new Scaffold(
body: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new HeaderLayout(),
],
),
);
这是我的 header 容器:
class HeaderLayout extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new Container(
color: Colors.blue,
margin: const EdgeInsets.only(top: 30.0),
child: new SizedBox(
height: 80.0,
child: new Center(
child: new Text(
"Recommended Courses",
style: new TextStyle(color: Colors.white),
),
),
)
);
}
}
您可以使用 MediaQuery
获得 OS 填充。
你必须更换你的
margin: const EdgeInsets.only(top: 30.0),
来自
margin: MediaQuery.of(context).padding,
另一种解决方案是将您的内容包装在 SafeArea
中。这基本上做同样的事情。
用 SafeArea 包裹你的专栏
body: new SafeArea(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new HeaderLayout(),
],
)
) ,
SafeArea 是一个小部件,它通过足够的填充来插入其子部件以避免操作系统的入侵。 例如,这将使子项缩进足够多以避免屏幕顶部的状态栏。
void main() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
systemNavigationBarColor: Colors.blue, // navigation bar color
statusBarColor: Colors.pink, // status bar color
));
}