Showing picked files in list view in flutter

Issue

I am working with flutter. I implement filePicker(), to choose files and show them in a listView.But when I pick a new file, listview removes the previous files and shows only the new one. The code is attached below. I am glad if someone helps.

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

class pickFile extends StatefulWidget {
const pickFile({Key? key}) : super(key: key);
@override
State<pickFile> createState() => _pickFileState();
}
class _pickFileState extends State<pickFile> {
List<PlatformFile> files = [];

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text("Add"),
    actions: [
      IconButton(
        icon: const Icon(Icons.add),
        onPressed: () async {
          final result = await FilePicker.platform
              .pickFiles(withReadStream: true, allowMultiple: true);

          if (result == null) return;
          files = result.files;
          setState(() {});
        },
      ),
    ],
  ),
  body: Container(
    color: Colors.blue,
    width: 420,
    height: 200,
    child: show(files: files),
  ),
);}}

//////////////////////////////////////////////////////////

 import 'package:file_picker/src/platform_file.dart';
 import 'package:flutter/material.dart';

 Widget show({
 required List<PlatformFile> files,
 }) {
 return ListView.builder(
 itemCount: files.length,
 itemBuilder: (context, index) {
  final file = files[index];
  return buildFile(file);
 },
 );}
Widget buildFile(PlatformFile file) {
final kb = file.size / 1024;
final mb = kb / 1024;
final size =
  (mb >= 1) ? '${mb.toStringAsFixed(2)} MB' : '${kb.toStringAsFixed(2)} KB';
return Container(
color: Colors.amber,
child: InkWell(
  onTap: () => null,
  child: Container(
    height: 100,
    width: 200,
    color: Colors.red,
    child: ListTile(
      leading: (file.extension == 'jpg' || file.extension == 'png')
          ? Image.file(
              File(file.path.toString()),
              width: 80,
              height: 80,
            )
          : Container(
              width: 80,
              height: 80,
            ),
      title: Text('${file.name}'),
      subtitle: Text('${file.extension}'),
      trailing: Text(
        '$size',
        style: TextStyle(fontWeight: FontWeight.w700),
      ),
    ),
  ),
 ),);}

Solution

that because you every time when to add a file you set a new value to the list
and remove the old files

,
you need to add the file to existing list like this code below

 onPressed: () async {
  final result = await FilePicker.platform
      .pickFiles(withReadStream: true, allowMultiple: true);

  if (result == null) return;
  files.add(result.files);
  setState(() {});
},

Answered By – Ali Nabel

Answer Checked By – Katrina (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *