我正在开发一个包含拍照功能的网络应用程序。相机可以正常工作,当用户移动到相机页面时会自动加载。唯一的问题是,屏幕 Flink 红色并显示"LateInitializationError:字段"camController"尚未初始化"错误(camController是我的相机控制器)。
下面是我的屏幕代码:
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
class createView extends StatefulWidget {
const createView({Key? key}) : super(key: key);
@override
State<createView> createState() => _createViewState();
}
class _createViewState extends State<createView> {
late List<CameraDescription> deviceCameras;
late CameraController camController;
@override
void initState() {
getCamera();
super.initState();
}
void getCamera() async {
final deviceCameras = await availableCameras();
camController = CameraController(deviceCameras.first, ResolutionPreset.high,
enableAudio: false);
await camController.initialize().then((value) {
if (!mounted) {
return;
}
setState(() {});
}).catchError((e) {
print(e);
});
}
@override
void dispose() {
camController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (camController.value.isInitialized) {
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: Color.fromARGB(136, 255, 255, 255),
borderRadius: BorderRadius.all(Radius.circular(20)),
boxShadow: [
BoxShadow(
color: Color.fromARGB(37, 0, 0, 0),
spreadRadius: 1,
blurRadius: 15)
],
),
width: 300,
child: CameraPreview(camController),
),
),
),
);
} else {
return CircularProgressIndicator();
}
}
}
和我的错误日志:
The following LateError was thrown building createView$(dirty, state: _createViewState#54a24):
LateInitializationError: Field 'camController' has not been initialized.
The relevant error-causing widget was:
createView$
lib\home.dart:19
When the exception was thrown, this was the stack:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49 throw_
packages/podvus/myViews/createView.dart 13:25 get camController
packages/podvus/myViews/createView.dart 43:29 build
packages/flutter/src/widgets/framework.dart 4992:27
packages/flutter/src/widgets/framework.dart 4878:15 performRebuild
packages/flutter/src/widgets/framework.dart 5050:11 performRebuild
packages/flutter/src/widgets/framework.dart 4604:5 rebuild
packages/flutter/src/widgets/framework.dart 4859:5 [_firstBuild]
packages/flutter/src/widgets/framework.dart 5041:11 [_firstBuild]
packages/flutter/src/widgets/framework.dart 4853:5 mount
packages/flutter/src/widgets/framework.dart 3863:15 inflateWidget
等等。
这个错误是在屏幕本身的构建中,因为在build方法中删除对它的引用会删除这个错误。我正在尝试将if(camController. value. isInitialized)更改为其他值以使它工作。
2条答案
按热度按时间pu82cl6c1#
如果涉及任何
async
初始化,则不建议使用late
。返回的
deviceCameras
也有可能是空的,所以最好的方法是将camController
和deviceCameras
定义为可选的,并在后面的代码中优雅地处理空值。klsxnrf12#
找到答案了--两行代码:使用bool值作为触发器,当摄像头实际初始化时,该值将更新为true。在“if(camController.value.isInitialized)”中使用该值,则应用程序将在摄像头初始化时显示加载指示符,而不是错误。