How to Pick Files and Images for Upload With Flutter Web ??
plugin image_picker is a flutter plugin library for both iOS and Android that is been used to pick an image from a mobile phone gallery or even you can take a new photo with the camera. So in this article, we will go through how to pick Files and Images for Upload with Flutter Web.
How to Pick Files and Images for Upload With Flutter Web?
You can start by trying with the below code snippet:
first import package like a below:
import 'dart:html'
// variable to hold image to be displayed Uint8List uploadedImage; //method to load image and update `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(() { option1Text = "Some Error occured while reading the file"; }); }); reader.readAsArrayBuffer(file); } }); }
So now, use any widget, like a button, and call the method _startFilePicker()
package image_picker_web and with the result imagePickerWeb returns three different types it can be in the form of Image(widget for preview), byte, File(upload).
So then you can use this to get the values:
html.File _cloudFile; var _fileBytes; Image _imageWidget; Future<void> getMultipleImageInfos() async { var mediaData = await ImagePickerWeb.getImageInfo; String mimeType = mime(Path.basename(mediaData.fileName)); html.File mediaFile = new html.File(mediaData.data, mediaData.fileName, {'type': mimeType}); if (mediaFile != null) { setState(() { _cloudFile = mediaFile; _fileBytes = mediaData.data; _imageWidget = Image.memory(mediaData.data); }); }
Uploading to firebase
import 'package:firebase/firebase.dart' as fb; uploadToFirebase(File file) async { final filePath = 'temp/${DateTime.now()}.png';//path to save Storage try { fb .storage() .refFromURL('urlFromStorage') .child(filePath) .put(file); } catch (e) { print('error:$e'); } }
There are many different approaches but anyone can use this package given here
An example of how to use in Flutter Web is shown below:
class FileUploadButton extends StatelessWidget { @override Widget build(BuildContext context) { return ElevatedButton( child: Text('UPLOAD FILE'), onPressed: () async { var picked = await FilePicker.platform.pickFiles(); if (picked != null) { print(picked.files.first.name); } }, ); } }
So you must note: Flutter web does not support FilePickerResult.path.
import 'package:http/http.dart' as http; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; class FileUploadWithHttp extends StatefulWidget { @override _FileUploadWithHttpState createState() => _FileUploadWithHttpState(); } class _FileUploadWithHttpState extends State<FileUploadWithHttp> { PlatformFile objFile = null; void chooseFileUsingFilePicker() async { //-----pick file by file picker, var result = await FilePicker.platform.pickFiles( withReadStream: true, // this will return PlatformFile object with read stream ); if (result != null) { setState(() { objFile = result.files.single; }); } } void uploadSelectedFile() async { //---Create http package multipart request object final request = http.MultipartRequest( "POST", Uri.parse("Your API URL"), ); //-----add other fields if needed request.fields["id"] = "abc"; //-----add selected file with request request.files.add(new http.MultipartFile( "Your parameter name on server side", objFile.readStream, objFile.size, filename: objFile.name)); //-------Send request var resp = await request.send(); //------Read response String result = await resp.stream.bytesToString(); //-------Your response print(result); } @override Widget build(BuildContext context) { return Container( child: Column( children: [ // Button to choose file using file picker plugin ElevatedButton( child: Text("Choose File"), onPressed: () => chooseFileUsingFilePicker(), ), // Show file name when file is selected if (objFile != null) Text("File name : ${objFile.name}"), // Show file size when file is selected if (objFile != null) Text("File size : ${objFile.size} bytes"), // Show upload button when file is selected if (objFile != null) ElevatedButton( child: Text("Upload"), onPressed: () => uploadSelectedFile(), ), ], ), ); }
Conclusion:
Thank you for reading!! Hope you have learned.
So in this article, we have been through how to pick Files and Images for Upload with Flutter Web.
Keep Learning !!! Keep Fluttering !!! Stay Tuned for more amazing content 🙂
Do let us know in the comments if you are still confused in flutter!! We would love to help you.
Flutter Agency is our portal Platform dedicated to Flutter Technology and Flutter Developers. The portal is full of cool resources from Flutter like Flutter Widget Guide, Flutter Projects, Code libs and etc.
Flutter Agency is one of the most popular online portals dedicated to Flutter Technology and daily thousands of unique visitors come to this portal to enhance their knowledge of Flutter.
2 comments
Leave a comment
Contemporary ventures
Recent blog
ready to get started?
Fill out the form below and we will be in touch soon!
"*" indicates required fields
Tough to read and understand. Pls make it more readable
Thanks for the tip 🙂