flutter - 构建函数返回 null。有问题的小部件是:StoryCamera
问题描述
我试图在此页面上显示完整的相机显示,当我运行它时,它返回 null。这是我的第一次尝试,创建了一个相机页面,所以事情可能会到处都是。
StoryCamera.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
List<CameraDescription> cameras;
//CameraController controller;
class StoryCamera extends StatefulWidget {
final String currentUser;
StoryCamera({this.currentUser});
@override
_StoryCameraState createState() => _StoryCameraState();
}
class _StoryCameraState extends State<StoryCamera> {
CameraController _controller;
Future<void> _initializeControllerFuture;
bool isCameraReady = false;
bool showCapturedPhoto = false;
var ImagePath;
get pageStatus => 1;
@override
void initState() {
super.initState();
_initializeCamera();
}
Future<void> _initializeCamera() async {
final cameras = await availableCameras();
final firstCamera = cameras.first;
_controller = CameraController(firstCamera, ResolutionPreset.high);
_initializeControllerFuture = _controller.initialize();
if (!mounted) {
return Container();
}
setState(() {
isCameraReady = true;
});
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
_controller != null
? _initializeControllerFuture = _controller.initialize()
: null; //on pause camera is disposed, so we need to call again "issue is only for android"
}
}
void onCaptureButtonPressed() async {
//on camera button press
try {
final path = join(
(await getTemporaryDirectory()).path, //Temporary path
'$pageStatus${DateTime.now()}.png',
);
ImagePath = path;
await _controller.takePicture(path); //take photo
setState(() {
showCapturedPhoto = true;
});
} catch (e) {
print(e);
}
}
@override
void dispose() {
_controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
final deviceRatio = size.width / size.height;
FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return Stack(
children: <Widget>[
Center(
child: Transform.scale(
scale: _controller.value.aspectRatio / deviceRatio,
child: new AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: new CameraPreview(_controller),
),
),
),
],
);
} else {
return Container(
child:
CircularProgressIndicator()); // Otherwise, display a loading indicator.
}
},
);
}
}
该错误还指向将您导航到此页面之前的页面。
StoryPage.dart
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => StoryCamera())),
谁能告诉我为什么会这样?
解决方案
您需要添加退货
return FutureBuilder<void>(
推荐阅读
- server - 我无法在 hyper v manager 工具上互相 ping 两个 Vms
- c++ - 井字游戏与随机硬币翻转
- ruby-on-rails - 如何在rails的银行账户应用程序中添加账户模型和交易模型之间的关联?
- javascript - 如何仅使用 JavaScript 将提示中的输入添加到本地时间?
- javascript - 如何在时间上寻找重叠 - Javascript和时刻
- javascript - 构建应用程序后未找到基于路由的代码拆分块,仅用于更深的路由
- matlab - 如何用对数函数求解二次问题?(在Matlab中)
- python - 如何测试这个 GEDCOM 解析器?
- iis - VS ISSExpress 可以截图,但是普通的 IIS 不能
- vmware - 哪个 vCenter Server Applience 5.5 服务应该在 443/tcp 端口上运行?