#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? Вы не упоминаете об этом в своем вопросе.