Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android FlutterBoost开启FlutterBoostFragment页面导致状态栏颜色异常 #1564

Closed
JunhuaLin opened this issue Jan 17, 2022 · 3 comments

Comments

@JunhuaLin
Copy link
Contributor

问题背景:
我司App支持黑白两色皮肤,关闭Flutter引擎针对Android一端自动修改状态栏颜色功能后,FlutterBoostFragment页面在白色皮肤下展示了白色的状态栏图标。

问题原因:
由于引擎自动修改状态栏颜色不可控,故我们关闭了Flutter引擎中自动改变状态栏颜色的逻辑,关闭代码如下:

class CustomFBFlutterBinding extends WidgetsFlutterBinding
    with BoostFlutterBinding {
  @override
  void initInstances() {
    super.initInstances();
    // 不自动改变状态栏,关闭引擎中的设置
    renderView.automaticSystemUiAdjustment = false;
  }
}

但是发现关闭Flutter引擎中的自动改变状态栏逻辑后,状态栏颜色依然不可控,最终排查定位到,在FlutterBoostFragment#onResume方法中,调用了platformPlugin.updateSystemUiOverlays()方法导致状态栏显示异常,源码如下:

public class FlutterBoostFragment extends FlutterFragment implements FlutterViewContainer {

@Override
    public void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
            final FlutterContainerManager containerManager = FlutterContainerManager.instance();
            FlutterViewContainer top = containerManager.getTopActivityContainer();
            boolean isActiveContainer = containerManager.isActiveContainer(this);
            if (isActiveContainer && top != null && top != this.getContextActivity() && !top.isOpaque() && top.isPausing()) {
                Log.w(TAG, "Skip the unexpected activity lifecycle event on Android Q. " +
                        "See https://issuetracker.google.com/issues/185693011 for more details.");
                return;
            }
        }

        stage = LifecycleStage.ON_RESUME;
        if (!isHidden()) {
            didFragmentShow();
            getFlutterEngine().getLifecycleChannel().appIsResumed();
        }

        // Update system UI overlays to match Flutter's desired system chrome style
        Assert.assertNotNull(platformPlugin);
        //  此方法调用导致状态栏图标颜色异常,希望独立该方法调用,方便子类重写定制逻辑
        platformPlugin.updateSystemUiOverlays();
        if (DEBUG) Log.d(TAG, "#onResume: " + this);
    }

}

解决方案:
希望独立该platformPlugin.updateSystemUiOverlays()方法调用,方便子类重写定制逻辑。

修改建议方案如下代码:

public class FlutterBoostFragment extends FlutterFragment implements FlutterViewContainer {

@Override
    public void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
            final FlutterContainerManager containerManager = FlutterContainerManager.instance();
            FlutterViewContainer top = containerManager.getTopActivityContainer();
            boolean isActiveContainer = containerManager.isActiveContainer(this);
            if (isActiveContainer && top != null && top != this.getContextActivity() && !top.isOpaque() && top.isPausing()) {
                Log.w(TAG, "Skip the unexpected activity lifecycle event on Android Q. " +
                        "See https://issuetracker.google.com/issues/185693011 for more details.");
                return;
            }
        }

        stage = LifecycleStage.ON_RESUME;
        if (!isHidden()) {
            didFragmentShow();
            getFlutterEngine().getLifecycleChannel().appIsResumed();
        }

        // Update system UI overlays to match Flutter's desired system chrome style
        onUpdateSystemUiOverlays();
        if (DEBUG) Log.d(TAG, "#onResume: " + this);
    }

    /**
     * 方便子类修改
     */
    protected void onUpdateSystemUiOverlays(){
        Assert.assertNotNull(platformPlugin);
        platformPlugin.updateSystemUiOverlays();
    }

}

Flutter Boost Version: v3.0-null-safety-preview.15~18
Target Platform: android
Target OS version/browser: 三星 s12 android 11
Devices: 三星 s12

@ColdPaleLight
Copy link
Collaborator

问题如果已经定位到了,可以提一个PR过来修复这个问题,感谢

@JunhuaLin
Copy link
Contributor Author

已经提交PR了,可以看下

@ColdPaleLight
Copy link
Collaborator

PR已经合入,感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants