首页 > 解决方案 > 如何使用 ListView 显示?

问题描述

我有一个文件选择器按钮,当我单击我的按钮时,我可以选择我的文件并将其添加到列表中。使用列表视图生成器在 UI 中显示文件名......问题是我只能列出两个项目,而其他选定的文件没有显示。但我可以打印列表中的所有值。这是我的代码...

在此处输入图像描述

import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  //final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  String _fileName;
  List<PlatformFile> _paths;

  String _extension;
  bool _loadingPath = false;
  bool _multiPick = false;
  FileType _pickingType = FileType.any;

  List<String> _files = [];

  void _openFileExplorer() async {
    setState(() => _loadingPath = true);
    try {
      _paths = (await FilePicker.platform.pickFiles(
        type: _pickingType,
        allowMultiple: _multiPick,
        allowedExtensions: (_extension?.isNotEmpty ?? false)
            ? _extension?.replaceAll(' ', '').split(',')
            : null,
      ))
          ?.files;
    } on PlatformException catch (e) {
      print("Unsupported operation" + e.toString());
    } catch (ex) {
      print(ex);
    }
    if (!mounted) return;
    setState(() {
      _loadingPath = false;
      print(_paths.first.extension);
      _fileName = _paths != null ? _paths.map((e) => e.name).toString() : '...';
      _files.add(_fileName);
      print(_files);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('File Picker'),
        ),
        body: Center(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                child: Text('Get documents'),
                onPressed: _openFileExplorer,
              ),
              SizedBox(
                width: double.infinity,
                height: 100,
                child: ListView.builder(
                  shrinkWrap: true,
                  itemCount: _files.length,
                  itemBuilder: (BuildContext ctxt, int index) {
                    return SizedBox(
                      width: double.infinity,
                      height: 50,
                      child: Card(
                          elevation: 5,
                          shadowColor: Colors.black,
                          color: Colors.greenAccent[100],
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceAround,
                            children: [
                              Icon(Icons.image),
                              Text(_files[index]),
                              Icon(Icons.close),
                            ],
                          )),
                    );
                  },
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

标签: androidflutterlistview

解决方案


推荐阅读