颤振状态栏动态更改颜色

时间:2019-05-24 21:44:26

标签: flutter dart

有关此主题的大多数答案都建议采用以下解决方案。

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);

但是根据此answer

  

构建方法的设计方式应使其纯净/无副作用。

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

有没有办法处理它?

1 个答案:

答案 0 :(得分:1)

您可以使用AnnotatedRegion为每个路线指定不同的statusBarColor

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: createRoutes(),
    );
  }

  Map<String, WidgetBuilder> createRoutes() {
    return {
      '/': (BuildContext context) {
        return AnnotatedRegion<SystemUiOverlayStyle>(
          value: const SystemUiOverlayStyle(statusBarColor: Colors.blue),
          child: Scaffold(body: Home()),
        );
      },
      '/foo': (BuildContext context) {
        return AnnotatedRegion<SystemUiOverlayStyle>(
          value: const SystemUiOverlayStyle(statusBarColor: Colors.red),
          child: Scaffold(body: Foo()),
        );
      },
    };
  }
}