首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我只有一个Image.memory时,如何使用Stream<List<int>>在颤振网络中显示图像?数据类型?

当我只有一个Image.memory时,如何使用Stream<List<int>>在颤振网络中显示图像?数据类型?
EN

Stack Overflow用户
提问于 2021-04-30 20:58:18
回答 1查看 1.3K关注 0票数 2

概述:

我使用文件选择库允许用户从他们的设备中选择一个或多个文件。在使用HTTP/Multipart将所选文件发送到存储之前,所选文件将具有预览功能。

问题:文件选择器库返回一个List\<PlatformFile>,我可以访问Uint8List?Stream<List\<int>>?

readStreamwithData设置为True并不会同时返回Uint8List?Stream<List\<int>>? --在我看来,这将是有帮助的。

如果我使用Uint8List?,我可以使用颤振Image.memory方法加载文件,但是我不能使用Uint8List来使用http.MultiPartFile.fromBytes(),因为它只接受一个List<int>

或者,如果我使用Stream<List<int>>?,我可以使用http.MultipartFile()并传入Stream<List\<int>>?,但是我不知道如何使用Stream<List\<int>>?生成文件/图像的预览。

我考虑过但不确定如何完成的事情

1-有没有办法将Uint8List?转换为List<int>?

2-是否有使用Uint8List?发送文件的替代方法?

3-是否有从文件选择器结果同时接收Uint8List?Stream<List\<int>>?的方法?

我在下面复制了一些片段,但是如果你需要更多的信息,请告诉我。(谢谢你提前提供帮助:)

抖动Widget以选择文件

代码语言:javascript
运行
复制
Text(
              "Open the File Browser",
              style: TextStyle(
                  color: kPrimaryBlue,
                  fontWeight: FontWeight.bold,
                  fontSize: 20),
            ),
            onPressed: () async {
              try {
                FilePickerResult? result =
                    await FilePicker.platform.pickFiles(
                  type: FileType.any,
                  allowMultiple: true,
                  withReadStream: false,
                  withData: true,
                );

                if (result != null) {
                  for (var file in result.files) {
                    files.add(file);
                  }
                } else {
                  print('No Files Were Selected');
                }
              } catch (ex) {
                print(ex);
              }

向端点发送文件的HTTP请求:

var uri = Uri.parse('https://hookb.in/7ZGKQE8ZDOua99D3RwMD');var请求= http.MultipartRequest('POST',uri);

代码语言:javascript
运行
复制
                  for (var file in files) {
                    request.files.add(http.MultipartFile(
                        "files", file.readStream!, file.size!,
                        filename: file.name));
                  }

                  var response = await request.send();
                  if (response.statusCode == 200) {
                    print('Uploaded!');

                    setState(() {
                      files = [];
                    });

小部件在提交之前显示图像/文件:

代码语言:javascript
运行
复制
Image(
            image: Image.memory(files[index].bytes);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-30 21:10:10

如果我使用Uint8List?我能够使用颤振Image.memory方法加载文件,但是我无法使用Uint8List来使用http.MultiPartFile.fromBytes(),因为它只接受一个列表。

这部分不正确。Uint8List实现了List<int>接口,可以传递给任何需要List<int>的函数/构造函数。因此,您可以使用MultipartFile.fromBytes构造函数。如果您看到输入错误,很可能是因为您没有将可空类型提升为非空类型。

代码语言:javascript
运行
复制
MultipartFile.fromBytes('files', file.bytes!)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67340377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档