我正在编写我的第一个Flutter应用程序,并且一直在尝试了解如何实现启动屏幕。多数情况下都可以,但是在显示第一个屏幕之前,初始屏幕图像有所变化,我不知道为什么。我尝试在以下摘录中显示所有相关的代码和信息。 Here是有关此问题的视频。
是因为应用程序第一个屏幕上的标题栏吗?我的期望是,当相机加载时,启动画面将完全消失。我假设这是应该发生的,但是我的代码中肯定有问题。任何帮助将不胜感激。
launch_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>
styles.xml
<?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 {
...
},
),
);
}
}
答案 0 :(得分:0)
我遇到了同样的问题,所以在网上搜索后找到了解决方案here
将 android:windowDisablePreview 设置为 true 行添加到您的主题:
<style name="LaunchTheme" parent="Theme.MaterialComponents.DayNight">
<item name="android:windowDisablePreview">true</item>
<item name="android:windowBackground">@drawable/launch_background</item>
</style>