如何全屏制作颤动应用程序。我已经了解了如何隐藏状态栏Hide Android Status Bar On Flutter App。但我似乎无法找到如何隐藏Android导航栏。
答案 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'),
),
),
);
}
}