我需要隐藏我的应用程序中的Android状态栏,所以我使用下面的代码
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
main() {
SystemChrome.setEnabledSystemUIOverlays([]);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(child: TextField()), backgroundColor: Colors.orange));
}
}
我有一个textfield
在屏幕上,所以每当Android键盘打开状态栏重新出现.我已经尝试了多个Android设备,我得到了相同的错误。
这真的是框架中的一个bug,还是我做错了什么?
我在下面附上了一个简短的视频链接来展示这个bug
https://drive.google.com/file/d/19qs5Rsrfc_G1oN5kbxgKvYQAXpTr8RZx/view?usp=sharing
我没有在iOS
中测试过
3条答案
按热度按时间qxsslcnc1#
请分享一些代码。我尝试在
initState()
中添加SystemChrome.setEnabledSystemUIOverlays([]);
,并且我有一个文本字段,它工作正常。x6h2sr282#
我所做的是在键盘显示后,延迟2秒(文档说1秒),然后再次调用
setEnabledSystemUIOverlays
。根据:https://api.flutter.dev/flutter/services/SystemChrome/setEnabledSystemUIOverlays.html
当键盘变为可见时,它将启用导航栏和状态栏系统UI覆盖。当键盘关闭时,Android不会恢复之前的UI可见性设置,并且在键盘关闭后1秒内不能更改UI可见性,以防止恶意软件锁定用户导航按钮。
要在文本输入后恢复“全屏”,应在延迟1秒后再次设置UI叠加。这可以通过restoreSystemUIOverlays或再次调用它来实现。否则,仅当应用程序失去焦点并重新获得焦点时,才会自动恢复原始UI覆盖设置。
57hvy0tb3#
在这里你的代码:
你应该把
setEnabledSystemUIOverlays
改为:我从你的问题中理解到的是你认为这是Flutter中的一个bug,但根据我对Flutter文档的理解,这是一个正常的行为,无论何时显示键盘,显然
这是为了防止恶意软件永久隐藏导航按钮
source
我不知道如何覆盖,但要解决你的问题,你应该使用
SystemChrome.restoreSystemUIOverlays();
后,你与键盘输入完成。这应该是我的答案的结束。
但对于那些不知道如何做到这一点,你需要检查的条件,如果键盘是开放的或没有,你可以使用
WidgetsBinding.instance.window.viewInsets.bottom
,回答Deepak Raj或者您可以用途:键盘VisibilityBuilder
通过Andrey Gordeevhis answer
结果如下: