问题描述
我对飞镖游戏比较陌生,并创建了一个使用相机的应用程序。整个应用程序运行正常,我唯一的问题是,每当我进入相机屏幕时,都会收到一秒钟的错误消息。Error_Screen然后,一切正常。前一个屏幕只是一个主屏幕,不会将任何内容传递到相机屏幕。
这是相机屏幕的代码
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');
}
}
}
在iPhone上构建它时,出现以下错误消息:
2020-09-02 15:18:48.470182-0400 Runner[3907:853052] Metal API Validation Enabled
2020-09-02 15:18:48.618830-0400 Runner[3907:853246] flutter: Observatory listening on http://127.0.0.1:52998/_vfDFTNQegY=/
2020-09-02 15:18:51.157075-0400 Runner[3907:853235] flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
2020-09-02 15:18:51.157194-0400 Runner[3907:853235] flutter: The following NoSuchMethodError was thrown building CameraScreen(dirty,dependencies: [MediaQuery],2020-09-02 15:18:51.157220-0400 Runner[3907:853235] flutter: state: _CameraScreenState#0ffaa):
2020-09-02 15:18:51.157242-0400 Runner[3907:853235] flutter: The getter 'value' was called on null.
2020-09-02 15:18:51.157264-0400 Runner[3907:853235] flutter: Receiver: null
2020-09-02 15:18:51.157286-0400 Runner[3907:853235] flutter: Tried calling: value
2020-09-02 15:18:51.157306-0400 Runner[3907:853235] flutter:
2020-09-02 15:18:51.157327-0400 Runner[3907:853235] flutter: Widget creation tracking is currently disabled. Enabling it enables improved error messages. It can
2020-09-02 15:18:51.157607-0400 Runner[3907:853235] flutter: be enabled by passing `--track-widget-creation` to `flutter run` or `flutter test`.
2020-09-02 15:18:51.157754-0400 Runner[3907:853235] flutter:
2020-09-02 15:18:51.157949-0400 Runner[3907:853235] flutter: When the exception was thrown,this was the stack:
2020-09-02 15:18:51.158073-0400 Runner[3907:853235] flutter: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
2020-09-02 15:18:51.158204-0400 Runner[3907:853235] flutter: #1 _CameraScreenState.build (package:picer/cameraScreen.dart:42:23)
2020-09-02 15:18:51.158403-0400 Runner[3907:853235] flutter: #2 StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28)
2020-09-02 15:18:51.158583-0400 Runner[3907:853235] flutter: #3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4546:15)
2020-09-02 15:18:51.158718-0400 Runner[3907:853235] flutter: #4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
2020-09-02 15:18:51.158834-0400 Runner[3907:853235] flutter: #5 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.158861-0400 Runner[3907:853235] flutter: #6 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4525:5)
2020-09-02 15:18:51.158914-0400 Runner[3907:853235] flutter: #7 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4710:11)
2020-09-02 15:18:51.158937-0400 Runner[3907:853235] flutter: #8 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
2020-09-02 15:18:51.158989-0400 Runner[3907:853235] flutter: ... Normal element mounting (24 frames)
2020-09-02 15:18:51.159012-0400 Runner[3907:853235] flutter: #32 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
2020-09-02 15:18:51.159068-0400 Runner[3907:853235] flutter: #33 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5991:32)
2020-09-02 15:18:51.159091-0400 Runner[3907:853235] flutter: ... Normal element mounting (136 frames)
2020-09-02 15:18:51.159115-0400 Runner[3907:853235] flutter: #169 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
2020-09-02 15:18:51.159174-0400 Runner[3907:853235] flutter: #170 Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
2020-09-02 15:18:51.159196-0400 Runner[3907:853235] flutter: #171 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5624:32)
2020-09-02 15:18:51.159221-0400 Runner[3907:853235] flutter: #172 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6001:17)
2020-09-02 15:18:51.159272-0400 Runner[3907:853235] flutter: #173 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159295-0400 Runner[3907:853235] flutter: #174 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.159315-0400 Runner[3907:853235] flutter: #175 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
2020-09-02 15:18:51.159334-0400 Runner[3907:853235] flutter: #176 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.159386-0400 Runner[3907:853235] flutter: #177 StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
2020-09-02 15:18:51.159408-0400 Runner[3907:853235] flutter: #178 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159427-0400 Runner[3907:853235] flutter: #179 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.159447-0400 Runner[3907:853235] flutter: #180 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.159504-0400 Runner[3907:853235] flutter: #181 ProxyElement.update (package:flutter/src/widgets/framework.dart:4906:5)
2020-09-02 15:18:51.159527-0400 Runner[3907:853235] flutter: #182 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:183:11)
2020-09-02 15:18:51.159546-0400 Runner[3907:853235] flutter: #183 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159566-0400 Runner[3907:853235] flutter: #184 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
2020-09-02 15:18:51.159617-0400 Runner[3907:853235] flutter: #185 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159641-0400 Runner[3907:853235] flutter: #186 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.159664-0400 Runner[3907:853235] flutter: #187 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
2020-09-02 15:18:51.159686-0400 Runner[3907:853235] flutter: #188 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.159707-0400 Runner[3907:853235] flutter: #189 StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
2020-09-02 15:18:51.159759-0400 Runner[3907:853235] flutter: #190 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159780-0400 Runner[3907:853235] flutter: #191 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
2020-09-02 15:18:51.159800-0400 Runner[3907:853235] flutter: #192 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159819-0400 Runner[3907:853235] flutter: #193 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
2020-09-02 15:18:51.159840-0400 Runner[3907:853235] flutter: #194 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.159893-0400 Runner[3907:853235] flutter: #195 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.159916-0400 Runner[3907:853235] flutter: #196 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.159935-0400 Runner[3907:853235] flutter: #197 StatelessElement.update (package:flutter/src/widgets/framework.dart:4627:5)
2020-09-02 15:18:51.159955-0400 Runner[3907:853235] flutter: #198 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.160006-0400 Runner[3907:853235] flutter: #199 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.160029-0400 Runner[3907:853235] flutter: #200 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.160050-0400 Runner[3907:853235] flutter: #201 ProxyElement.update (package:flutter/src/widgets/framework.dart:4906:5)
2020-09-02 15:18:51.160071-0400 Runner[3907:853235] flutter: #202 Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
2020-09-02 15:18:51.160094-0400 Runner[3907:853235] flutter: #203 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
2020-09-02 15:18:51.160145-0400 Runner[3907:853235] flutter: #204 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
2020-09-02 15:18:51.160171-0400 Runner[3907:853235] flutter: #205 Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
2020-09-02 15:18:51.160194-0400 Runner[3907:853235] flutter: #206 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:33)
2020-09-02 15:18:51.160223-0400 Runner[3907:853235] flutter: #207 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:866:20)
2020-09-02 15:18:51.160274-0400 Runner[3907:853235] flutter: #208 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
2020-09-02 15:18:51.160301-0400 Runner[3907:853235] flutter: #209 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
2020-09-02 15:18:51.160322-0400 Runner[3907:853235] flutter: #210 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
2020-09-02 15:18:51.160345-0400 Runner[3907:853235] flutter: #211 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:972:5)
2020-09-02 15:18:51.160397-0400 Runner[3907:853235] flutter: #215 _invoke (dart:ui/hooks.dart:253:10)
2020-09-02 15:18:51.160425-0400 Runner[3907:853235] flutter: #216 _drawFrame (dart:ui/hooks.dart:211:3)
2020-09-02 15:18:51.160446-0400 Runner[3907:853235] flutter: (elided 3 frames from dart:async)
2020-09-02 15:18:51.160467-0400 Runner[3907:853235] flutter:
2020-09-02 15:18:51.160501-0400 Runner[3907:853235] flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
有人知道如何解决此问题吗?我真的很感激:)预先非常感谢!
解决方法
好吧,我想我可以通过仅在构建之前检查控制器是否已初始化来解决。
@override
Widget build(BuildContext context) {
if (_controller == null || !_controller.value.isInitialized) {
return Container();
}
return Scaffold(
backgroundColor: Colors.black,