Flutter 状态栏动态变色

Ily*_*lya 3 dart flutter

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

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);
Run Code Online (Sandbox Code Playgroud)

但根据这个答案

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

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

有什么办法可以处理吗?

Hug*_*sos 5

您可以使用为每个路由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,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)