flutter - 将 Uint8List 转换为 flutter web 中的文件

标签 flutter dart flutter-web dart-html uint8array

您好,我在 flutter web 中上传图像并将其发送到服务器时遇到问题

我需要将图像文件类型发送到服务器

在我问之前,我会向你展示我正在努力的代码

import 'dart:html';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:web_checkup/model/provider/reservation_provider.dart';

class CompanionImage extends StatefulWidget {
  const CompanionImage({Key? key}) : super(key: key);

  @override
  State<CompanionImage> createState() => _CompanionImageState();
}

class _CompanionImageState extends State<CompanionImage> {
  late ReservationPvd reservationPvd = context.read<ReservationPvd>();
  Uint8List webImage = Uint8List(8);
  bool uploaded = false;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        margin: EdgeInsets.only(bottom: 20),
        decoration: BoxDecoration(borderRadius: BorderRadius.circular(100)),
        child: Stack(
          children: <Widget>[
            InkWell(
              highlightColor: Colors.transparent,
              splashColor: Colors.transparent,
              onTap: () => pickImage(),
              child: Container(
                height: 120,
                width: 120,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(100.0),
                ),
                child: uploaded ? Image.memory(webImage) : Image.asset('assets/images/paw.png'),
              ),
            ),
            Positioned(
              bottom: 0,
              right: 0,
              child: Container(
                width: 40,
                height: 40,
                decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  color: Colors.white,
                  border: Border.all(color: Color(0xFFe0e0e0)),
                ),
                padding: EdgeInsets.all(0),
                alignment: Alignment.center,
                child: IconButton(
                  icon: Icon(Icons.camera_alt, size: 20, color: Color(0xFFaaaaaa)),
                  onPressed: () => pickImage(),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  pickImage() async {
    final ImagePicker picker = ImagePicker();
    XFile? image = await picker.pickImage(source: ImageSource.gallery);
    var f = await image!.readAsBytes();
    setState(() {
      webImage = f;
      uploaded = true;
    });
    reservationPvd.updateInfo('imageFile', webImage);
  }
}

所以我想做的就是将 Xfile 制作为文件 就像下面的代码

File _file = image 

其他事情也是将 Uint8List 写入文件

File _file = webImage

像这样

我用谷歌搜索了超过 4 天,但没找到 在 Flutterweb 中使 UintList 既不向文件也不向文件 XFile 的一些示例

有人知道如何在 Flutterweb 中转换 File 类型吗?

p.s我已经尝试过Universal_io或...其他一些软件包,Flutter版本是3.0.5

最佳答案

为什么需要解析成File,用XFile就可以了。当上传到分段时,只需从 XFile 获取字节即可上传。

关于flutter - 将 Uint8List 转换为 flutter web 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73301256/

相关文章:

javascript - 如何禁用嵌入式 Flutter Web 应用的滚动操作?

flutter - DateFormat Flutter我正在以这种格式获取日期表格json api “2020-04-18T00:00:00”,但是我想要这种格式 “dd-mm-yyyy”

dart - 在 Dart 中将类静态工厂作为方法参数传递

dart - 在 ListView 中滚动时项目状态发生变化

flutter - flutter 中的 SuperScript 和 SubScript

flutter - 在拍打状态下显示警报

flutter - 文件名与扩展名混合

flutter - 检查此函数结果的简写是什么?

dart - 等待流脉冲x时间,然后继续

当指针到达边缘时 flutter 滚动屏幕