alibaba / flutter_boost

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts
https://github.com/alibaba/flutter_boost
MIT License
6.98k stars 1.23k forks source link

flutter_boost-3.0-beta.6打开两次flutter页面,顶部状态栏会变色 #1060

Open HXiaoMing opened 3 years ago

HXiaoMing commented 3 years ago

在Android手机上,运行flutter_boost-3.0-beta.6 demo 第一次点击 open_custom_view_tab 顶部状态栏的文字是黑色(WiFi,电量那些信息)。 第二次点击 open_custom_view_tab 顶部状态栏的文字自动变成白色。 结果 必现。

如果将AppBar的brightness赋值成Brightness.light,然后打开该页面两次就会出现上述情况。顶部状态栏会变色。

jingchao920315 commented 3 years ago

我的flutterA页面 顶部状态栏的文字是黑色 ,在flutterA页面跳转到flutterB页面,顶部状态栏的文字变白色了 ,两个页面的AppBar均使用相同的Widget 以及initState使用的也是相同的

liubing1007 commented 3 years ago

1

Luy7788 commented 3 years ago

也遇到了相同情况

liubing1007 commented 3 years ago

我修复了,我一会把代码贴上去

liubing1007 commented 3 years ago

@override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { SystemChrome.setSystemUIOverlayStyle( SystemUiOverlayStyle( systemNavigationBarColor: ColorTools.color_F4F4F4, systemNavigationBarDividerColor: ColorTools.color_F4F4F4, statusBarColor: Colors.transparent, systemNavigationBarIconBrightness: Brightness.dark, ), ); }); }

@override Widget build(BuildContext context) { return AnnotatedRegion( value: SystemUiOverlayStyle.dark.copyWith( statusBarColor: Colors.transparent, systemNavigationBarColor: ColorTools.color_F4F4F4, systemNavigationBarDividerColor: ColorTools.color_F4F4F4, systemNavigationBarIconBrightness: Brightness.dark, ), child: Scaffold( backgroundColor: ColorTools.white, resizeToAvoidBottomInset:false, body: SafeArea( child: MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance.window).copyWith(textScaleFactor: 1), child: child, ), ), ), ); }

flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: 'v3.0-beta.10'

liubing1007 commented 3 years ago

initState 和 build 都加上就没问题了

CodingForAndroid commented 3 years ago

可以试下这种方案: 在FlutterBoostActivity 的 concrete 方法设置状态栏为沉浸式,然后 在onPostResume 方法中设置状态栏字体颜色。留个Q:474010224

mosentest commented 2 years ago

可以试下这种方案: 在FlutterBoostActivity 的 concrete 方法设置状态栏为沉浸式,然后 在onPostResume 方法中设置状态栏字体颜色。留个Q:474010224

我按你这处理,也没生效

mosentest commented 2 years ago

fun newInstance(bundle: Bundle?): 自己的 { val hashMap = HashMap<String, Any>() return CachedEngineFragmentBuilder(自己的::class.java) .url("xxx") .urlParams(hashMap) .build() }

忘记改这个,可以了

mosentest commented 2 years ago

onPostResume和onResume 都去执行下

XIMOTIAN commented 1 year ago

fun newInstance(bundle: Bundle?): 自己的 { val hashMap = HashMap<String, Any>() return CachedEngineFragmentBuilder(自己的::class.java) .url("xxx") .urlParams(hashMap) .build() }

忘记改这个,可以了

请问下最终是怎么解决的,谢谢

CodingForAndroid commented 1 year ago

@XIMOTIAN

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //设置这个是为了保证状态栏颜色与原生一致,不设置,flutter activity 的状态栏打开是灰色
        StatusBarHelper.setStatusBarTranslucent(this);
    }

@Override public void onPostResume() { super.onPostResume(); // 目前有个bug,第一次打开跟第二次打开时,状态栏中的文字图标颜色会变色,因此自定义设置颜色 StatusBarHelper.setStatusBarLightMode(this); }

XIMOTIAN commented 1 year ago

@XIMOTIAN

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //设置这个是为了保证状态栏颜色与原生一致,不设置,flutter activity 的状态栏打开是灰色
        StatusBarHelper.setStatusBarTranslucent(this);
    }

@OverRide public void onPostResume() { super.onPostResume(); // 目前有个bug,第一次打开跟第二次打开时,状态栏中的文字图标颜色会变色,因此自定义设置颜色 StatusBarHelper.setStatusBarLightMode(this); }

我的案例中代码贴的有点多,但是第一次启动的时候是正常的,后面再进入,又失效了。flutter版本是 4.2.0

XIMOTIAN commented 1 year ago

@XIMOTIAN

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //设置这个是为了保证状态栏颜色与原生一致,不设置,flutter activity 的状态栏打开是灰色
        StatusBarHelper.setStatusBarTranslucent(this);
    }

@OverRide public void onPostResume() { super.onPostResume(); // 目前有个bug,第一次打开跟第二次打开时,状态栏中的文字图标颜色会变色,因此自定义设置颜色 StatusBarHelper.setStatusBarLightMode(this); }

https://github.com/alibaba/flutter_boost/issues/1564 目前打算参考这个 修改下flutterBoost的 源码,然后重写 onUpdateSystemUiOverlays(),并在里面调用 : StatusBarUtils.with(this) .setColor(Color.WHITE) .init()

CodingForAndroid commented 1 year ago

https://blog.csdn.net/u011733020/article/details/112260516?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167991397016800227441846%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;request_id=167991397016800227441846&amp;biz_id=0&amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-112260516-null-null.article_score_rank_blog&amp;utm_term=StatusBarHelper&amp;spm=1018.2226.3001.4450

上面是我的方法、不确定能不能解决你的问题,你试试吧。

474010224 @.***

 

------------------ 原始邮件 ------------------ 发件人: "alibaba/flutter_boost" @.>; 发送时间: 2023年3月27日(星期一) 晚上6:46 @.>; @.**@.>; 主题: Re: [alibaba/flutter_boost] flutter_boost-3.0-beta.6打开两次flutter页面,顶部状态栏会变色 (#1060)

@XIMOTIAN @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //设置这个是为了保证状态栏颜色与原生一致,不设置,flutter activity 的状态栏打开是灰色 StatusBarHelper.setStatusBarTranslucent(this); } @OverRide public void onPostResume() { super.onPostResume(); // 目前有个bug,第一次打开跟第二次打开时,状态栏中的文字图标颜色会变色,因此自定义设置颜色 StatusBarHelper.setStatusBarLightMode(this); } 我的案例中代码贴的有点多,但是第一次启动的时候是正常的,后面再进入,又失效了。flutter版本是 4.2.0 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

XIMOTIAN commented 1 year ago

https://blog.csdn.net/u011733020/article/details/112260516?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167991397016800227441846%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;request_id=167991397016800227441846&amp;biz_id=0&amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-112260516-null-null.article_score_rank_blog&amp;utm_term=StatusBarHelper&amp;spm=1018.2226.3001.4450 上面是我的方法、不确定能不能解决你的问题,你试试吧。 474010224 @.   ------------------ 原始邮件 ------------------ 发件人: "alibaba/flutter_boost" @.>; 发送时间: 2023年3月27日(星期一) 晚上6:46 @.>; @*.**@*.>; 主题: Re: [alibaba/flutter_boost] flutter_boost-3.0-beta.6打开两次flutter页面,顶部状态栏会变色 (#1060) @XIMOTIAN @OverRide protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //设置这个是为了保证状态栏颜色与原生一致,不设置,flutter activity 的状态栏打开是灰色 StatusBarHelper.setStatusBarTranslucent(this); } @OverRide public void onPostResume() { super.onPostResume(); // 目前有个bug,第一次打开跟第二次打开时,状态栏中的文字图标颜色会变色,因此自定义设置颜色 StatusBarHelper.setStatusBarLightMode(this); } 我的案例中代码贴的有点多,但是第一次启动的时候是正常的,后面再进入,又失效了。flutter版本是 4.2.0 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

好的,我尝试下你这种方式,谢谢

MrFishC commented 1 month ago

@OverRide void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { SystemChrome.setSystemUIOverlayStyle( SystemUiOverlayStyle( systemNavigationBarColor: ColorTools.color_F4F4F4, systemNavigationBarDividerColor: ColorTools.color_F4F4F4, statusBarColor: Colors.transparent, systemNavigationBarIconBrightness: Brightness.dark, ), ); }); }

@OverRide Widget build(BuildContext context) { return AnnotatedRegion( value: SystemUiOverlayStyle.dark.copyWith( statusBarColor: Colors.transparent, systemNavigationBarColor: ColorTools.color_F4F4F4, systemNavigationBarDividerColor: ColorTools.color_F4F4F4, systemNavigationBarIconBrightness: Brightness.dark, ), child: Scaffold( backgroundColor: ColorTools.white, resizeToAvoidBottomInset:false, body: SafeArea( child: MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance.window).copyWith(textScaleFactor: 1), child: child, ), ), ), ); }

flutter_boost: git: url: 'https://github.com/alibaba/flutter_boost.git' ref: 'v3.0-beta.10'

为什么第一次进入flutter模块,状态栏的设置没有生效,后面进行才生效的?