Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 导航到新屏幕时的状态栏颜色_Dart_Flutter - Fatal编程技术网

Dart 导航到新屏幕时的状态栏颜色

Dart 导航到新屏幕时的状态栏颜色,dart,flutter,Dart,Flutter,我在第一个屏幕的build()方法中使用以下方法来更改状态栏的颜色,效果很好 // 1st screen's build() method SystemChrome.setSystemUIOverlayStyle( SystemUiOverlayStyle(statusBarColor: Colors.green), ); 但是,当我导航到第二个屏幕时,第二个屏幕上也会出现第一个屏幕状态栏颜色。在第二屏的build()方法中,我使用了不同颜色的相同代码 // 2nd screen's bu

我在第一个屏幕的
build()
方法中使用以下方法来更改状态栏的颜色,效果很好

// 1st screen's build() method
SystemChrome.setSystemUIOverlayStyle(
  SystemUiOverlayStyle(statusBarColor: Colors.green),
);
但是,当我导航到第二个屏幕时,第二个屏幕上也会出现第一个屏幕状态栏颜色。在第二屏的
build()
方法中,我使用了不同颜色的相同代码

// 2nd screen's build() method
SystemChrome.setSystemUIOverlayStyle(
  SystemUiOverlayStyle(statusBarColor: Colors.red),
);

在执行
导航器之前,请尝试设置第二个状态栏的颜色。将
推到第二个屏幕。像这样

SystemChrome.setSystemUIOverlayStyle(
  SystemUiOverlayStyle(statusBarColor: Colors.red),
);
await Navigator.of(context).push(MaterialPageRoute(
  builder: (context) => SecondScreen();
));

在生命周期与所需系统UI样式匹配的代码中调用此API。例如,要在新页面上更改系统UI样式,请考虑在推/弹出新Page时调用。
我有一个类似的问题,并找到了解决办法。最好的方法是使用Scaffold下的AnnotatedRegion而不使用AppBar
AppBar
为空),而不是使用函数
SystemChrome.SetSystemEmioVerlayStyle()
来设置系统ui颜色

比如:

脚手架(
正文:德雷吉翁(
值:SystemUIOverlyStyle(状态栏颜色:Colors.red)
子项:MyBodyWidget(),
),
);
顺便说一句,
可以是
SystemUiOverlayStyle.dark
SystemUiOverlayStyle.light
,如果您只需要深色或浅色覆盖而不需要颜色。请注意,到目前为止,
statusBarColor
仅在Android中有效

还要注意,
appBar
必须为空(不存在),才能使AnnotatedRegion正常工作。您可以在MyBodyWidget中轻松编写自己的MyAppBar小部件,它有一个简单的解决方案。 这是几种方法中的一种

首先,Saffold中的顶级父页面buildcontext SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor:Colors.transparent,如果在执行导航弹出之前将其改回绿色会怎么样?一个问题,目前我有默认的后退按钮,但这样我必须使用WillPopScope处理所有事情。这不是一个好方法,但必须这样做。你能建议一个更好的方法吗?@应用程序栏包含一个“前导”属性,给该属性一个arrow back图标,并给它一个带有Navigator.of(context.pop()的手势检测器按那个按钮。@WaleedArshad我知道,但我要求的是其他东西。一旦我们离开页面,如何恢复到原始颜色?@lgvaz我已经有一段时间没有尝试过这种技术了。但我认为你不需要恢复。AnnotatedRegion只影响当前的Scaffold实例。离开页面后,系统ui颜色将我取决于其他脚手架的设置。如果我错了,请纠正我。我会在有时间时运行一些代码测试。也许我做错了什么,那么我运行的测试不会恢复到原始颜色。@lgvaz您是对的。如果您更改子屏幕中的状态栏颜色,然后更改Navigator.pop到其父屏幕,AppBar()不会重置状态栏颜色。因此,要使其工作,您必须使导航器堆栈中的所有父页面路由使用AnnotatedRegion。我检查了我以前的项目,该项目具有底部选项卡导航,并使用AnnotatedRegion作为底部选项卡,该选项卡的根屏幕使用AnnotatedRegion,其所有子屏幕使用AnnotatedDregion也是。但这不会影响其他底部选项卡。是的,在我的情况下,让所有其他页面使用AnnotedRegion会太麻烦。有没有办法在弹出路线时更改颜色?