我正在将保存在Firebase数据库中的图像转换为Base64,并希望对其进行解码和编码.我研究了类似的问题,但我仍然遇到错误.这是我到目前为止的情况?
var image1 = String; var pic = event.snapshot.value['image']; var photo = BASE64.decode(pic); image1 = photo;
我收到以下错误...
A value of type "List
如果你能提供一个反向过程来将图像编码到Base64中,那么它们可以保存回Firebase,这将是值得赞赏的.
***更新
这是我的更新代码,仍然会抛出错误.
image1 = event.snapshot.value['image']; var image = BASE64.decode(image1.toString()); new Image.memory(image),
错误是......
FormatException: Invalid Length must be a multiple of 4
您可以使用构造函数将a转换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{ 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存储在数据库中.
使用'dart:convert'
包有一种更简单的方法
Image.memory(base64Decode(base64String));
实现和一些有用的方法:
import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/widgets.dart'; Image imageFromBase64String(String base64String) { return Image.memory(base64Decode(base64String)); } Uint8List dataFromBase64String(String base64String) { return base64Decode(base64String); } String base64String(Uint8List data) { return base64Encode(data); }