打开相机时 Flutter Image_Picker 崩溃 iOS 应用

Posted

技术标签:

【中文标题】打开相机时 Flutter Image_Picker 崩溃 iOS 应用【英文标题】:Flutter Image_Picker crash iOS app when open Camera 【发布时间】:2021-11-19 22:39:57 【问题描述】:

当我打开图库或相机时,在 android 中一切正常,但是当我在 ios(模拟器和真实设备)上尝试时,图库运行完美,但只要我按下相机选项,应用程序崩溃而没有控制台仅记录“丢失连接到设备”

 // get image File camera
 _getFromCamera(BuildContext context) async 
   XFile? pickedFile = await ImagePicker().pickImage(
     source: ImageSource.camera,
     maxWidth: 1800,
     maxHeight: 1800,
   );
   File rotatedImage =
       await FlutterExifRotation.rotateAndSaveImage(path: pickedFile!.path);
   if (pickedFile != null) 
     image = rotatedImage;
     //File(pickedFile.path);
     final userId = widget.id;
     widget.bloc.uploadProfilePicture(image, userId);
   
 

Then I called the function in a Icon button

TextButton.icon(
                     icon: Icon(
                       Icons.photo_camera,
                       color: Theme.of(context).primaryColor,
                     ),
                     label: Text(
                       AppLocalization.of(context)!
                           .getTranslatedValues("cameraLbl")!,
                       style: TextStyle(
                           color: Theme.of(context).colorScheme.secondary,
                           fontWeight: FontWeight.bold),
                     ),
                     onPressed: () 
                       _getFromCamera(context);
                       Navigator.of(context).pop();
                     ,
                   )

【问题讨论】:

【参考方案1】:

您必须在 info.plist 文件中添加额外的权限

在其中添加这些条目:

<key>NSPhotoLibraryUsageDescription</key>
<string>Needs PhotoLib access</string>

<key>NSCameraUsageDescription</key>
<string>Needs camera access</string>

在flutter应用中添加权限,需要在android manifest和info.plist文件中添加权限。

您还可以在字符串标签中使用任何字符串,该字符串将显示给用户,作为用户需要授予权限的原因。

【讨论】:

以上是关于打开相机时 Flutter Image_Picker 崩溃 iOS 应用的主要内容,如果未能解决你的问题,请参考以下文章

使用相机功能时,Flutter 应用程序崩溃并从启动画面重新启动

为啥相机不颤抖打开?

无法在 webview_flutter 中加载相机

选择 CameraDevice.rear 时,Flutter ImagePicker 以自拍模式打开

有没有办法让颤动的 webview 使用 android 相机进行文件上传?如何在 webview_flutter 中打开文件选择器?

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好