flutter - 在颤动中将 Html.File 转换为 Uint8List
问题描述
我正在使用Drop zone颤振包。当文件被拖放到小部件中时,它会返回Html.File 。我想将其转换为 Io.File 或 Uint8List 格式以便上传。
解决方案
可以使用dart:html包中的FileReader 读取Html 文件:
void loadImage(html.File file) async {
final reader = html.FileReader();
reader.readAsArrayBuffer(file);
await reader.onLoad.first;
setState(() {
imageData = reader.result as Uint8List;
});
}
这是完整的演示小部件:
import 'dart:typed_data';
import 'dart:html' as html;
import 'package:flutter/material.dart';
import 'package:drop_zone/drop_zone.dart';
class DropzoneDemo extends StatefulWidget {
@override
_DropzoneDemoState createState() => _DropzoneDemoState();
}
class _DropzoneDemoState extends State<DropzoneDemo> {
Uint8List? imageData;
@override
Widget build(BuildContext context) => MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Dropzone demo'),
),
body: Center(
child: Container(
child: Stack(
children: [
DropZone(
onDrop: (List<html.File>? files) => loadImage(files![0]),
child: Container(),
),
if (imageData != null)
Center(child: Image.memory(imageData!))
else
Center(child: Text('Drop image here')),
],
),
),
),
),
);
void loadImage(html.File file) async {
final reader = html.FileReader();
reader.readAsArrayBuffer(file);
final res = await reader.onLoad.first;
print('${res.total} bytes loaded');
setState(() {
imageData = reader.result as Uint8List;
});
}
}
推荐阅读
- c++ - 如何在 C++ 中移动字母表中的一个字母?
- python - ipywidgets.interact 给出以下错误
尽管有最新版本的软件包。给出了详细的细分 - c++ - 在 alglib::real_1d_array 中取元素总和的奇怪错误
- c# - 源服务器和符号服务器 Azure Dev-Ops
- ruby-on-rails - Rails 5在gem railtie中有条件地需要一个依赖的gem及其初始化器
- javascript - 在 React 中使用 fullcalendar v4 导入 rrule 插件
- rest - 在 Azure 中获取访问令牌时用户名或密码不正确
- java - 在 OKHTTP 中实现双向间歇性数据通信
- powershell - O365 使用 DeliverToMailboxAndForward 设置邮箱
- xcode - Safari extension builded with Xcode, disappears from Safari after rebuild