Ответ 1
Вы можете преобразовать Uint8List
в виджет Flutter Image
используя конструктор Image.memory
. (Используйте конструктор Uint8List.fromList
для преобразования List
в Uint8List
при необходимости.) Вы можете использовать BASE64.encode
чтобы пойти другим путем.
Вот пример кода.
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData.dark(),
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
State createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
String _base64;
@override
void initState() {
super.initState();
(() async {
http.Response response = await http.get(
'https://flutter.io/images/flutter-mark-square-100.png',
);
if (mounted) {
setState(() {
_base64 = BASE64.encode(response.bodyBytes);
});
}
})();
}
@override
Widget build(BuildContext context) {
if (_base64 == null)
return new Container();
Uint8List bytes = BASE64.decode(_base64);
return new Scaffold(
appBar: new AppBar(title: new Text('Example App')),
body: new ListTile(
leading: new Image.memory(bytes),
title: new Text(_base64),
),
);
}
}
Однако, как правило, плохая идея хранить большие двоичные объекты двоичных данных в вашей базе данных. Это не играет на сильных сторонах базы данных Firebase в реальном времени, и вы в конечном итоге будете тратить пропускную способность на передачу ненужных вам данных, а также на ненужное кодирование и декодирование. Вместо этого вы должны использовать плагин firebase_storage
, сохраняя путь или URL загрузки изображения в базе данных.