flutter 为什么它不会显示我选择的UI屏幕文件的文件名?需要这个问题的帮助

jvlzgdj9  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(111)

这是我的代码,它可以选择文件

FilePickerResult? result;
    String _fileName = '';
    PlatformFile? pickedfile;
    File? fileToDisplay;

代码的延续:

void pickFile() async {
      try {
      result = (await FilePicker.platform
          .pickFiles(type: FileType.any, allowMultiple: false))!;
      if (result != null) {
        List<File> files = result!.paths.map((path) => File(path!)).toList();
        _fileName = result!.files.first.name;
        pickedfile = result!.files.first;
        fileToDisplay = File(pickedfile!.path.toString());
      }
    } catch (e) {
      print(e);
     }
    }

我想在UI中显示的代码,单击文件后,文件名将显示在UI中

ElevatedButton(
                      onPressed: () {
                        pickFile();
                      },
                      style: ElevatedButton.styleFrom(
                        minimumSize: const Size(71, 28),
                        backgroundColor: Color(0xFFAECAD6),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(4),
                        ),
                      ),
                      label: Text(
                        'Add File',
                        style: TextStyle(
                            fontSize: 12,
                            fontWeight: FontWeight.w400,
                            color: Colors.black),
                      ),
                    ),
                  ],
                ),

显示文本的代码

Column(
                  children: [
                    Container(
                        height: 150,
                        width: double.infinity,
                        color: Colors.white,
                        child: Text(_fileName))
                  ],
                ),
3pvhb19x

3pvhb19x1#

你需要等待文件选取器选择文件,然后更新状态。要等待任何特定代码,你只需要在代码前添加async关键字,但该方法或代码应该是未来的。要更新状态,请使用setState函数。对GestureDetector的pickFile函数和onTap函数进行以下更改。
选择文件():-

Future<void> pickFile() async { // add Future keyword.
  try {
  result = (await FilePicker.platform
      .pickFiles(type: FileType.any, allowMultiple: false))!;
  if (result != null) {
    List<File> files = result!.paths.map((path) => File(path!)).toList();
    _fileName = result!.files.first.name;
    pickedfile = result!.files.first;
    fileToDisplay = File(pickedfile!.path.toString());
  }
} catch (e) {
  print(e);
 }
}

点击:-

onTap: (() async {
    await pickFile(); // wait for the file.
    setState(() {});
}),

输出:-

相关问题