在我的 flutter 应用程序中,屏幕 A 没有 AppBar。
所以我打电话SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark)
在构建中。
在另一个具有 AppBar 的屏幕 B 被推送然后弹出后,
屏幕 A 有灯光状态栏。
我希望系统 UI 在弹出屏幕时返回到原始设置。
这背后的原因是您的新屏幕将有自己的生命周期,因此状态栏可能会使用另一种颜色。
您可以致电SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark)
在你的initState
方法,但在弹出堆叠屏幕后不会触发。这里有两个问题,但是您可以在从屏幕返回后再次回调该问题pop()
。够简单吧?差不多了。
当您按下屏幕上的后退按钮时AppBar
小部件,将立即从您的Navigator.of(context).push(someroute)
,即使导航动画仍在堆叠屏幕中渲染。
为了解决这个问题,您可以添加一点“调整”,在 500 毫秒后再次设置状态栏颜色,这应该足以让动画完全完成。所以,你会想要或多或少像这样的东西:
class HomeScreen extends StatefulWidget {
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
_updateAppbar();
super.initState();
}
void _updateAppbar() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
}
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
child: Text('Navigate to second screen'),
onPressed: () => Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) => SecondScreen()))
.whenComplete(() => Future.delayed(Duration(milliseconds: 500)).then((_) => _updateAppbar()))));
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
);
}
}
虽然这有效,但我仍然很想知道是否有人知道更好的方法来处理这个问题并将状态栏颜色绑定到每个屏幕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)