首页 > 解决方案 > 键盘在较旧的 Android 版本上退出全屏模式

问题描述

我试图在我的应用程序中使用全屏,但我注意到在具有 android 8.1(API 27)的设备上,当用户打开键盘时,应用程序退出全屏模式并且除非重建 ui 否则不会恢复,是否有人有解决方案?

我还在 Android 7.1 (API 25) 上进行了测试,这个问题更容易处理,唯一没有回到全屏的是顶部栏,但是,下面的代码只能在新的 androids (API 28) 上完美运行+)

代码:

void main() {
  runApp(MaterialApp(home: MyApp()));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([]);
    return Scaffold(
      body: SafeArea(
          child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Flexible(flex: 1, child: Text('Fullscreen test')),
          Flexible(
            flex: 1,
            child: TextFormField(
              controller: TextEditingController(),
            ),
          ),
          Flexible(flex: 1, child: SizedBox())
        ],
      )),
    );
  }
}

Android 8.1 上的示例

标签: flutterflutter-layout

解决方案


你应该在initState. 工作代码:

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

void main() {
runApp(MaterialApp(home: MyApp()));
}

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

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

@override
Widget build(BuildContext context) {
 return Scaffold(
   body: SafeArea(
       child: Column(
     mainAxisAlignment: MainAxisAlignment.center,
     children: [
       Flexible(flex: 1, child: Text('Fullscreen test')),
       Flexible(
         flex: 1,
         child: TextFormField(
           controller: TextEditingController(),
         ),
       ),
       Flexible(flex: 1, child: SizedBox())
     ],
   )),
 );
}
}

推荐阅读