未处理的异常:“Uint8List”类型不是“int”类型的子类型

时间:2020-12-22 06:29:52

标签: flutter dart

我正在使用 Dio 尝试获取以二进制形式存储在数据库中的图像流。每当我尝试从 Flutter 获取图像时,我都会遇到错误

<块引用>

未处理的异常:“Uint8List”类型不是“int”类型的子类型

当前设置流将二进制数据转换为 List(Uint8List),但我需要它是 List(int)

我将不胜感激

到目前为止我做了什么

var imageBinary = await Dio().get(userUri + "/" + id.toString(), options: Options(headers: {"authorization": "Bearer $token"}, responseType: ResponseType.stream));
    var temp = await imageBinary.data.stream.toList();
    img = List.from(temp);
    photo = Image.memory(img);

2 个答案:

答案 0 :(得分:0)

嗯,看来 asTypedList 应该这样做:

文档: 创建由地址空间中的内存支持的类型化列表视图。 返回的视图将允许访问从地址到地址 + 长度的内存范围。 用户必须确保在使用返回列表时可以访问内存范围。 https://api.dart.dev/stable/2.6.0/dart-ffi/Uint8Pointer/asTypedList.html

external Uint8List asTypedList(int length);

答案 1 :(得分:0)

List<Uint8List> 基本上是 List<List<int>>,因此将其转换为 List<int> 您必须将其展平。以下代码段应该可以做到这一点。

  var img = List.from(temp).expand((i) => i).toList(); 

但我认为在您的特定场景中使用 ReponseType.bytes 更好。这是一个意见,因为您正在等待下一行开始获取它的流。也许,您共享的代码只是针对这个问题,而实际上,您可能有充分的理由使用流。但我想提一下。

如果您想使用 ResponseType.bytes

var imageBinary = await Dio().get(userUri + "/" + id.toString(), options: Options(headers: {"authorization": "Bearer $token"}, responseType: ResponseType.bytes));
var img = imageBinary.data; // this will be UintList8 (or in other words List<int>
var photo = Image.memory(img);