Flutter 在flatter中将图像作为字符串存储在Sqlite中并对其进行解码
我想将图像作为base64字符串存储在Flatter中的Sqlite中,然后将base64解码为图像并显示它。下面是我的实用程序代码,它具有对base64进行编码和解码的功能:Flutter 在flatter中将图像作为字符串存储在Sqlite中并对其进行解码,flutter,dart,Flutter,Dart,我想将图像作为base64字符串存储在Flatter中的Sqlite中,然后将base64解码为图像并显示它。下面是我的实用程序代码,它具有对base64进行编码和解码的功能: import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'dart:convert'; class Utility { static Image imageFromBase64String(String base64Str
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'dart:convert';
class Utility {
static Image imageFromBase64String(String base64String) {
return Image.memory(
base64Decode(base64String),
fit: BoxFit.fill,
);
}
static Uint8List dataFromBase64String(String base64String) {
return base64Decode(base64String);
}
static String base64String(Uint8List data) {
return base64Encode(data);
}
}
现在我有了这个函数,它应该使用图像选择器从gallery中拾取图像,然后将其编码为base64,但我得到了一个错误:
_getImage() {
picker.getImage(source: ImageSource.gallery).then((imgFile) {
String imgString = Utility.base64String(imgFile.readAsBytes());
});
}
错误:
The argument type 'Future<Uint8List>' can't be assigned to the parameter type 'Uint8List'.
我做错了什么,还有,如果你们知道一个好的干净的方法来存储base64字符串,然后在Flatter中用Sqlite对其进行解码,请告诉我。谢谢大家!
编辑
当我添加readAsBytesSync
时,我得到了这个错误,不确定问题是什么:
The method 'readAsBytesSync' isn't defined for the type 'PickedFile'. Try correcting the name to the name of an existing method, or defining a method named 'readAsBytesSync'.
如果你查一下电话号码。您可以看到readAsBytes
函数返回Future
,这就是为什么会出现该错误。要解决此问题,必须使用readAsBytesSync
,它返回Uint8List
替换:
String imgString = Utility.base64String(imgFile.readAsBytes());
与:
更新:
图像选择器使用一个名为的类来提供文件详细信息bac,该类不支持readAsBytesSync
。因此,您可以使用:
final file = File(imgFile.path);
String imgString = Utility.base64String(file.readAsBytesSync());
或者了解到,每当你看到未来的价值时,你就忘记了在某处等待@RandalSchwartz您是对的:)每个Flatter开发人员都应该记住这一点,但我已经尝试了readAsBytesSync,但随后出现了以下错误:
没有为类型“PickedFile”定义方法“readAsBytesSync”。尝试将名称更正为现有方法的名称,或定义一个名为“readAsBytesSync”的方法。
@arbiter Yeah,该方法使用自定义类处理文件,但不支持上述方法。我已经更新了我的答案。请查收
String imgString = Utility.base64String(imgFile.readAsBytesSync());
final file = File(imgFile.path);
String imgString = Utility.base64String(file.readAsBytesSync());