繁体   English   中英

Flutter 应用程序错误 - 在 null 上调用了 getter 'value'

[英]Flutter app error - getter 'value' was called on null

我正在构建一个应用程序,我需要在“相机”视图之上显示一些内容。 这是我的代码。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';

List<CameraDescription> cameras;

void main() async {
  runApp(new MaterialApp(
    home: new CameraApp(),
  ));

}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => new _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  CameraController controller;
  var cameras;
  bool cameraGot = false;

  Future<Null> getCamera() async {
    cameras = await availableCameras();
    setState(() {
      this.cameras = cameras;
      this.cameraGot = true;
    });
  }

  @override
  void initState() {
    getCamera();
    super.initState();

    if(this.cameraGot) {
      controller = new CameraController(this.cameras[0], ResolutionPreset.medium);
      controller.initialize().then((_) {
        if (!mounted) {
          return;
        }
        setState(() {});
      });
    }

  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {

    // camera widget
    Widget cameraView = new Container(
      child: new Row(children: [
          new Expanded(
            child: new Column(
                children: <Widget>[
                  new AspectRatio(
                    aspectRatio:
                        controller.value.aspectRatio,
                        child: new CameraPreview(controller)
                  )
                ]
            ),
          )
      ])
    );


    return new Scaffold(
      body: new Stack(
        children: <Widget>[
          !this.controller.value.initialized ? new Container() : cameraView,

           // ---On top of Camera view add one mroe widget---

        ],
      ),
    );
  }
}

每当我构建应用程序时,我都会遇到以下错误...

I/flutter ( 6911): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 6911): The following NoSuchMethodError was thrown building CameraApp(dirty, state: _CameraAppState#b6034):
I/flutter ( 6911): The getter 'value' was called on null.
I/flutter ( 6911): Receiver: null
I/flutter ( 6911): Tried calling: value

想不出来出了什么错误。

如果您已经创建并为变量赋值,但仍然显示getter 'value' was called on null ,请尝试RunRestart您的应用程序而不是Hot Reload 因为Hot Reload不会调用initstate() (变量分配它们的值),它只能通过Restarting应用程序来调用。

initState ,您并不总是实例化控制器。

这意味着它可以为null 因此在build方法中,您需要检查 null 以防止崩溃

(!this.controller?.value?.initialized ?? false) ? new Container() : cameraView ,
aspectRatio: (this.controller?.value?.aspectRatio) ?? false

aspectRatio是一个 double 值,当它为null时,您将其分配给false 给它一个双重价值。

我之前遇到过这个问题,并将高度放入AspectRatio的父小部件中修复了它。

为抛出错误的小部件提供高度解决了我的问题

我这样解决了这个问题

children: <Widget>[
    (controller== null)
                      ? Container()
                      : controller.value.Initialized
                          ? Container(child: CameraPreview(controller))
                          : Container(),
    ],

大多数时候。 HOT RESTART (R)将修复此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM