Support single selection in DirPicker

This commit is contained in:
Ming Ming 2021-10-21 05:00:47 +08:00
parent aadde09440
commit 25acd91c44

View file

@ -18,6 +18,7 @@ class DirPicker extends StatefulWidget {
required this.account, required this.account,
required this.rootDir, required this.rootDir,
this.initialPicks, this.initialPicks,
this.isMultipleSelections = true,
this.validator, this.validator,
this.onConfirmed, this.onConfirmed,
}) : super(key: key); }) : super(key: key);
@ -27,6 +28,7 @@ class DirPicker extends StatefulWidget {
final Account account; final Account account;
final String rootDir; final String rootDir;
final bool isMultipleSelections;
final List<File>? initialPicks; final List<File>? initialPicks;
/// Return whether [dir] is a valid target to be picked /// Return whether [dir] is a valid target to be picked
@ -135,14 +137,20 @@ class DirPickerState extends State<DirPicker> {
if (canPick) { if (canPick) {
switch (pickState) { switch (pickState) {
case _PickState.picked: case _PickState.picked:
iconData = Icons.check_box; iconData = widget.isMultipleSelections
? Icons.check_box
: Icons.radio_button_checked;
break; break;
case _PickState.childPicked: case _PickState.childPicked:
iconData = Icons.indeterminate_check_box; iconData = widget.isMultipleSelections
? Icons.indeterminate_check_box
: Icons.remove_circle_outline;
break; break;
case _PickState.notPicked: case _PickState.notPicked:
default: default:
iconData = Icons.check_box_outline_blank; iconData = widget.isMultipleSelections
? Icons.check_box_outline_blank
: Icons.radio_button_unchecked;
break; break;
} }
} }
@ -230,6 +238,9 @@ class DirPickerState extends State<DirPicker> {
/// Pick an item /// Pick an item
void _pick(LsDirBlocItem item) { void _pick(LsDirBlocItem item) {
setState(() { setState(() {
if (!widget.isMultipleSelections) {
_picks.clear();
}
_picks.add(item.file); _picks.add(item.file);
_picks = _optimizePicks(_root); _picks = _optimizePicks(_root);
}); });