在我的Flatter应用程序中,屏幕A没有AppBar.

在另一个具有AppBar的屏幕B被推送然后弹出之后, 屏幕A有亮起的状态栏.

当屏幕弹出时,我希望系统UI返回到原始设置.

GIF

推荐答案

这背后的原因是,您的新屏幕将有其自己的生命周期,因此可能会使用另一种 colored颜色 作为状态栏.

您可以在initState方法中调用SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark),但在弹出堆叠屏幕后不会触发.这里有两个问题,但是,您可以在从屏幕pop()返回后再次调用.够简单吧?快到了.

当您按下AppBar小部件上的后退按钮时,将立即从Navigator.of(context).push(someroute)返回,即使导航动画仍在从堆叠屏幕渲染.

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(),
    );
  }
}

虽然这个方法很有效,但我仍然很想知道是否有人知道更好的方法来处理这一问题,并将状态栏 colored颜色 绑定到每个屏幕上.

Dart相关问答推荐

' dart run '记录失败'编译未产生任何结果.'并崩溃,并出现PathNotFoundResponse

有什么区别!并且 ! 在 Dart 中?

Flutter - 删除元素时 UI 未正确更新

Card宽度与父级匹配

Flutter Expansion Tile -- 标题 colored颜色 变化和尾随动画箭头 colored颜色 变化

Flutter 使用拖动和按钮单击扩展 TextField

如何解决此Cannot enable MyLocation layer as location permissions are not granted?

如何限制TextSpan小部件的文本长度

Angular 2,使用 body 作为根 Select 器,而不是 my-app

有没有办法知道我的Flatter应用程序使用的是哪个Android API版本?

摆动中的可滚动导轨

找不到正确的提供程序-Flutter

Flutter url_launcher 未在发布模式下启动 url

Flutter 示例中的流布局

如何判断switch/case中对象的类型?

如何在 Ubuntu 网络服务器上为 Dart 安装 pub(命令行使用)

函数调用前的感叹号是什么意思?

如何在 Dart 中扁平化map列表?

在 Dart 中获取集合/列表中数字总和的最简洁方法是什么?

如何在 Dart 中将 double 转换为 int?