如何在Flutter中隐藏Android StatusBar


73

如何在Flutter应用中隐藏Android状态栏?

Android状态栏


1
嘿,彼得,如何使其牢固并在下面启动我的应用程序屏幕?
M.Usman '19

用SafeArea小部件代码示例包装您的身体内容:body:SafeArea(child:MyAppBody()),
S_i_l_e_n_t C_o_d_e_r

Answers:


136

SystemChrome.setEnabledSystemUIOverlays([]) 应该做你想做的。

您可以将其带回SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values)

使用导入

import 'package:flutter/services.dart';

1
这是否也应该删除Android底部按钮栏?(确实如此)。如果只能删除状态栏,那么正确的方法是什么?
Deborah

26
@Deborah我猜是这样的:SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
Filip Raj

1
有什么方法可以禁用这种灰色调吗?
汉尼斯·提尔特曼

@ Hannes.T截至目前,您无法在Github
投票

3
@GunterZochbauer在Android上打开键盘后,状态栏会再次出现
Pritish

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

1.隐藏状态栏

SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom])

在此处输入图片说明

2.透明状态栏

 SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    statusBarColor: Colors.transparent,
 ));

在此处输入图片说明

3.显示状态栏

SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);

25

您可以使用SystemChrome.setEnabledSystemUIOverlays([])隐藏SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values)并将其重新带回。

但是,目前会有少量灰色区域,目前还没有针对此问题的解决方法。隐藏状态栏时,应用栏的高度保持不变。

参见github问题:https : //github.com/flutter/flutter/issues/14432


1
CollinJackson提到了同样的事情,并且您只是添加了灰色区域的内容,所以这不是答案,更适合作为注释。
CopsOnRoad

12

对于单页(在页面文件中):

@override
  void initState() {
    SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
    super.initState();
  }

  @override
  void dispose() {
    SystemChrome.setEnabledSystemUIOverlays(
        [SystemUiOverlay.top, SystemUiOverlay.bottom]);
    super.dispose();
  }

对于所有页面(在main.dart中):

void main() {
  SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
  runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(fontFamily: 'Poppins'),
      home: SplashScreen()));
}

不要忘记 import 'package:flutter/services.dart'


当您共享代码段作为答案时,请也尝试解释一下
Yunus Temurlenk

导航到新路线并且键盘处于打开状态时,状态栏将再次显示。您知道如何修复吗?
mrdavari

7

您可以在主要功能中添加以下代码以隐藏状态栏。

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  statusBarColor: Colors.transparent,
));

3
我尚未对此进行测试,但我相信这会占用24dp,并且不会让您使用要使用的区域。
CopsOnRoad

@CopsOnRoad,确实是它的作用。刚刚测试。
尼尔

@Neil您是不是要占用空间?
CopsOnRoad

@CopsOnRoad它不会隐藏状态栏,而只是使其颜色与您的应用栏相同(也没有边框)。是的,您可以说它(状态栏)。*正在占用空间且不会让您使用OP想要使用的区域。
尼尔,

2

如果您不希望AppBar覆盖状态栏颜色,则乔纳·威廉姆斯(Jonah Williams)的评论在某些情况下也可能会有所帮助 https://github.com/flutter/flutter/issues/24472#issuecomment-440015464

您无法为应用程序栏提供状态栏颜色,但可以创建自己的带注释区域。现在还不是很直观,但是您可以sized: false用来覆盖由应用栏创建的带有子注释的区域。

某个地方,也许是脚手架的孩子:

Scaffold(
  body: AnnotatedRegion<SystemUiOverlayStyle>(
    value: const SystemUiOverlayStyle(...),
    sized: false,
    child: ...
  )
);

请注意,并非所有的Android版本都支持状态栏颜色或图标亮度。注意事项,请参阅SystemUiOverlayStyle上的文档。


1

步骤1:导入以下套件

import 'package:flutter/services.dart';

步骤2:将以下代码添加到您的类初始化状态,如下所示

@override
  void initState() {
    // TODO: implement initState
    super.initState();
    SystemChrome.setEnabledSystemUIOverlays([]);

  }

1

i:要隐藏状态栏: SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);

ii:使用SafeArea Widget可以确保您的应用程序不占用状态栏区域。

@override
Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
          child: Container(
            child: Text('Do not take status bar area on screen!'),
          ),
        );
}

0

首先添加SystemChrome.setEnabledSystemUIOverlays([]); 到您的Main函数。

如前面的答案中所述,这会留下一个灰色区域。

我对此有一个简单的解决方法(不过,只是一种解决方法,在大多数情况下都可以使用)。

AppBar()刚刚添加

backgroundColor: Colors.transparent,
elevation: 0.0,

我希望这有帮助


0
 body: MyAppBody(),

更改为

body: SafeArea(child: MyAppBody()),

在此处输入图片说明


这不会隐藏状态栏,只是使主体容器不滑到其后方即可。
鲁宾
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.