【问题标题】:Flutter: 'Lost connection to device.' second time using image_picker to select photo from gallery on iOS颤振:“失去与设备的连接。”第二次使用 image_picker 从 iOS 上的图库中选择照片
【发布时间】:2021-01-20 06:44:05
【问题描述】:

我正在开发一个需要用户从图库中选择图像的移动应用程序。

我正在使用 image_picker:^0.6.7+11,这是我的代码:

if (await Permission.photos.request().isGranted) {
    try {
      final image =
          await ImagePicker().getImage(source: ImageSource.gallery);
      if (image != null) {
        photo.clearData();
        File _image = File(image.path);
        photo.addOriginal(_image);
      } else {
        print('no image selected');
      }
    } on PlatformException catch (e) {
      print('Platform exception $e');
    } catch (e) {
      print('Unknown error: $e');
    }
  }

在安卓模拟器中,一切正常。在 iOS 模拟器中,我可以选择一张图片,但如果我尝试选择第二张图片,则应用程序崩溃并“与设备失去连接”。在运行选项卡中打印 - 但没有错误。

问题:如何解决此问题,以便我可以返回图库并在 iOS 上多次选择不同的图像?

在调试时我遇到了这个:

PlatformException(multiple_request, Cancelled by a second request, null, null)

我已经在这里找到了尽可能多的类似问题,GitHub 等...我有:

  • 升级的颤振
  • 升级的 pub 文件
  • 扑干净
  • 在 Xcode 中清理和构建
  • 在颤振代码中添加了“imageCache.clear()”
  • 在 android studio 中使缓存失效并重新启动
  • flutter doctor -v:未发现问题
  • 检查了权限(info.plist 并添加了 permission_handler 包)
  • 重启模拟器
  • 已删除模拟器中的所有内容和设置
  • 使用断点进行调试会奇怪地阻止问题发生几次,然后在几次选择后应用再次崩溃¯\(ツ)

我确信它是直截了当的,但我觉得我已经用尽了所有的选择,不知道从这里去哪里。

【问题讨论】:

  • 我也有同样的问题,请问有解决办法吗?
  • 这似乎是 iOS 14 模拟器中的一个错误......我让它在我的物理设备上运行没有任何问题 (13.3.1)
  • 非常感谢。我试试看
  • 同样的问题。热重载后,它再次为一张图像工作正常。
  • @goh 你有没有设法得到这个?对我来说得到完全相同的行为。

标签: ios flutter imagepicker


【解决方案1】:

你的代码是正确的,这是一个模拟器问题,如果你想在 IOS 上测试它,你必须在一个真正的 iPhone 上测试,这里有一个关于你如何正确执行的 sn-p:

final imagePicker = ImagePicker();
    PickedFile pickedFile;
    if (fileType == FileType.Camera) {
      // Camera Part
      pickedFile = await imagePicker.getImage(
        source: ImageSource.camera,
        maxWidth: 480,
        maxHeight: 640,
        imageQuality: 25, // pick your desired quality
      );
      setState(() {
        if (pickedFile != null) {
          _storedFile = File(pickedFile.path);
        } else {
          print('No image selected.');
          return;
        }
      });
    } else if (fileType == FileType.Gallery) {
      // Gallery Part
      pickedFile = await imagePicker.getImage(
        source: ImageSource.gallery,
        maxWidth: 480,
        maxHeight: 640,
        imageQuality: 25,
      );
        } else {
          print('No image selected.');
          return;
        }
      });
    }

并且当用户选择他想要获取图像的方式时不要忘记枚举:

enum FileType {
  Gallery,
  Camera,
  Video,
}

编辑: 每当您添加依赖于本机代码的包时,您应该重新启动整个应用程序构建 b 停止构建并再次重新启动它,以便本机代码编译良好,不要忘记在将此包放入您的 pubspec.yaml 之前重新启动

希望对您有所帮助,如果此答案对您有所帮助,请不要忘记标记为已回答并点赞。

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2020-08-21
    • 1970-01-01
    • 2020-10-21
    • 2021-12-16
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多