Flutter 中的 Future<Uint8List> 到 Base64 或 PNG

Ser*_* OE 6 android cross-platform dart flutter

我需要Future<Uint8List>在 Flutter 中将 a 转换为 Base64 或 PNG,我使用这个 pub来获取签名并将其导出,但是当我调用toPngBytes()方法(pub 中的方法)时,它返回 aFuture<Uint8List>并且我需要将其转换为Base64格式或List<int>至少ByteData格式,我无法将其转换为对我来说更可用的格式,任何人都可以帮助我解决这个问题。

_controller.toPngBytes(); // _controller is a variable that holds info about my signature.
Run Code Online (Sandbox Code Playgroud)

Bam*_*oUA 13

import 'dart:convert';

// async variant
final imageData = await _controller.toPngBytes(); // must be called in async method
final imageEncoded = base64.encode(imageData); // returns base64 string

// callback variant
_controller.toPngBytes().then((data) {
 final imageEncoded = base64.encode(data); 
});
Run Code Online (Sandbox Code Playgroud)

  • 当然,我尝试过,但它不适用,因为 `toPngBytes()` 返回 `Future&lt;Uint8List&gt;` 但 `base64Encode()` 采用参数类型 `List&lt;int&gt;` (2认同)

Leo*_*ese 6

这个函数让我正确地将图像上传到Xano

import 'dart:convert';
import 'dart:typed_data';

String uint8ListTob64(Uint8List uint8list) {
  String base64String = base64Encode(uint8list);
  String header = "data:image/png;base64,";
  return header + base64String;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式将图像转换为 Uint8List:

String path = "image.png";
File file = File(path);
Uint8List uint8list = file.readAsBytesSync();
//or
Uint8List uint8list = await file.readAsBytes();
Run Code Online (Sandbox Code Playgroud)