mirror of
https://github.com/johrpan/musicus_mobile.git
synced 2025-10-26 18:57:25 +01:00
Add directory mode to files selector
This commit is contained in:
parent
24a4911665
commit
ad7499051b
1 changed files with 32 additions and 7 deletions
|
|
@ -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,6 +82,7 @@ class _FilesSelectorState extends State<FilesSelector> {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} else if (fse is File) {
|
} else if (fse is File) {
|
||||||
|
if (widget.mode == FilesSelectorMode.files) {
|
||||||
result = CheckboxListTile(
|
result = CheckboxListTile(
|
||||||
value: selectedPaths.contains(fse.path),
|
value: selectedPaths.contains(fse.path),
|
||||||
secondary: Icon(Icons.insert_drive_file),
|
secondary: Icon(Icons.insert_drive_file),
|
||||||
|
|
@ -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
|
||||||
|
? IconButton(
|
||||||
icon: const Icon(Icons.arrow_upward),
|
icon: const Icon(Icons.arrow_upward),
|
||||||
onPressed: up,
|
onPressed: up,
|
||||||
) : null,
|
)
|
||||||
|
: null,
|
||||||
title: Text(directories.isEmpty
|
title: Text(directories.isEmpty
|
||||||
? 'Storage devices'
|
? 'Storage devices'
|
||||||
: directories.last.path),
|
: directories.last.path),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue