有没有办法让SystemChrome SystemUIMode始终显示顶部状态栏但具有沉浸式粘性底部?

问题描述 投票:0回答:1

使用 Flutter 2.5.2,在 Pixel 2 和 Iphone SE (2020) 上进行测试,

因此,对于我的应用程序,我希望最大化屏幕空间,但在应用程序的大部分内容中保留顶部状态栏。我想隐藏底部系统导航,但似乎使用

 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);
导致底部系统覆盖进入 LeanBack 模式或其他模式。

由于我自己的底部导航栏具有滚动功能,因此似乎我无法在不点击屏幕以在“手动”模式下显示系统覆盖的情况下滚动。然后应用程序手势没有系统底部导航,挡住了我的底部导航栏。 “immersiveSticky”可以工作,但我希望顶部状态栏几乎总是显示。使用

SystemUiMode.immersiveSticky
似乎忽略了``覆盖:[]``。

有谁知道如何使用

SystemChrome.setSystemUIChangeCallback
来完成我的手势,或者让
SystemUiOverlay.top
始终处于底部,如
immersiveSticky
所示:
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky, overlays: [SystemUiOverlay.top]);

或者是否有一种解决方法,我可以获取顶部状态栏的“副本”并创建我自己的小部件,我可以将其用作顶部状态栏并保留

SystemUiMode.immersiveSticky

参考SystemChrome.setEnabledSystemUIMode

flutter user-interface statusbar navigationbar
1个回答
0
投票

通过添加

SystemChrome.setSystemUIChangeCallback
实际上可以解决您的问题。

首先,使用以下方法将您的应用程序设置为仅显示状态栏和隐藏导航栏:

      SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);

然后添加回调来侦听 UI 模式的更改,当检测到更改时,您可以重置 UI 模式

      SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
        Future.delayed(Duration(seconds: 2), () {
          SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);
        });
      });

上面的代码将在导航栏重新出现时再次隐藏它。

© www.soinside.com 2019 - 2024. All rights reserved.