这是我用来在暗模式和亮模式之间切换的代码。一切正常,但是当我的小部件子树包含“Sliver App Bar”时,导航栏和状态栏的颜色不会自动改变。
PS:只要我删除 Sliver 应用栏,一切正常
.
我用来在主题之间切换的代码。
if (MediaQuery.of(context).platformBrightness == Brightness.light) {
setState(() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(
statusBarColor: Color(0xDCDCDCDC).withOpacity(1),
statusBarIconBrightness: Brightness.dark,
systemNavigationBarColor: Color(0xFAFAFAFA),
systemNavigationBarIconBrightness: Brightness.dark,
));
});
}
else {
setState(() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark.copyWith(
statusBarColor: Color(0x000).withOpacity(1),
statusBarIconBrightness: Brightness.light,
systemNavigationBarColor: Colors.black.withAlpha(234),
systemNavigationBarIconBrightness: Brightness.light,
));
});
}
.
我用于 Sliver App Bar 的代码
class _HomeScreen extends State<HomeScreen>{
@override
Widget build(BuildContext context) {
return CustomScrollView(
physics: BouncingScrollPhysics(),
slivers: <Widget>[
SliverAppBar(
title: Text(
"Home",
style: Theme.of(context).textTheme.title.copyWith(fontWeight: FontWeight.w600),
),
floating: true,
backgroundColor: Theme.of(context).primaryColorDark,
elevation: 3,
forceElevated: true,
leading: Padding(
padding: EdgeInsets.only(
left: 16,
top: 10,
bottom: 10
),
child: ClipOval(
clipper: ProfileClipper(),
child: Image.network(
'https://images.unsplash.com/photo-1511447333015-45b65e60f6d5?ixlib=rb-1.2.1&w=1000&q=80',
fit: BoxFit.cover,
loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent loadingProgress) {
if (loadingProgress == null)
return child;
return Center(
child: CircularProgressIndicator(
value: loadingProgress.expectedTotalBytes != null
? loadingProgress.cumulativeBytesLoaded / loadingProgress.expectedTotalBytes
: null,
),
);
},
),
),
),
actions: <Widget>[
Padding(
padding: EdgeInsets.only(
right: 8
),
child: IconButton(
icon: Icon(
Icons.more_vert
),
onPressed: () {},
),
)
],
),
],
);
}
}