Fix: 344 - Folder Selection on Settings can be Opened Multiple times
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
Sarah Jamie Lewis 2022-03-21 10:49:08 -07:00
parent 27f4c5f00e
commit 65d5e9777d
2 changed files with 35 additions and 20 deletions

View File

@ -42,3 +42,17 @@ Future<String?> showCreateFilePicker(BuildContext ctx) async {
appstate.disableFilePicker = false;
return result;
}
Future<String?> showSelectDirectoryPicker(BuildContext ctx) async {
// only allow one file picker at a time
// note: ideally we would destroy file picker when leaving a conversation
// but we don't currently have that option.
// we need to store AppState in a variable because ctx might be destroyed
// while awaiting for pickFiles.
var appstate = Provider.of<AppState>(ctx, listen: false);
appstate.disableFilePicker = true;
// currently lockParentWindow only works on Windows...
String? result = await FilePicker.platform.getDirectoryPath(lockParentWindow: true);
appstate.disableFilePicker = false;
return result;
}

View File

@ -1,4 +1,7 @@
import 'package:cwtch/config.dart';
import 'package:cwtch/controllers/filesharing.dart';
import 'package:cwtch/cwtch_icons_icons.dart';
import 'package:cwtch/models/appstate.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'dart:io';
@ -43,27 +46,25 @@ class _CwtchFolderPickerState extends State<CwtchFolderPicker> {
testKey: widget.testKey,
controller: ctrlrVal,
readonly: Platform.isAndroid,
onPressed: () async {
if (Platform.isAndroid) {
return;
}
onPressed: Provider.of<AppState>(context).disableFilePicker
? null
: () async {
if (Platform.isAndroid) {
return;
}
try {
var selectedDirectory = await getDirectoryPath();
if (selectedDirectory != null) {
//File directory = File(selectedDirectory);
selectedDirectory += "/";
ctrlrVal.text = selectedDirectory;
if (widget.onSave != null) {
widget.onSave!(selectedDirectory);
}
} else {
// User canceled the picker
}
} catch (e) {
print(e);
}
},
var selectedDirectory = await showSelectDirectoryPicker(context);
if (selectedDirectory != null) {
//File directory = File(selectedDirectory);
selectedDirectory += "/";
ctrlrVal.text = selectedDirectory;
if (widget.onSave != null) {
widget.onSave!(selectedDirectory);
}
} else {
// User canceled the picker
}
},
onChanged: widget.onSave,
icon: Icon(Icons.folder),
tooltip: widget.tooltip,