Flutter Web: firebase_storage: MissingPluginException StorageReference # putData yöntemi için uygulama bulunamadı
Firebase depolamaya UInt8List biçiminde bir resim yüklemeye çalışıyorum. "StorageReference.putData" kullanıyorum. PutFile'ın tanımlı olmadığını söyleyerek bu hatayı alıyorum. Tüm sıralı firebase paketlerini güncelledim ve hala başarılı olamadım. PutData, Flutter Web'de mümkün değil mi?
Tüm paketleri güncellemeye çalıştım ve ardından 'flutter clean', 'flutter paketleri get'
"PutFile" kullanmamamın nedeni, Flutter Web'in putFile kullanımı için gereken belirli File sınıfını tutan dart: io'yu desteklememesidir.
Hata:
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
Yükleme işlevim:
Future<StorageTaskSnapshot> uploadImage(Uint8List imageFile, int pos) {
return storageRef
.child("posts/${currentUser.uid}/$_postId/$pos.jpg")
.putData(imageFile)
.onComplete;
}
Yanıtlar
Sonunda birkaç kişinin yanıtını melezledikten sonra bunu işe yaradım. İmage_picker_for_web'den bir resimle başlıyorum:
final picker = ImagePicker();
final new_image = await picker.getImage(
source: source=='gallery' ? ImageSource.gallery : ImageSource.camera,
);
Sonra:
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);
}
Bu beni doğru yöne yönlendiren SO idi: Firestore'a Flutter Web Yüklemesi