Flutter Web: firebase_storage: MissingPluginException Für die Methode StorageReference # putData wurde keine Implementierung gefunden

Aug 27 2020

Ich versuche, ein Bild im UInt8List-Format in den Firebase-Speicher hochzuladen. Ich verwende "StorageReference.putData". Ich erhalte immer wieder die Fehlermeldung, dass putFile nicht definiert ist. Ich habe auf alle verspäteten Firebase-Pakete aktualisiert und immer noch keinen Erfolg. Ist putData im Flutter Web nicht möglich?

Ich habe versucht, alle Pakete zu aktualisieren und dann "Flattern sauber", "Flattern Pakete bekommen"

Der Grund, warum ich "putFile" nicht verwende, ist, dass Flutter Web dart: io nicht unterstützt, das die spezifische Dateiklasse enthält, die für die Verwendung von putFile erforderlich ist.

Der Fehler:

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

Meine Upload-Funktion:

  Future<StorageTaskSnapshot> uploadImage(Uint8List imageFile, int pos) {
    return storageRef
        .child("posts/${currentUser.uid}/$_postId/$pos.jpg")
        .putData(imageFile)
        .onComplete;
  }

Antworten

1 broken.eggshell Sep 04 2020 at 07:13

Ich habe es endlich geschafft, nachdem ich die Antworten mehrerer anderer Leute miteinander kombiniert hatte. Ich beginne mit einem Bild von image_picker_for_web:

final picker = ImagePicker();
final new_image = await picker.getImage(
    source: source=='gallery' ? ImageSource.gallery : ImageSource.camera,
);

Dann:

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);
}

Dies war das SO, das mich in die richtige Richtung wies: Flutter Web Upload to Firestore