Я пытаюсь создать приложение чата с Flutter и Firebase, у меня проблема с отправкой изображений. Когда я сохраняю изображение, а затем пытаюсь получить его с помощью getDownloadURL(), приложение показывает много ошибок, я не понимаю, почему.
вот код функции, которая должна отправить изображение другому пользователю:
final FirebaseStorage fireStorage = FirebaseStorage.instance;
sendImage({required File file,required String roomId,required String uid})async {
String ext = file.path.split('.').last;
final ref = fireStorage
.ref()
.child('image/$roomId/${DateTime.now().millisecondsSinceEpoch}.$ext');
ref.putFile(file);
String imageUrl = await ref.getDownloadURL();
FireData().sendMessage(uid, imageUrl, roomId,type: 'image');
}
}
это код функции sendMessage:
Future sendMessage(String uid, String msg, String roomId, {String? type}) async{
String msgId = Uuid().v1();
Message message = Message(
id: msgId,
fromId: myUid,
createdAt: DateTime.now().millisecondsSinceEpoch.toString(),
msg: msg,
read: '',
toId: uid,
type: type ?? 'text'
);
await firestore.collection('rooms').doc(roomId).collection('messages').doc(msgId).set(message.toJson());
}
и вот как я вызываю функцию sendImage:
IconButton(
onPressed: ()async{
ImagePicker picker = ImagePicker();
XFile? image = await picker.pickImage(
source: ImageSource.gallery);
if (image!=null){
FireStorage().sendImage(
file: File(image.path),
roomId: widget.roomId,
uid: widget.chatUser.id!
);
}
}, icon: const Icon(Iconsax.camera)
)
это ошибка, которую я получаю: введите сюда описание изображениявведите сюда описание изображения и, как вы можете видеть здесь, изображение хранится в хранилище: введите сюда описание изображения
я пытался запустить приложение на хроме, но стало только хуже пожалуйста, если кто-нибудь знает, как это решить это сводит меня с ума
проверьте это stackoverflow.com/questions/70058262/…
Я сталкивался с этой проблемой много раз, единственный способ решить это await
при размещении файла:
await ref.putFile(file);
это работает, но есть кое-что, на чем нам следует сосредоточиться:
ref.putFile()
, этот метод возвращает значение, но не в Future
, для чего здесь await
, разве это не нужно!.
это другой вопрос!, ответ на который требует раскрытия конкретной реализации метода putFile
.
Похожие вопросы, раскрывающие ту же проблему.
Кстати: отметьте метод sendMessage как метод void
, он ничего не возвращает, поэтому удалите Future
.
void sendMessage(String uid, String msg, String roomId, {String? type}) async{}
Сделайте то же самое для FireStorage().sendImage
, если он возвращает Future, отметьте его как void
.
Надеюсь, это вам поможет.
При переполнении стека, пожалуйста, не показывайте изображения текста и кода. Скопируйте текст в сам вопрос и отформатируйте его так, чтобы его можно было легко читать, копировать и искать. Вы можете отредактировать вопрос, чтобы исправить это, используя ссылку редактирования внизу.