Add directory mode to files selector

This commit is contained in:
Elias Projahn 2020-03-27 17:44:04 +01:00
parent 24a4911665
commit ad7499051b

View file

@ -4,7 +4,18 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
enum FilesSelectorMode {
files,
directory,
}
class FilesSelector extends StatefulWidget { class FilesSelector extends StatefulWidget {
final FilesSelectorMode mode;
FilesSelector({
this.mode = FilesSelectorMode.files,
});
@override @override
_FilesSelectorState createState() => _FilesSelectorState(); _FilesSelectorState createState() => _FilesSelectorState();
} }
@ -71,7 +82,8 @@ class _FilesSelectorState extends State<FilesSelector> {
}, },
); );
} else if (fse is File) { } else if (fse is File) {
result = CheckboxListTile( if (widget.mode == FilesSelectorMode.files) {
result = CheckboxListTile(
value: selectedPaths.contains(fse.path), value: selectedPaths.contains(fse.path),
secondary: Icon(Icons.insert_drive_file), secondary: Icon(Icons.insert_drive_file),
title: Text(path.basename(fse.path)), title: Text(path.basename(fse.path)),
@ -85,6 +97,12 @@ class _FilesSelectorState extends State<FilesSelector> {
}); });
}, },
); );
} else {
result = ListTile(
leading: const Icon(Icons.insert_drive_file),
title: Text(path.basename(fse.path)),
);
}
} }
return result; return result;
@ -101,9 +119,14 @@ class _FilesSelectorState extends State<FilesSelector> {
title: Text('Choose files'), title: Text('Choose files'),
actions: <Widget>[ actions: <Widget>[
FlatButton( FlatButton(
child: Text('DONE'), child: Text(
widget.mode == FilesSelectorMode.files ? 'DONE' : 'SELECT'),
onPressed: () { onPressed: () {
Navigator.pop(context, selectedPaths); Navigator.pop(
context,
widget.mode == FilesSelectorMode.files
? selectedPaths
: directories.last?.path);
}, },
), ),
], ],
@ -113,10 +136,12 @@ class _FilesSelectorState extends State<FilesSelector> {
Material( Material(
elevation: 2.0, elevation: 2.0,
child: ListTile( child: ListTile(
leading: directories.isNotEmpty ? IconButton( leading: directories.isNotEmpty
icon: const Icon(Icons.arrow_upward), ? IconButton(
onPressed: up, icon: const Icon(Icons.arrow_upward),
) : null, onPressed: up,
)
: null,
title: Text(directories.isEmpty title: Text(directories.isEmpty
? 'Storage devices' ? 'Storage devices'
: directories.last.path), : directories.last.path),