File_picker / Image_picker 在移动设备上的 Flutter Web 上崩溃

File_picker / Image_picker crashes on Flutter web from mobile

提问人:LiiOr 提问时间:10/28/2023 最后编辑:LiiOr 更新时间:10/28/2023 访问量:31

问:

我有一个 flutter Web 应用程序,我正在尝试在其中集成拍照功能。我尝试了 file_picker 软件包,但由于某种原因,应用程序有时会崩溃。这似乎是与设备相关的内存问题。我在 Iphone SE 和三星 S21 上进行了测试。这是允许我收集图像的代码:

pickImage(Question question, context) async {
  try {
    FilePickerResult? result = await FilePicker.platform
        .pickFiles(type: FileType.image, allowMultiple: true, allowCompression: true);
    if (result != null && result.files.isNotEmpty) {
      for (int i = 0; i < result.files.length; i++) {
        PlatformFile file = result.files[i];
        Uint8List? imageBytes = file.bytes!;
        Uint8List? compressedImage = await compressImage(imageBytes);
        question.addImage(
            'IMG_${DateTime.now().millisecondsSinceEpoch.toString()}'); 
        question.addImageData(compressedImage);
        imageBytes = null; compressedImage = null;
      }
      result = null;
    }
  } catch(e) {
    print('ImagePicker failed : $e');
  }
}

Future<Uint8List> compressImage(Uint8List imageBytes) async {
  final List<int> compressedBytes = await FlutterImageCompress.compressWithList(
    imageBytes,
    quality: 10,
  );
  return Uint8List.fromList(compressedBytes);
}

在前面的代码中,我尝试通过将变量设置为 null 来释放内存,但问题仍然存在,我不明白为什么。我应该使用另一个包吗?

编辑我刚刚尝试了另一个软件包,image_picker,当我从手机上使用 PWA 时,一切都是一样的。选择几张图像后,没有错误消息,但应用程序崩溃并重新加载......

final ImagePicker picker = ImagePicker();

Future<void> _pickImage() async {
    try {
      final XFile? pickedFile =
          await picker.pickImage(source: ImageSource.camera);
      if (pickedFile != null) {
        final imageBytes = await pickedFile.readAsBytes();
        final base64Image = base64Encode(imageBytes);
        setState(() {
          imgList.add(base64Image);
        });
      }
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text(e.toString()),
        ),
      );
    }
  }

我做错了什么?提前感谢您的帮助。

Flutter 移动 崩溃 图像选择器 FilePicker

评论

0赞 Md. Yeasin Sheikh 10/28/2023
你能确定有数据吗file.bytes
0赞 LiiOr 10/28/2023
我确定file.bytes,因为我将“compressedImage”存储到数据库中,并稍后在我的应用程序中检索图像。实际上,这段代码是有效的。但是当移动内存似乎已满时,它有时会崩溃
0赞 Cabdirashiid 10/28/2023
你能用错误更新问题吗?
0赞 LiiOr 10/28/2023
我刚刚编辑了我的帖子。但实际上没有错误消息,因为我正在通过手机使用此应用程序。我拍了几张照片,它可以工作并显示我的图像,然后我尝试拍摄另一张照片,但它崩溃了:(
0赞 LiiOr 12/22/2023
回到我的图像选择器功能,我仍然有崩溃问题。:(

答: 暂无答案