Flutter状态栏如何动态更改颜色

4
大多数关于这个主题的答案都建议采用以下解决方案。
import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarColor(Colors.white);

但根据这个答案

构建方法的设计应该是纯净的/没有副作用。

提出的解决方案有一个缺点 - 如果我必须根据当前屏幕更改状态颜色,则不起作用。

有办法可以处理吗?


你想要什么?根据当前路由更改状态栏颜色吗? - Hugo Passos
是的,正是我想要的。 - Ilya Sulimanov
为什么不在每个想要不同颜色的“Widget”的“initState”中调用“setStatusBarColor”?实际上,在“build”中调用它没有意义。 - Hugo Passos
1
当我进行推入/弹出操作时,有些情况下它无法正常工作。 - Ilya Sulimanov
有道理。等一下,我有东西给你。 - Hugo Passos
1个回答

9
您可以使用AnnotatedRegion为每个路由指定不同的statusBarColor
class MyApp extends StatelessWidget {
  Map<String, WidgetBuilder> get routes {
    return {
      '/': (context) {
        return AnnotatedRegion<SystemUiOverlayStyle>(
          value: const SystemUiOverlayStyle(statusBarColor: Colors.blue),
          child: Scaffold(body: Home()),
        );
      },
      '/foo': (context) {
        return AnnotatedRegion<SystemUiOverlayStyle>(
          value: const SystemUiOverlayStyle(statusBarColor: Colors.red),
          child: Scaffold(body: Foo()),
        );
      },
    };
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: routes,
    );
  }
}

非常有用的动态更改主题,非常感谢! - rubStackOverflow
它成功地改变了导航栏的颜色,但由于第一个屏幕设置的状态栏颜色仍然保持不变,原因不明。 - Shashank Rawat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接