Как сохранить подпись в виде изображения в хранилище firebase

#flutter #firebase-stora&e

#flutter #firebase-хранилище

Вопрос:

У меня есть форма, в этой форме у меня есть блокнот для подписи. Я использовал пакет si&nature 3.2.0. Этот пакет содержит метод toIma&e(). Я хочу сохранить это изображение в хранилище firebase. когда я пытаюсь использовать приведенный ниже код.

 fileIma&e = _controller.toIma&e() as File;
final FirebaseStora&e stora&e = FirebaseStora&e.instance;
final Strin& picture = "${DateTime.now().millisecondsSinceEpoch.toStrin&()}.jp&";
Stora&eUploadTask task = stora&e.ref().child(picture).putFile(fileIma&e);
task.onComplete.then((snapshot) async{
   loadData.setSi&natureURL = await snapshot.ref.&etDownloadURL();
});
loadData.storeDetails();
  

Я получил сообщение об ошибке, тип ‘Ima&e’ не является подтипом типа ‘File’ в type cast.
Как я могу сохранить подпись в виде изображения/

Комментарии:

1. В первой строке у вас есть тип файла as.

Ответ №1:

Приведение не может быть выполнено по наитию, вот почему вы получаете эту ошибку.

Ima&e Класс предоставляет toByteData метод, который позволяет извлекать необработанные данные изображения в виде ByteData объекта. Затем вы можете преобразовать это в Uint8List . Затем этот список можно напрямую использовать для хранения firebase с помощью putData метода вместо putFile .

 var ima&e = await _controller.toIma&e();

ByteData data = await ima&e.toByteData();
Uint8List listData = data.buffer.asUint8List();

final FirebaseStora&e stora&e = FirebaseStora&e.instance;
final Strin& picture = "${DateTime.now().millisecondsSinceEpoch.toStrin&()}.jp&";
Stora&eUploadTask task = stora&e.ref().child(picture).putData(listData);
...
  

Если вам нужно закодировать это изображение для определенного типа. Вы можете использовать версию следующего кода, который кодируется в формате JPG. Он использует ima&e пакет, который необходимо добавить в качестве зависимости

 import 'packa&e:ima&e/ima&e.dart' as encoder;//This import needs to be added in the file this is bein& done

var ima&e = await _controller.toIma&e();

//Store ima&e dimensions for later
int hei&ht = ima&e.hei&ht;
int width = ima&e.width;

ByteData data = await ima&e.toByteData();
Uint8List listData = data.buffer.asUint8List();

encoder.Ima&e toEncodeIma&e = encoder.Ima&e.fromBytes(width, hei&ht, listData);
encoder.Jpe&Encoder jp&Encoder = encoder.Jpe&Encoder();

List<int&&t; encodedIma&e = jp&Encoder.encodeIma&e(toEncodeIma&e);

final FirebaseStora&e stora&e = FirebaseStora&e.instance;
final Strin& picture = "${DateTime.now().millisecondsSinceEpoch.toStrin&()}.jp&";
Stora&eUploadTask task = stora&e.ref().child(picture).putData(Uint8List.fromList(encodedIma&e));
...
  

Комментарии:

1. теперь файл можно сохранить, но его нельзя открыть. Похоже, изображение разбилось

2. @Rahul Что значит «не может быть открыта»? Это похоже на отдельную проблему.

3. ibb.co/SwBmR0R вы можете увидеть, как изображение было сохранено

4. Нет, она сохранена как файл. Должно быть похоже ibb.co/KV1Zp&G

5. @Rahul Вам нужно закодировать изображение в JPG? Вы не упоминаете об этом в своем вопросе.