Flutter Web: firebase_storage: MissingPluginException ไม่พบการใช้งานสำหรับเมธอด StorageReference # putData
Aug 27 2020
ฉันกำลังพยายามอัปโหลดรูปภาพในรูปแบบ UInt8List ไปยังที่เก็บข้อมูลของ firebase ฉันใช้ "StorageReference.putData" ฉันได้รับข้อผิดพลาดนี้เรื่อย ๆ โดยบอกว่าไม่ได้กำหนด putFile ฉันได้อัปเดตเป็นแพ็คเกจ firebase ทั้งหมดแล้ว แต่ก็ยังไม่สำเร็จ putData เป็นไปไม่ได้บน Flutter Web หรือไม่?
ฉันพยายามอัปเดตแพ็คเกจทั้งหมดแล้ว 'flutter clean', 'flutter package get'
เหตุผลที่ฉันไม่ใช้ "putFile" เนื่องจาก Flutter Web ไม่รองรับ dart: io ซึ่งมีคลาส File เฉพาะที่จำเป็นสำหรับการใช้ putFile
ข้อผิดพลาด:
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
ฟังก์ชั่นการอัปโหลดของฉัน:
Future<StorageTaskSnapshot> uploadImage(Uint8List imageFile, int pos) {
return storageRef
.child("posts/${currentUser.uid}/$_postId/$pos.jpg")
.putData(imageFile)
.onComplete;
}
คำตอบ
1 broken.eggshell Sep 04 2020 at 07:13
ในที่สุดฉันก็สามารถใช้งานได้หลังจากผสมคำตอบของคนอื่น ๆ ฉันเริ่มต้นด้วยรูปภาพจาก image_picker_for_web:
final picker = ImagePicker();
final new_image = await picker.getImage(
source: source=='gallery' ? ImageSource.gallery : ImageSource.camera,
);
จากนั้น:
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);
}
นี่คือสิ่งที่ชี้ให้ฉันไปในทิศทางที่ถูกต้อง: Flutter Web Upload ไปยัง Firestore