Flutter 在Flatter中从PageRoute弹出时,在父屏幕中设置状态栏颜色

Flutter 在Flatter中从PageRoute弹出时,在父屏幕中设置状态栏颜色,flutter,Flutter,请看代码: 导入“包装:颤振/材料.省道”; 导入“包:flifter/services.dart”; void main()=>runApp(App()); 类应用程序扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回材料APP(标题:“测试”, 主题:主题数据(原始样本:颜色。蓝灰色), 主页:Scaffold(主体:MyWidget()), ); } } 类MyWidget扩展了StatefulWidget{ @凌驾 _MyWidgetState createState()=>

请看代码:

导入“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
void main()=>runApp(App());
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料APP(标题:“测试”,
主题:主题数据(原始样本:颜色。蓝灰色),
主页:Scaffold(主体:MyWidget()),
);
}
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
SystemChrome.setSystemUIOverlayStyle(systemUIOverlyStyle.dark);//仅在最初工作,但在从PageRoute返回时不起作用
返回列(
儿童:[
容器(高度:80.0,颜色:Colors.orange),
const SizedBox(高度:100.0),
RaisedButton(子项:文本('Next'),
onPressed:(){Navigator.push(上下文,MaterialPage路由(生成器:(上下文)=>NewScreen())。然后((值){
_refreshSystemStatusColor();//不工作
});},
)
],
);
}
void _refreshSystemStatusColor(){
设置状态(){
SystemChrome.SetSystemEmioVerlayStyle(SystemUiOverlayStyle.dark);
});
}
}
类NewScreen扩展StatefulWidget{
@凌驾
_NewScreenState createState()=>\u NewScreenState();
}
类_NewScreenState扩展状态{
@凌驾
无效处置(){
//SystemChrome.setSystemUIOverlayStyle(systemUIOverlyStyle.dark);//只有这一行有效。我不想将所有小部件都转换为StatefulWidget
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
SystemChrome.SetSystemTimeIOVerlayStyle(SystemUIOverlyStyle.dark);//不工作
返回未来值(true);
},
子级:脚手架(appBar:appBar())
);
}
}
您可以看到,我尝试了三种方法来设置系统状态栏字体颜色:

  • Navigator.push()。然后((值){u refreshSystemStatusColor();});}
  • onWillPop:(){SystemChrome.setSystemTimeIOverLayStyle(systemUIOverlyStyle.dark);返回Future.value(true);}
  • 关于dispose()
到目前为止,前两种方法都不起作用,只有将其设置为
dispose()
才起作用。但我觉得这真的很难看。我不想把我所有的小部件都转换成StatefulWidget,只是为了这个目的


有谁有更好的解决办法吗?非常感谢

使用Scaffold时,可以使用AnnotatedRegion设置系统覆盖样式。当您将脚手架与应用程序栏一起使用时,您可以设置属性亮度,以更改系统覆盖样式。这里是一个例子,没有必要使用StatefulWidgets

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "test",
      theme: ThemeData(primarySwatch: Colors.blueGrey),
      home: MyWidget(),
    );
  }
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  Widget build(BuildContext context) {
    SystemUiOverlayStyle _currentStyle = SystemUiOverlayStyle.dark;
    return Scaffold(
        body: AnnotatedRegion(
      value: _currentStyle,
      child: Column(
        children: <Widget>[
          Container(height: 80.0, color: Colors.orange),
          const SizedBox(height: 100.0),
          RaisedButton(
            child: Text('Next'),
            onPressed: () {
              Navigator.push(context,
                  MaterialPageRoute(builder: (context) => NewScreen()));
              //     .then((value) {
              //   _refreshSystemStatusColor(); // doesn't work
              // });
            },
          )
        ],
      ),
    ));
  }
}

class NewScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
        return Future.value(true);
      },
      child: Scaffold(
          appBar: AppBar(
            brightness: Brightness.light,
          ),
          body: Container(
            child: Text('Hello'),
          )),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
void main()=>runApp(App());
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“测试”,
主题:主题数据(原始样本:颜色。蓝灰色),
主页:MyWidget(),
);
}
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
SystemUIOverlyStyle\u currentStyle=SystemUIOverlyStyle.dark;
返回脚手架(
正文:德雷吉翁(
值:_currentStyle,
子:列(
儿童:[
容器(高度:80.0,颜色:Colors.orange),
const SizedBox(高度:100.0),
升起的按钮(
子项:文本('Next'),
已按下:(){
Navigator.push(上下文,
MaterialPage路由(生成器:(上下文)=>NewScreen());
//.然后((值){
//_refreshSystemStatusColor();//不工作
// });
},
)
],
),
));
}
}
类NewScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
返回未来值(true);
},
孩子:脚手架(
appBar:appBar(
亮度:亮度,亮度,
),
主体:容器(
child:Text('Hello'),
)),
);
}
}
希望这有帮助