当我的应用重新聚焦时,如何更改导航栏图标的颜色?

时间:2019-12-13 21:32:19

标签: android flutter

在我的应用中,我可以将状态栏和导航颜色设置得很好。但是,我有多个屏幕,例如,当用户按下设备上的主屏幕按钮,然后稍后恢复应用程序时,如何在恢复时更改导航栏的颜色?

我的具体问题是我的导航栏背景颜色为白色,当我退出应用程序并稍后恢复运行时,图标变为白色,这使得它们无法看到。这是我的构建方法(去除了不必要的代码)。除了这里,我什么都不会改变颜色。

virtualenv-wrapper

下面是带有白色导航栏图标颜色的我的应用图片。actual result

这是它的外观图像expected result

2 个答案:

答案 0 :(得分:0)

Benjamin,我能够在Pixel 2上重新创建问题。这很奇怪,这一定是系统错误,但是您可以通过在应用从后台恢复运行时再次设置底部系统导航菜单颜色来解决此问题。为此,您需要按如下所示检查AppLifeCycleState

class MyApp extends StatefulWidget {
  @override
  MyAppState createState() => MyAppState();
}

class MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
        statusBarColor: Colors.white,
        systemNavigationBarColor: Colors.white,
        systemNavigationBarIconBrightness: Brightness.dark,
      ));
    }
  }

  @override
  initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.white,
      systemNavigationBarColor: Colors.white,
      systemNavigationBarIconBrightness: Brightness.dark,
    ));
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        elevation: 0,
        title: Text("App", style: TextStyle(color: Colors.black)),
        centerTitle: true,
        backgroundColor: Colors.white,
        brightness: Brightness.light,
        actions: <Widget>[
          Icon(
            Icons.info_outline,
            color: Colors.grey,
          )
        ],
      ),
      body: Center(
        child: Column(
          children: <Widget>[],
        ),
      ),
    ));
  }
}

demo

答案 1 :(得分:0)

我遇到了同样的问题。我的解决方法是下面代码中的最后一个 if 语句

FlutterStatusbarcolor.setStatusBarColor(
  Theme.of(context).colorScheme.surface,
);

FlutterStatusbarcolor.setNavigationBarColor(
  Theme.of(context).colorScheme.background,
);

if (MediaQuery.platformBrightnessOf(context) == Brightness.dark) {
  FlutterStatusbarcolor.setNavigationBarWhiteForeground(true);
} else
  FlutterStatusbarcolor.setNavigationBarWhiteForeground(false);