1

我在我的应用程序中使用ImagePicker来选择和上传图像,但它最近开始给我错误,并且在选择 png 格式图像时经常出现故障。

出于这个原因,我切换到File picker。但它只是有点作用,我的应用程序仍然卡住了。我只能看到它的显示,不幸的是图像没有存储在后端(jpg 和 jpeg 图像工作正常)。

这是图像选择器代码(如果有使用此包上传 png 图像的解决方法,将不胜感激):

final ImagePicker _picker = ImagePicker();

  Future imageSelectorGallery() async {
    var image = (await _picker.pickImage(
      source: ImageSource.gallery,
    ));
    if (image != null) {
      Uint8List imageBytes = await image
          .readAsBytes(); // A fixed-length list of 8-bit unsigned integers which is the file read as bytes
      String baseimage = base64Encode(imageBytes);
      if (mounted) setState(() {});
      post = baseimage;
      Navigator.push(context,MaterialPageRoute(builder: (context) => CreatePosts(post,user,caption,upvotes)));
    }
  }

这是我已经实现的文件选择器代码,任何找出错误的帮助也将不胜感激:

Future imageSelectorGallery() async {
    FilePickerResult? image = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'],
    );
    if (image != null) {
      Uint8List? imageBytes = image.files.first.bytes;
      String baseimage = base64Encode(imageBytes!);
      if (mounted) setState(() {});
      post = baseimage;
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => CreatePosts(post, user, caption, upvotes)));
    } else {
      print("File picker error");
    }
  }

图像显示使用:

child: Container(
                                height:
                                    MediaQuery.of(context).size.height / 4.3,
                                width: MediaQuery.of(context).size.width / 3.4,
                                decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(30),
                                    image: DecorationImage(
                                      fit: BoxFit.cover,
                                      image: Image.memory(
                                        _bytesImage,
                                        gaplessPlayback: true,
                                      ).image,
                                    ))),
                          ),
4

0 回答 0