![](/img/trans.png)
[英]How to solve the getter 'value' was called on null in flutter
[英]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
,请尝试Run
或Restart
您的应用程序而不是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.