Flutter 在flatter中将图像作为字符串存储在Sqlite中并对其进行解码

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

我想将图像作为base64字符串存储在Flatter中的Sqlite中,然后将base64解码为图像并显示它。下面是我的实用程序代码,它具有对base64进行编码和解码的功能:

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());