FilesSelector: Allow setting a base path

This commit is contained in:
Elias Projahn 2020-03-28 12:27:30 +01:00
parent cbbc5bc7c6
commit 88c9f65649

View file

@ -11,9 +11,11 @@ enum FilesSelectorMode {
class FilesSelector extends StatefulWidget {
final FilesSelectorMode mode;
final String baseDirectory;
FilesSelector({
this.mode = FilesSelectorMode.files,
this.baseDirectory,
});
@override
@ -23,7 +25,8 @@ class FilesSelector extends StatefulWidget {
class _FilesSelectorState extends State<FilesSelector> {
static const platform = MethodChannel('de.johrpan.musicus/platform');
List<Directory> storageRoots = [];
Directory baseDirectory;
List<Directory> storageRoots;
List<Directory> directories = [];
List<FileSystemEntity> contents = [];
Set<String> selectedPaths = {};
@ -32,19 +35,25 @@ class _FilesSelectorState extends State<FilesSelector> {
void initState() {
super.initState();
if (widget.baseDirectory == null) {
platform.invokeListMethod<String>('getStorageRoots').then((sr) {
setState(() {
storageRoots = sr.map((path) => Directory(path)).toList();
});
});
} else {
baseDirectory = Directory(widget.baseDirectory);
openDirectory(baseDirectory);
}
}
@override
Widget build(BuildContext context) {
String titleText;
Widget body;
if (directories.isEmpty) {
if (storageRoots != null) {
if (directories.isEmpty && storageRoots != null) {
titleText = 'Storage devices';
body = ListView(
children: storageRoots
.map((dir) => ListTile(
@ -60,11 +69,13 @@ class _FilesSelectorState extends State<FilesSelector> {
))
.toList(),
);
} else if (contents != null) {
if (directories.isEmpty) {
titleText = 'Base directory';
} else {
body = Container();
titleText = path.basename(directories.last.path);
}
} else {
if (contents != null) {
body = ListView(
children: contents.map((fse) {
Widget result;
@ -111,7 +122,6 @@ class _FilesSelectorState extends State<FilesSelector> {
} else {
body = Container();
}
}
return WillPopScope(
child: Scaffold(
@ -142,9 +152,7 @@ class _FilesSelectorState extends State<FilesSelector> {
onPressed: up,
)
: null,
title: Text(directories.isEmpty
? 'Storage devices'
: directories.last.path),
title: Text(titleText),
),
),
Expanded(
@ -200,6 +208,8 @@ class _FilesSelectorState extends State<FilesSelector> {
if (directories.isNotEmpty) {
openDirectory(directories.last);
} else if (baseDirectory != null) {
openDirectory(baseDirectory);
}
}
}