Flutter Web: firebase_storage: MissingPluginException Tidak ditemukan implementasi untuk metode StorageReference # putData
Saya mencoba mengupload gambar dalam format UInt8List ke penyimpanan firebase. Saya menggunakan "StorageReference.putData". Saya terus mendapatkan kesalahan ini yang mengatakan bahwa putFile tidak ditentukan. Saya telah memperbarui ke semua paket firebase terbaru dan masih tidak berhasil. Apakah putData tidak memungkinkan di Flutter Web?
Saya telah mencoba memperbarui semua paket dan kemudian 'flutter clean', 'flutter packages get'
Alasan saya tidak menggunakan "putFile" adalah karena Flutter Web tidak mendukung dart: io yang menampung kelas File spesifik yang diperlukan untuk menggunakan putFile.
Kesalahan:
Error: MissingPluginException(No implementation found for method StorageReference#putData on channel plugins.flutter.io/firebase_storage)
at Object.throw_ [as throw] (http://localhost:60357/dart_sdk.js:4331:11)
at MethodChannel._invokeMethod (http://localhost:60357/packages/flutter/src/services/system_channels.dart.lib.js:942:21)
at _invokeMethod.next (<anonymous>)
at http://localhost:60357/dart_sdk.js:37593:33
at _RootZone.runUnary (http://localhost:60357/dart_sdk.js:37447:58)
at _FutureListener.thenAwait.handleValue (http://localhost:60357/dart_sdk.js:32424:29)
at handleValueCallback (http://localhost:60357/dart_sdk.js:32971:49)
at Function._propagateToListeners (http://localhost:60357/dart_sdk.js:33009:17)
at _Future.new.[_completeWithValue] (http://localhost:60357/dart_sdk.js:32852:23)
at async._AsyncCallbackEntry.new.callback (http://localhost:60357/dart_sdk.js:32874:35)
at Object._microtaskLoop (http://localhost:60357/dart_sdk.js:37708:13)
at _startMicrotaskLoop (http://localhost:60357/dart_sdk.js:37714:13)
at http://localhost:60357/dart_sdk.js:33226:9
Fungsi unggahan saya:
Future<StorageTaskSnapshot> uploadImage(Uint8List imageFile, int pos) {
return storageRef
.child("posts/${currentUser.uid}/$_postId/$pos.jpg")
.putData(imageFile)
.onComplete;
}
Jawaban
Saya akhirnya mendapatkan ini untuk bekerja setelah menggabungkan jawaban beberapa orang lain. Saya mulai dengan gambar dari image_picker_for_web:
final picker = ImagePicker();
final new_image = await picker.getImage(
source: source=='gallery' ? ImageSource.gallery : ImageSource.camera,
);
Kemudian:
String url;
var bytes = await new_image.readAsBytes();
try {
fb.StorageReference _storage = fb.storage().ref('002test');
fb.UploadTaskSnapshot uploadTaskSnapshot = await _storage.put(bytes, fb.UploadMetadata(contentType: 'image/png')).future;
var imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
url = imageUri.toString();
} catch (e) {
print(e);
}
Ini adalah SO yang mengarahkan saya ke arah yang benar: Flutter Web Upload ke Firestore