Flutter setEnabledSystemUIOverlays 隐藏顶部状态栏

13

当我使用SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom])将SystemUiOverlay.bottom设置到我的appbarwidget时,我遇到了一个问题,并且注意到状态栏被隐藏,但一旦我下拉屏幕的上方,它就会显示出来并且不会再次消失。所以我想到了为整个小部件添加手势检测器,以便在您按下屏幕的任何位置时始终隐藏它。我想知道这是否是最佳解决方案,是否会出现性能或其他问题。您有什么想法吗?

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

class PlanetsApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new GestureDetector(
      onTap: () => SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]),
      child: new MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Planets App',
        color: Colors.purple,
        home: HomeScreen(),
      ),
    );
  }
}
4个回答

4

切换到Flutter后,我也注意到了这个行为 :( 我不想使用GestureDetector,并且我不确定在哪里放置SystemChrome.setEnabledSystemUIOverlays可以正确隐藏工具栏...

相反,我做了这个:在Android的styles.xml文件中,我已经添加了应用程序主题的内容:

<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>

这将使系统栏在应用程序被点击时始终消失。

3

将你的代码更改为以下内容。

    SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);

8
请使用[编辑]链接添加一些解释,说明您的建议将如何解决问题。 - Cindy Meister

1

针对评论中提到的问题(https://github.com/flutter/flutter/issues/14432),我已经找到了一个临时解决方案。当您隐藏状态栏或底部栏时,AppBar的高度仍然保持不变,并且占用太多空间,特别是在使用横向模式时。为了解决这个问题,请将Scaffold和AppBar的“primary”属性设置为false。

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

  class MyApp extends StatefulWidget {
    @override
    _MyAppState createState() => _MyAppState();
  }

  class _MyAppState extends State<MyApp> {        
    @override
    void initState() {
      SystemChrome.setEnabledSystemUIOverlays([]);
      super.initState();
    }

    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          primary: false,
          appBar: AppBar(
            primary: false,
            backgroundColor: Colors.blue,
          ),
          body: Center(child: Text("It works!")),
        ),
      );
    }
  }

希望它有所帮助!

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接