我该如何使用Android Studio和flutter更改系统NavBar?
我猜它不在main.dart中,我需要通过Android系统文件来实现,但是当我尝试编辑style.xml时,主题编辑器不允许我编辑任何颜色。
任何帮助都将不胜感激,我想要一个浅色的NavBar来配合一个浅色的底部AppBar。
注意:这需要一个更近期的Flutter版本,因为它引用了在2018年6月添加的API。
您可以使用默认构造函数创建自定义SystemUiOverlayStyle
。系统导航栏的颜色在那里定义。但是,为了避免设置大量的空值,请使用copyWith
方法从现有的浅色/深色主题中更新值。
const mySystemTheme= SystemUiOverlayStyle.light
.copyWith(systemNavigationBarColor: Colors.red);
您可以使用SystemChrome
静态方法来命令式地设置系统导航栏颜色。
SystemChrome.setSystemUiOverlayStyle(mySystemTheme);
但是,如果您有多个小部件设置了这个值,或者使用了材料AppBar或Cupertino NavBar,它们可能会覆盖您的值。相反,您可以使用新的AnnotatedRegion API来告诉Flutter在某些小部件可见时自动切换到这个样式。例如,如果您想在特定路线中任何时候使用上面的主题,您可以像这样将其包装在一个AnnotatedRegion小部件中。
Widget myRoute(BuildContext context) {
return new AnnotatedRegion<SystemUiOverlayStyle>(
value: mySystemTheme,
child: new MyRoute(),
);
}
如果您弹出路由,则此操作不会将您的主题更改回先前的值。
使用systemOverlayStyle
属性
class MyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
systemOverlayStyle: SystemUiOverlayStyle(
systemNavigationBarColor: Colors.blue, // Navigation bar
statusBarColor: Colors.pink, // Status bar
),
),
);
}
}
您可以简单地调用SystemChrome.setSystemUIOverlayStyle
:
import 'package:flutter/services.dart'
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
AnnotatedRegion
作为Scaffold
的父级,并定义statusBarColor: Colors.transparent
,但它不起作用,似乎AppBar
总是优先。 - Michel Feinstein