flutter 抖动- availableCameras()返回空列表

mm9b1k5b  于 2023-02-05  发布在  Flutter
关注(0)|答案(2)|浏览(215)

这段代码前一段时间运行良好,但现在却无缘无故地出现问题,我尝试重新安装应用程序2次,但没有成功,可能是什么原因导致的?它之前给了我一个可用相机的列表,但在热重启后,代码不断中断。

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  cameras = await availableCameras(); // returns an empty list, which it shouldn't because I'm using a real device which has two physical cameras, all dependencies are added, all permissions are allowed.

  runApp(
    MyApp(),
  );
}

注:当我尝试访问摄像机列表时出现错误,但它在两小时前就可以访问,为什么现在返回空列表?

ef1yzkbh

ef1yzkbh1#

对于所有你可能做了同样的错误,因为我复制粘贴“相机”代码从pubdev,请记住,“相机”的代码是为成为主页,这意味着_camers初始化为:

List<CameraDescription> _cameras = <CameraDescription>[];

但填充它的是main()函数角色,因此如果您从页面外部调用CameraApp(),main将不会被触发,因此您需要如下修改该类:

class CameraApp extends StatelessWidget {
  /// Default Constructor
  const CameraApp({Key? key, required this.cameras}) : super(key: key);

  final List<CameraDescription> cameras;
  @override
  Widget build(BuildContext context) {
    _cameras=cameras;
  return const MaterialApp(
      home: CameraExampleHome(),

    );
  }
}

并从另一个页面调用它:

await availableCameras().then((value) => Navigator.push(context,
                              MaterialPageRoute(builder: (_) => CameraApp(cameras: value))));

就像摄像头被适当地填充。这是我的工作解决方案。可能的改进:也许相机列表可以直接在CameraApp中填写?

nlejzf6q

nlejzf6q2#

这个错误最有可能是由于“相机”插件的内部工作或由于Android操作系统的安全原因或类似的东西。相机包是新的,所以你可以预料到这样的行为,但有一堆其他增强包以及基于原来的一个。在我的情况下,我使用“flutter_camera”并根据我的需要修改源代码,以实现所需的UI,而且效果很好。
更新:我发现该错误与我的app/build中的“compileSdkVersion”间接相关。gradle被设置为33,这是一个随机抖动插件所需的,将其设置为29允许我访问我的相机并成功执行availableCameras()方法,但随后插件无法使用。

相关问题