RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1317598
Accepted
Sergey
Sergey
Asked:2022-08-14 20:02:11 +0000 UTC2022-08-14 20:02:11 +0000 UTC 2022-08-14 20:02:11 +0000 UTC

包装相机一秒钟出现错误在 null 上调用了 getter 'value'

  • 772

错误描述
======== 小部件库捕获的异常 在
构建 MyHomePage(dirty, state: _MyHomePageState#ef271) 时引发了以下 NoSuchMethodError:
在 null 上调用了 getter 'value'。
接收者:空
尝试调用:值

相关的导致错误的小部件是:MyHomePage file:///D:/project/flutter/f1/lib/main.dart:20:
11
#0 Object.noSuchMethod (dart:core-patch /object_patch.dart:51:5)
#1 _MyHomePageState.build (package:f1/main.dart:80:25)
#2 StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
# 3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4627:15)
#4 StatefulElement.performRebuild(package:flutter/src/widgets/framework.dart:4800:11)

出现红色错误屏幕一秒钟,然后一切正常
在此处输入图像描述

此外, main.dart的完整代码

import 'package:flutter/material.dart';

import 'package:camera/camera.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 CameraController _cameraController;

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

 }

 @override
 void dispose() {
  super.dispose();
  _cameraController.dispose();

 }

 void _f1() {
  setState(() {

  });
 }

 Future<void> _funInitialization() async {

  List<CameraDescription> cameras = await availableCameras();

  _cameraController = CameraController(
   cameras[0],
   ResolutionPreset.max
  )..initialize().then((_) {
   if (!mounted) {
    return;
   }
   setState(() {});
  });

 }

 @override
 Widget build(BuildContext context) {

  if(!_cameraController.value.isInitialized) {
   return Container();
  }

  return Stack(
   children: [
    Align(
     alignment: Alignment.center,
     /*child: AspectRatio(
      aspectRatio: 3 / 4,
      child: CameraPreview(_cameraController),
     ),*/
     child: Container(
      width: MediaQuery.of(context).size.width,
      child: CameraPreview(_cameraController),
     ),
    ),
   ],
  );

 }

}
flutter
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    yar85
    2022-08-16T04:38:34Z2022-08-16T04:38:34Z

    对于初学者,有必要查看错误的根源。
    在它的堆栈跟踪中,我们看到一行告诉我们在类构建器函数中发生了错误_MyHomePageState——这是调用堆栈的倒数第二个元素:

    #1 _MyHomePageState.build (package:f1/main.dart:80:25)
    

    ,如果我们查看这个函数的代码来访问属性value,那么即使没有调试器通过,我们也可以很容易地确定:错误是由于_cameraController启动时的值实际上是事实引起的null(这就是错误文字告诉我们)。

    也就是说,该方法在使用值初始化该变量之前build访问控制器实例变量。因此,该错误一直持续到初始化后执行重绘。


    作为这种烦人情况的解决方法,我们可以runApp在调用之前添加以下表达式:

    WidgetsFlutterBinding.ensureInitialized();
    

    - 这会强制初始化小部件和 Flutter 引擎之间的软件层,但前提是需要这样的初始化。
    // 事实上,这一行在启动应用程序时解决了很多类似的问题——在这种情况下不仅仅是这个包。

    这样做建议和。相机包文档。这是其中的一个示例片段:

    import 'dart:async';
    import 'package:flutter/material.dart';
    import 'package:camera/camera.dart';
    
    List<CameraDescription> cameras;
    
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();   // ◄◄◄
    
      cameras = await availableCameras();
      runApp(CameraApp());
    }
    
    /* .... */
    

    我想马上说清楚:flutter 推荐这种显式初始化“仅当需要在调用之前绑定runApp”。
    但是,它也可以作为安全网来完成——据我所知,它不会造成任何伤害。也就是说,调用这个初始化方法并不可怕,而且只是在准备对象的顺序不确定时(尤其是从其外部依赖项)。这只是为了确保当应用程序启动时,绑定到引擎的小部件已准备好工作。

    • 3

相关问题

  • 1 秒后打印每个列表值

  • 颤振函数调用

  • 如何将代码分配给参数

  • 如何在字符串中放置空格?

  • 更改 Firestore 中的布尔值

  • 显示数据

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5