Flutter 颤振启动屏幕因标题栏而向下移动

Flutter 颤振启动屏幕因标题栏而向下移动,flutter,Flutter,我正在编写我的第一个颤振应用程序,我一直在试图了解如何实现闪屏。它基本上是有效的,但在第一个屏幕显示之前,启动屏幕图像发生了变化,我不知道为什么。我试图在下面的摘录中展示所有相关的代码和信息。这是一个关于这个问题的视频 是因为应用程序第一个屏幕上的标题栏吗?我的期望是,当相机加载时,闪屏将完全消失。我假设这是应该发生的,但我的代码中一定有问题。任何帮助都将不胜感激 启动\u background.xml <?xml version="1.0" encoding="utf-8"?> &

我正在编写我的第一个颤振应用程序,我一直在试图了解如何实现闪屏。它基本上是有效的,但在第一个屏幕显示之前,启动屏幕图像发生了变化,我不知道为什么。我试图在下面的摘录中展示所有相关的代码和信息。这是一个关于这个问题的视频

是因为应用程序第一个屏幕上的标题栏吗?我的期望是,当相机加载时,闪屏将完全消失。我假设这是应该发生的,但我的代码中一定有问题。任何帮助都将不胜感激

启动\u background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/black" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
</resources>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/black" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
</resources>

@可绘制/发布背景
main.dart

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final cameras = await availableCameras();
  final firstCamera = cameras.first;

  runApp(
    MaterialApp(
      theme: ThemeData.dark(),
      home: TakePictureScreen(camera: firstCamera),
    ),
  );
}

class TakePictureScreen extends StatefulWidget {
   final CameraDescription camera;
   const TakePictureScreen({Key key, @required this.camera,}) : super(key: key);

   @override
   TakePictureScreenState createState() => TakePictureScreenState();
 }

class TakePictureScreenState extends State<TakePictureScreen> {
  CameraController _controller;
  Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();
    _controller = CameraController(widget.camera, ResolutionPreset.medium);
    _initializeControllerFuture = _controller.initialize();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Test Camera App')),
      body: FutureBuilder<void>(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          ...
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.camera_alt),
        onPressed: () async {
          ...
        },
      ),
    );
  }
}
Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
最终摄像机=等待可用摄像机();
final firstCamera=cameras.first;
runApp(
材料聚丙烯(
主题:ThemeData.dark(),
主页:TakePictureScreen(相机:firstCamera),
),
);
}
类TakePictureScreen扩展StatefulWidget{
最终摄像机描述摄像机;
const-TakePictureScreen({Key-Key,@required this.camera,}):super(Key:Key);
@凌驾
TakePictureScreensState createState()=>TakePictureScreenState();
}
类takePictureScreentState扩展了状态{
摄像机控制器(CameraController)控制器;;
未来(初始化控制未来);
@凌驾
void initState(){
super.initState();
_控制器=摄像机控制器(widget.camera,ResolutionPreset.medium);
_initializeControllerFuture=_controller.initialize();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“测试摄像头应用”),
正文:未来建设者(
未来:_initializeControllerFuture,
生成器:(上下文,快照){
...
},
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.camera\u alt),
onPressed:()异步{
...
},
),
);
}
}

我也遇到了同样的问题,所以在网上搜索后,我找到了一个解决方案

在主题中添加行android:windowDisablePreview to true

<style name="LaunchTheme" parent="Theme.MaterialComponents.DayNight">
    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowBackground">@drawable/launch_background</item>
</style>

真的
@可绘制/发布背景

我也遇到了同样的问题,所以在网上搜索后,我找到了一个解决方案

在主题中添加行android:windowDisablePreview to true

<style name="LaunchTheme" parent="Theme.MaterialComponents.DayNight">
    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowBackground">@drawable/launch_background</item>
</style>

真的
@可绘制/发布背景

您的TakePictureScreen中是否碰巧有一个应用程序栏?@CheunYee是的,有一个应用程序栏。我原以为应用程序条加载时启动屏幕会被隐藏,但它似乎确实导致了问题。我添加了更多代码来显示
AppBar
实例化。如果删除
AppBar
,您能确认这不会发生吗?好问题。我没想过要试试。我注释掉了
AppBar
,图片仍然向下移动。你的TakePictureScreen中有AppBar吗?@CheunYee是的,有一个AppBar。我原以为应用程序条加载时启动屏幕会被隐藏,但它似乎确实导致了问题。我添加了更多代码来显示
AppBar
实例化。如果删除
AppBar
,您能确认这不会发生吗?好问题。我没想过要试试。我注释掉了
AppBar
,图片仍然向下移动。