使用 dart:HTML 库在 Flutter Web 中选取文件时如何获取 Flutter 中的文件名?

问题描述

在我的项目中,我定义了一个函数uploadPdf()。 在 Raised Button 上调用这个函数来选择一个文件,它工作正常。它打印文件名。现在我想将该文件名获取到文本小部件。为此,我将 fileName 定义为全局变量,并初始赋值。在 uploadPdf() 函数中调用此变量,以便在获得新值时更新该值,但不会更改。它仍然显示我最初分配的相同值。 谢谢!


//Flutter Full Code
import 'package:flutter/material.dart';
import 'dart:html';

String fileName = "no item selected";

void uploadPdf() {
  InputElement uploadInput = FileUploadInputElement()..accept = 'pdf/*';
  uploadInput.click();
  uploadInput.onChange.listen((event) {
    final file = uploadInput.files.first;
    fileName = file.name;
    print(fileName);
    final reader = FileReader();
    reader.readAsDataUrl(file);
    reader.onLoadEnd.listen((event) {
      print('done');
    });
  });
}

class ButtonChange extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        RaisedButton(
          onPressed: () => uploadPdf(),child: Text("Upload Button"),),Text(fileName)
      ],);
  }
}



解决方法

您需要将 ButtonChange 小部件转换为 StatefulWidget,并将 uploadPdf() 函数移到 state 类中,并在更新文件名后调用 setState

void uploadPdf() {
  InputElement uploadInput = FileUploadInputElement()..accept = 'pdf/*';
  uploadInput.click();
  uploadInput.onChange.listen((event) {
    final file = uploadInput.files.first;
    setState(() {
       fileName = file.name; 
    });
    fileName = file.name;
    print(fileName);
    final reader = FileReader();
    reader.readAsDataUrl(file);
    reader.onLoadEnd.listen((event) {
      print('done');
    });
  });
  
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...