进入相机屏幕时出现短错误屏幕

问题描述

我对飞镖游戏比较陌生,并创建了一个使用相机的应用程序。整个应用程序运行正常,我唯一的问题是,每当我进入相机屏幕时,都会收到一秒钟的错误消息。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,

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...