在 flutter 中将 Html.File 转换为 Uint8List

Converting Html.File to Uint8List in flutter

我正在使用 Drop zone flutter 包。它 returns Html.File 当文件被放入小部件中时。我想把它转换成Io.File或Uint8List格式以便上传。

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;
    });
  }
}