Flutter 在Flatter Web中上载多个文件(图像)

Flutter 在Flatter Web中上载多个文件(图像),flutter,web,dart,Flutter,Web,Dart,我希望用户在一个上载文件元素中上载(到本地内存)多个文件。我用的是颤振网。下面是我当前的代码。有什么想法吗 import 'package:flutter/material.dart'; import 'dart:html' as html; import 'dart:typed_data'; import 'package:phototags/pages/tags_page.dart'; class HomePage extends StatefulWidget { HomePage(

我希望用户在一个上载文件元素中上载(到本地内存)多个文件。我用的是颤振网。下面是我当前的代码。有什么想法吗

import 'package:flutter/material.dart';
import 'dart:html' as html;
import 'dart:typed_data';

import 'package:phototags/pages/tags_page.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // Code idea from: https://github.com/rjcalifornia/web_upload/blob/master/lib/widgets/web_upload.dart
  List<Uint8List> _selectedFilesBytes;
  GlobalKey<FormState> _formKey = new GlobalKey<FormState>();
  List<Widget> children = [];

  void startWebFilePicker() async {
    html.InputElement uploadInput = html.FileUploadInputElement();
    uploadInput.multiple = true;
    uploadInput.draggable = true;
    uploadInput.click();

    uploadInput.onChange.listen((e) {
      final files = uploadInput.files;

     // _selectedFilesBytes = [];
      for (var i = 0; i < files.length; i++) {
        final file = files[i];
        final reader = new html.FileReader();
        reader.onLoadEnd.listen((event) {
          _selectedFilesBytes.add(reader.result);
        });
        reader.onError.listen((event) {
          print('there was an error');
        });
        reader.readAsArrayBuffer(file);
      }
      setState(() {
        for (var imageBytes in _selectedFilesBytes) {
            children.add(Image.memory(imageBytes));
          }
      });
    });
  }
导入“包装:颤振/材料.省道”;
将“dart:html”导入为html;
导入“dart:键入的_数据”;
导入“package:phototags/pages/tags_page.dart”;
类主页扩展了StatefulWidget{
主页({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
//代码来自:https://github.com/rjcalifornia/web_upload/blob/master/lib/widgets/web_upload.dart
列出所选文件字节;
GlobalKey _formKey=新的GlobalKey();
列出子项=[];
void startWebFilePicker()异步{
html.InputElement uploadInput=html.FileUploadInputElement();
uploadInput.multiple=true;
uploadInput.draggable=true;
上传输入。单击();
uploadInput.onChange.listen((e){
最终文件=uploadInput.files;
//_selectedFilesBytes=[];
对于(var i=0;i

当前代码未显示任何错误,但似乎未将任何内容加载到“\u selectedFilesBytes”变量中。

图像的位图似乎存储在临时输入所拥有的内存中,当应用程序进入构建时,该内存会被刷新。我已尝试使用

Image.memory(Uint8List.fromList(reader.result));

直接在for()循环中,将children变量转换为widget级别。这就解决了。

这可能有解决方案: