Flutter 进入摄像头屏幕时出现短错误屏幕
我对dart比较陌生,并创建了一个应用程序,使用相机。整个应用程序运行良好,我唯一的问题是,每次进入摄像头屏幕时,我都会在几秒钟内收到一条错误消息。然后一切正常。前一个屏幕只是一个主屏幕,它不会将任何内容传递到相机屏幕 这是摄像头屏幕的代码Flutter 进入摄像头屏幕时出现短错误屏幕,flutter,dart,camera,nosuchmethoderror,Flutter,Dart,Camera,Nosuchmethoderror,我对dart比较陌生,并创建了一个应用程序,使用相机。整个应用程序运行良好,我唯一的问题是,每次进入摄像头屏幕时,我都会在几秒钟内收到一条错误消息。然后一切正常。前一个屏幕只是一个主屏幕,它不会将任何内容传递到相机屏幕 这是摄像头屏幕的代码 import 'package:camera/camera.dart'; import 'dart:async'; import 'package:flutter/material.dart'; import 'package:picer/customBut
import 'package:camera/camera.dart';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:picer/customButtons.dart';
class CameraScreen extends StatefulWidget {
@override
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
CameraController _controller;
List<CameraDescription> _availableCameras;
List<String> imageList = List<String>();
@override
void initState() {
super.initState();
_getAvailableCameras();
}
// get available cameras
Future<void> _getAvailableCameras() async {
WidgetsFlutterBinding.ensureInitialized();
_availableCameras = await availableCameras();
_initCamera(_availableCameras.first);
}
// init camera
Future<void> _initCamera(CameraDescription description) async {
_controller =
CameraController(description, ResolutionPreset.max, enableAudio: true);
await _controller.initialize();
setState(() {});
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Colors.black,
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
flex: 7,
child: Transform.scale(
scale: size.width / size.width,
child: CameraPreview(_controller),
),
),
SizedBox(
height: 10,
),
Row(
children: [
Expanded(child: FileButton(imageList, imageList.length)),
Expanded(
child: CustomShutterButton(
controller: _controller,
imageList: imageList,
),
),
Expanded(
child: RawMaterialButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
constraints: BoxConstraints.tightFor(
width: 70,
height: 70,
),
fillColor: Colors.black,
onPressed: () {
_toggleCameraLens();
},
child: Icon(
Icons.switch_camera,
color: Colors.white,
),
)),
],
),
],
),
),
);
}
void _toggleCameraLens() {
// get current lens direction (front / rear)
final lensDirection = _controller.description.lensDirection;
CameraDescription newDescription;
if (lensDirection == CameraLensDirection.front) {
newDescription = _availableCameras.firstWhere((description) =>
description.lensDirection == CameraLensDirection.back);
} else {
newDescription = _availableCameras.firstWhere((description) =>
description.lensDirection == CameraLensDirection.front);
}
if (newDescription != null) {
_initCamera(newDescription);
} else {
print('Asked camera not available');
}
}
}
有人知道如何解决这个问题吗?我真的很感激:)提前谢谢你 好的,我想我只要在构建之前检查控制器是否初始化就可以解决问题
@override
Widget build(BuildContext context) {
if (_controller == null || !_controller.value.isInitialized) {
return Container();
}
return Scaffold(
backgroundColor: Colors.black,
@override
Widget build(BuildContext context) {
if (_controller == null || !_controller.value.isInitialized) {
return Container();
}
return Scaffold(
backgroundColor: Colors.black,