0
Hello, I am trying to send via API the image of the user at the time of registration. I need to receive the image in Base64 and receive the image format type, example ("image/png" or "image/jpg").
In my structure I can select the image and store it in cache, but I’m not able to capture the image type (png or jpg).
Also I’m getting the image this way:
File: '/data/user/0/com.example.Myapp/cache/image_picker540161743069966467.jpg'
And I need to receive:
image_picker540161743069966467.jpg
My structure capture the selected user image:
I store it later in a variable to send via POST:
List<int> retrato = userManager.retrato.readAsBytesSync();
'retrato': base64Encode(retrato),
'typeImage': '',
ImageSourceSheet({this.onImageSelected});
  final Function(File) onImageSelected;
  final ImagePicker picker = ImagePicker();
  @override
Widget build(BuildContext context) {
    if (Platform.isAndroid) {
      return BottomSheet(
          onClosing: () {},
          builder: (_) {
            return Column(
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                FlatButton(
                  onPressed: () async {
                    final PickedFile file =
                        await picker.getImage(source: ImageSource.camera);
                    onImageSelected(File(file.path));
                  },
                  child: const Text('Câmera'),
                ),
                FlatButton(
                  onPressed: () async {
                    final PickedFile file =
                        await picker.getImage(source: ImageSource.gallery);
                    onImageSelected(File(file.path));
                  },
                  child: const Text('Galeria'),
                ),
              ],
            );
          });
    } else {
      return CupertinoActionSheet(
        title: const Text('Selecionar imagem'),
        message: const Text('Escolha a origem da imagem'),
        actions: <Widget>[
          CupertinoActionSheetAction(
            onPressed: () async {
              final PickedFile file =
                  await picker.getImage(source: ImageSource.camera);
              onImageSelected(File(file.path));
            },
            child: const Text('Câmera'),
          ),
          CupertinoActionSheetAction(
            onPressed: () async {
              final PickedFile file =
                  await picker.getImage(source: ImageSource.gallery);
              onImageSelected(File(file.path));
            },
            child: const Text('Galeria'),
          ),
        ],
        cancelButton: CupertinoActionSheetAction(
          onPressed: () {
            Navigator.of(context).pop();
          },
          child: const Text('Cancelar'),
        ),
      );
    }
  }
						
Thank you very much, I’m already getting access to what I need. But I have the error "The method 'readAsBytesSync' isn’t defined for the type 'String'." when trying to convert the basename(file.path) string into bytes to encoding in Base64.
– JTeles
@Jteles I suggest asking another question regarding this, but what you should "find" in base 64 is not the name of the file, but the file itself (its contents). The function
readAsBytesSyncis a "File" function and not a String. TryreadAsBytesSync(File(file.path))or something like.– Naslausky