gpt4 book ai didi

flutter-web - 如何让文件被选中

转载 作者:行者123 更新时间:2023-12-02 03:09:24 24 4
gpt4 key购买 nike

我正在使用旧版本构建一个 flutter web。我有一个 FileUploadInputElement。我需要从该元素中选择文件。

@override
Widget build(BuildContext context) {
FileUploadInputElement fileUploadInputElement = FileUploadInputElement();
ui.platformViewRegistry.registerViewFactory(
'animation-Image-html', (int viewId) => fileUploadInputElement);



return SizedBox(
child: HtmlElementView(
viewType: 'animation-Image-html',
),
);
}

最佳答案

您可以直接使用element.files属性来访问文件并使用Filreader来自 dart:html 的类。我在下面创建了一个示例来向您展示如何读取文本文件和图像。此示例基于FileReader examples在另一篇文章中。

访问文件

这里的 elementFileUploadInputElement 引用。

element.files[0] 或在多个文件的情况下 element.files

设置文件阅读器

  String option1Text = "Initialized text option1";
Uint8List uploadedImage;
FileUploadInputElement element = FileUploadInputElement()..id = "file_input";
// setup File Reader
FileReader fileReader = FileReader();

使用FileReader读取文件

fileReader.readAsText(element.files[0])

连接加载事件的监听器

fileReader.onLoad.listen((data) {
setState(() {
option1Text = fileReader.result;
});
});

连接错误事件

fileReader.onError.listen((fileEvent) {
setState(() {
option1Text = "Some Error occured while reading the file";
});
});

使用Image.memory显示字节数组中的图像。

Image.memory(uploadedImage)

Note: In the following example we choose a file and click the respective button to handle the file reading. But the same can be achieved by connecting the logic in respective events of the FileUploadInputElement element in a similar approach. eg: element.onLoad.listen or element.onError.listen event streams.

完整示例 enter image description here

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

class FileUploadTester extends StatefulWidget {
@override
_FileUploadTesterState createState() => _FileUploadTesterState();
}

class _FileUploadTesterState extends State<FileUploadTester> {
String option1Text = "Initialized text option1";
Uint8List uploadedImage;
FileUploadInputElement element = FileUploadInputElement()..id = "file_input";
// setup File Reader
FileReader fileReader = FileReader();

// reader.onerror = (evt) => print("error ${reader.error.code}");
@override
Widget build(BuildContext context) {
ui.platformViewRegistry.registerViewFactory("add_input", (int viewId) {
return element;
});
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
FlatButton(
color: Colors.indigoAccent,
child: Text('ReadFile'),
onPressed: () {
fileReader.onLoad.listen((data) {
setState(() {
option1Text = fileReader.result;
});
});
fileReader.onError.listen((fileEvent) {
setState(() {
option1Text = "Some Error occured while reading the file";
});
});
fileReader.readAsText(element.files[0]);
},
),
Expanded(
child: Container(
child: Text(option1Text),
),
),
Expanded(child: HtmlElementView(viewType: 'add_input')),
Expanded(
child: uploadedImage == null
? Container(
child: Text('Uploaded image should shwo here.'),
)
: Container(
child: Image.memory(uploadedImage),
),
),
FlatButton(
child: Text('Show Image'),
color: Colors.tealAccent,
onPressed: () {
fileReader.onLoad.listen((data) {
setState(() {
uploadedImage = fileReader.result;
});
});
fileReader.onError.listen((fileEvent) {
setState(() {
option1Text = "Some Error occured while reading the file";
});
});
fileReader.readAsArrayBuffer(element.files[0]);
},
),
],
);
}
}

如下

关于flutter-web - 如何让文件被选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58120098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com