使全屏应用颤振

时间:2017-10-09 06:34:35

标签: android dart flutter

如何全屏制作颤动应用程序。我已经了解了如何隐藏状态栏Hide Android Status Bar On Flutter App。但我似乎无法找到如何隐藏Android导航栏。

9 个答案:

答案 0 :(得分:26)

它与Android状态栏完全相同。 执行SystemChrome.setEnabledSystemUIOverlays([])会隐藏状态栏和导航栏。

答案 1 :(得分:5)

SystemChrome.setEnabledSystemUIOverlays([]);

这将隐藏顶部和底部的条,但应用程序大小保持不变。它不会扩展到全屏高度。

答案 2 :(得分:5)

最后,我找到了设置全屏班级的一种方法。并禁用其他课程。

要设置全屏,请将此代码放入 initState()

SystemChrome.setEnabledSystemUIOverlays([]);

并恢复正常。在 dispose()

SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);

在同一班上。

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

您无法设置

SystemChrome.restoreSystemUIOverlays();
dispose()中的

。因为它已经说了

**Restores the system overlays to the last settings provided via [setEnabledSystemUIOverlays].**
May be used when the platform force enables/disables UI elements.
          
For example, when the Android keyboard disables hidden status and navigation bars,
this can be called to re-disable the bars when the keyboard is closed.
          
On Android, the system UI cannot be changed until 1 second after the previous
change. This is to prevent malware from permanently hiding navigation buttons.`

答案 3 :(得分:4)

以下代码非常适合全屏显示

SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
 
import 'package:flutter/services.dart'; 
////

@override
Widget build(BuildContext context) {
///Set color status bar
 SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
   return Scaffold(
   backgroundColor: Colors.white,
   body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Image.asset(
          'images/ic_splash_logo.png',
          width: 97.0,
          height: 115.0,
          fit: BoxFit.contain,
        ),
        SizedBox(
          height: 10.0,
        ),
        Text(
          'iComplain',
          style: TextStyle(fontSize: 24,
              color: Color(0xFF174D73),
            fontFamily: 'Helvetica'
          ),
        ),
      ],
     ),
    ),
  );
}

答案 4 :(得分:4)

如果我在SystemChrome.setEnabledSystemUIOverlays([]);init中添加dispose,这是我的经验,那么当您使用键盘时,状态栏和导航栏将返回,但是如果您这样使用它,则效果很好:

  @override
  Widget build(BuildContext context) {

    // To make this screen full screen.
    // It will hide status bar and notch.
    SystemChrome.setEnabledSystemUIOverlays([]);

    // full screen image for splash screen.
    return Container(
            child: new Image.asset('assets/splash.png', fit: BoxFit.fill));
      }
    }

小部件内部

答案 5 :(得分:2)

if you want to hide just bottom bar then
SystemChrome.setEnabledSystemUIOverlays ([SystemUiOverlay.bottom]);

and if you want to hide just status bar 
SystemChrome.setEnabledSystemUIOverlays ([SystemUiOverlay.top]);

if want to hide both then
SystemChrome.setEnabledSystemUIOverlays ([]);

答案 6 :(得分:1)

使用 SystemChrome.setEnabledSystemUIOverlays([]);在你的 initState() 中是这样的:

  void initState() {
    super.initState();
    print("Splash");

    // Start full screen
    SystemChrome.setEnabledSystemUIOverlays([]);
  }

以全屏模式启动屏幕。

接下来使用 SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);在您的 dispose() 函数中退出下一个屏幕的全屏模式。

  void dispose() {
    super.dispose();
    // Exit full screen
    SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
  }

答案 7 :(得分:0)

在 main 中使用 SystemChrome.setEnabledSystemUIOverlays([]);,如果出现错误,可以预先使用 WidgetsFlutterBinding.ensureInitialized();

但是,这不会在应用程序中持续存在,并且在文本字段失去焦点后,您应该在 1 秒后调用 SystemChrome.restoreSystemUIOverlays()。显然"This is to prevent malware from permanently hiding navigation buttons"。 (为什么不保持向下滑动手势以防止被“卡在”应用程序中?) 在任何情况下 我的应用程序充满了表单,而这种方法似乎需要大量工作。

我想这个解决方案有点笨拙,但我只是创建了一个在后台运行的服务,每秒钟运行一次SystemChrome.restoreSystemUIOverlays(),它看起来像这样:

    class FullscreenService{
  
    Timer? timer;
    static FullscreenService? _instance;
    FullscreenService._internal() {
    timer = Timer.periodic(
    Duration(seconds: 1), (Timer t) => 
    SystemChrome.restoreSystemUIOverlays);
    }

    factory FullscreenService() => _instance ?? FullscreenService._internal();

    void cancelTimer(){
    timer!.cancel();
   }
  }

我希望我将来不必使用它,如果有人有任何想法如何在保持全屏的同时避免这种情况,请告诉我......但至少它现在可以工作。

答案 8 :(得分:-6)

AppBar是您的导航栏,因此只需将其从您的代码中移除,如下所示

//新的这个代码它应该工作,AppBar是导航栏

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {      
   @override
   Widget build(BuildContext context) {
      return new MaterialApp(
         home: new Scaffold(
           body: new Center(
              child: new Text('Hello World'),
           ),
         ),
      );
   }
}