Flutter 进入摄像头屏幕时出现短错误屏幕

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

我对dart比较陌生,并创建了一个应用程序,使用相机。整个应用程序运行良好,我唯一的问题是,每次进入摄像头屏幕时,我都会在几秒钟内收到一条错误消息。然后一切正常。前一个屏幕只是一个主屏幕,它不会将任何内容传递到相机屏幕

这是摄像头屏幕的代码

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,