我正在开发相机应用程序。我正在使用以下相机插件 - https://github.com/flutter/plugins/tree/master/packages/camera
这是我的工作代码 -
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
List<CameraDescription> cameras;
Future<Null> main() async {
cameras = await availableCameras();
runApp(new MaterialApp(
home: new CameraApp(),
));
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => new _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
CameraController controller;
@override
void initState() {
super.initState();
controller = new CameraController(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>[
(!controller.value.initialized) ? new Container() : cameraView,
// ---On top of Camera view add one mroe widget---
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
当我构建应用程序时,我收到以下错误...
I/flutter ( 2097): The following NoSuchMethodError was thrown building CameraApp(dirty, state: _CameraAppState#a0666):
I/flutter ( 2097): The getter 'height' was called on null.
I/flutter ( 2097): Receiver: null
I/flutter ( 2097): Tried calling: height
Run Code Online (Sandbox Code Playgroud)
即使您在 Stack 的主体中有三元运算符,Widget cameraView无论是否要使用它,您都在创建- 因此无论controller.value.initialized是真还是假,它都会被创建。调整代码,以便仅在需要时才构建 CameraPreview 树,即如果初始化为 true。例如:
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Stack(
children: <Widget>[
(!controller.value.initialized) ? new Container() : buildCameraView(),
// ---On top of Camera view add one mroe widget---
],
),
);
}
Widget buildCameraView() {
return new Container(
child: new Row(
children: [
new Expanded(
child: new Column(
children: <Widget>[
new AspectRatio(
aspectRatio: controller.value.aspectRatio,
child: new CameraPreview(controller),
),
],
),
),
],
),
);
}
Run Code Online (Sandbox Code Playgroud)
正如您在评论中所建议的那样,您也可以将构建树中的三元运算符移到较低的位置,并将 AspectRatio 替换为空的容器。
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |