我正在使用 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);
答案 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);