'Upload image picked from Flutter web to firebase storage and to Firestore
I was able to picked up image from flutter web with the code:
Uint8List uploadedImage;
  _startFilePicker() async {
    InputElement uploadInput = FileUploadInputElement();
    uploadInput.click();
    uploadInput.onChange.listen((e) {
      // read file content as dataURL
      final files = uploadInput.files;
      if (files.length == 1) {
        final file = files[0];
        FileReader reader =  FileReader();
        reader.onLoadEnd.listen((e) {
          setState(() {
            uploadedImage = reader.result;
          });
        });
        reader.onError.listen((fileEvent) {
          setState(() {
            Text( "Some Error occured while reading the file");
          });
        });
        reader.readAsArrayBuffer(file);
      }
    });
  }
  Widget uploadImage() {
    return Container(
      width: 530,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          uploadedImage == null ? CircleAvatar(
            radius: 60,
            backgroundColor: Colors.grey[100],
            backgroundImage: AssetImage('assets/images/profileavatar.png'),
          ):
            CircleAvatar(
              radius: 65,
              backgroundImage: AssetImage('assets/images/backgroundslide.gif'),
              child: CircleAvatar(
                radius: 60,
                backgroundImage: MemoryImage(uploadedImage),
              ),
            )  ,
          SizedBox(
            width: 20,
          ),
          uploadedImage == null ? RaisedButton(
            color: Colors.orange,
            onPressed: () {
              _startFilePicker();
            },
            child: Text(
              'Aggiungi un immagine profilo',
              style: TextStyle(color: Colors.white, fontSize: 12),
            ),
          ): RaisedButton(
            color: Colors.orange,
            onPressed: () {
              _startFilePicker();
            },
            child: Text(
              'Modifica immagine profilo',
              style: TextStyle(color: Colors.white, fontSize: 12),
            ),
          ),
        ],
      ),
    );
  }
in that way I got succesfully the image from Desktop. Now I need to upload this image to storage in flutter and get into Collection in Firestore:
var firebaseUser =  FirebaseAuth.instance.currentUser;
  Future<Uri> uploadImageFile(html.File uploadedImage,
      {String imageName}) async {
    fb.StorageReference storageRef = fb.storage().ref('images/$imageName');
    fb.UploadTaskSnapshot uploadTaskSnapshot = await storageRef.put(uploadedImage).future;
    await FirebaseFirestore.instance.collection('ifUser').doc(firebaseUser.uid)
        .update({"avatarImage": uploadImageFile(uploadedImage),});
    Uri imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
    return imageUri;
  }
when I call the function uploadImageFile(uploadedImage);
I get error:
The argument type 'Uint8List' can't be assigned to the parameter type 'File'. Is that a right way?
Solution 1:[1]
From the error it seems like the upload expects a File and you are passing Uint8List.
You can try using this to convert the data before uploading it to storage.
File.fromRawPath(Uint8List uint8List);
Solution 2:[2]
Change this line from:
    fb.UploadTaskSnapshot uploadTaskSnapshot = await         
    storageRef.put(uploadedImage).future;
To:
    fb.UploadTaskSnapshot uploadTaskSnapshot = await         
    storageRef.putData(uploadedImage).future;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Artemis Georgakopoulou | 
| Solution 2 | arab abdo | 
