Merge pull request 'Fix #330 - Multiple file browser windows are opened.' (#331) from sender_size into trunk
continuous-integration/drone/push Build is passing Details

Reviewed-on: #331
This commit is contained in:
Dan Ballard 2022-01-21 21:42:41 +00:00
commit 598251a624
4 changed files with 29 additions and 12 deletions

View File

@ -13,6 +13,7 @@ class AppState extends ChangeNotifier {
int _hoveredIndex = -1;
int? _selectedIndex;
bool _unreadMessagesBelow = false;
bool _disableFilePicker = false;
void SetCwtchInit() {
cwtchInit = true;
@ -47,6 +48,12 @@ class AppState extends ChangeNotifier {
notifyListeners();
}
bool get disableFilePicker => _disableFilePicker;
set disableFilePicker(bool newVal) {
this._disableFilePicker = newVal;
notifyListeners();
}
// Never use this for message lookup - can be a non-indexed value
// e.g. -1
int get hoveredIndex => _hoveredIndex;

View File

@ -1,7 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';
import 'package:cwtch/config.dart';
import 'package:cwtch/cwtch_icons_icons.dart';
import 'package:cwtch/models/appstate.dart';
import 'package:cwtch/models/chatmessage.dart';
@ -23,7 +22,6 @@ import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import 'package:path/path.dart' show basename;
import '../main.dart';
import '../settings.dart';
@ -89,11 +87,13 @@ class _MessageViewState extends State<MessageView> {
if (showFileSharing) {
appBarButtons.add(IconButton(
splashRadius: Material.defaultSplashRadius / 2,
icon: Icon(Icons.attach_file, size: 24),
icon: Icon(Icons.attach_file, size: 24, color: Provider.of<Settings>(context).theme.mainTextColor),
tooltip: AppLocalizations.of(context)!.tooltipSendFile,
onPressed: () {
_showFilePicker(context);
},
onPressed: Provider.of<AppState>(context).disableFilePicker
? null
: () {
_showFilePicker(context);
},
));
}
appBarButtons.add(IconButton(
@ -392,9 +392,19 @@ class _MessageViewState extends State<MessageView> {
void _showFilePicker(BuildContext ctx) async {
imagePreview = null;
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
File file = File(result.files.first.path);
// 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...
FilePickerResult? result = await FilePicker.platform.pickFiles(lockParentWindow: true);
appstate.disableFilePicker = false;
if (result != null && result.files.first.path != null) {
File file = File(result.files.first.path!);
// We have a maximum number of bytes we can represent in terms of
// a manifest (see : https://git.openprivacy.ca/cwtch.im/cwtch/src/branch/master/protocol/files/manifest.go#L25)
if (file.lengthSync() <= 10737418240) {

View File

@ -112,14 +112,14 @@ packages:
name: file_picker
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
version: "4.3.2"
file_picker_desktop:
dependency: "direct main"
description:
name: file_picker_desktop
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter

View File

@ -41,7 +41,7 @@ dependencies:
flutter_test:
sdk: flutter
scrollable_positioned_list: ^0.2.0-nullsafety.0
file_picker: ^4.0.1
file_picker: ^4.3.2
file_picker_desktop: ^1.1.0
url_launcher: ^6.0.12