场景
我试图在我的Flutter应用程序中启动相机流屏幕,以便使用google_ml_kit_face_detection捕获自拍照。为此,我需要将ResolutionPreset
设置为CameraController
对象。我正在使用Flutter的camera
插件。
我从system_info_plus
获取手机的RAM,它返回一个Future〈int?〉。
在我的initState()
中,我调用函数以获取RAM值,然后调用函数以通过传递基于手机RAM的ResolutionPreset
来初始化CameraController
对象。
我的密码
CameraController? _controller;
int? deviceMemory;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await getDeviceMemory();
initCameraLens();
await startLive();
});
}
Future<void> getDeviceMemory() async {
deviceMemory = await SystemInfoPlus.physicalMemory; // returns in MB
}
void initCameraLens() {
// relevant code
}
Future<void> startLive() async {
final camera = cameras[_cameraIndex];
// setup camera controller
_controller = CameraController(
camera,
deviceMemory != null
? deviceMemory! <= 3072
? ResolutionPreset.low
: ResolutionPreset.high
: ResolutionPreset.high,
enableAudio: false,
);
// start streaming using camera
_controller?.initialize().then((_) {
if (!mounted) {
return;
}
// process camera image to get an instance of input image
_controller?.startImageStream(_processCameraImage);
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
fit: StackFit.expand,
children: [
_controller != null ?
CameraPreview(_controller!) :
Container(
width: 100.w,
height: 100.h,
color: Colors.black,
),
],
),
),
}
面临的问题
当这个屏幕启动时,在短短的一两秒钟内,我得到以下错误:构建CaptureFaceScreen(dirty,state:_CaptureFaceScreenState#38f97):在空值上使用的空检查运算符,在此之后相机开始工作,并且从那时起一切顺利运行。
申请
我想知道是什么导致了我的代码中的这个异常,以及如何解决这个问题。
2条答案
按热度按时间wydwbb8l1#
我认为
getDeviceMemory()
不够快。所以试着在它旁边添加一个.then
,这样它就不会继续,直到getDeviceMemory()
完成。您不应该需要使用
WidgetsBinding.instance.addPostFrameCallback((_)
z9zf31ra2#
我通过使用一些静态数据初始化
CameraController
对象,然后通过initState()
调用中的相关函数设置所需的值来管理解决方案。而不是:
我正在做: