Fix #330 - Multiple file browser windows are opened.
continuous-integration/drone/pr Build is passing
Details
continuous-integration/drone/pr Build is passing
Details
This commit is contained in:
parent
508592f80c
commit
748326e13f
|
@ -13,6 +13,7 @@ class AppState extends ChangeNotifier {
|
||||||
int _hoveredIndex = -1;
|
int _hoveredIndex = -1;
|
||||||
int? _selectedIndex;
|
int? _selectedIndex;
|
||||||
bool _unreadMessagesBelow = false;
|
bool _unreadMessagesBelow = false;
|
||||||
|
bool _disableFilePicker = false;
|
||||||
|
|
||||||
void SetCwtchInit() {
|
void SetCwtchInit() {
|
||||||
cwtchInit = true;
|
cwtchInit = true;
|
||||||
|
@ -47,6 +48,12 @@ class AppState extends ChangeNotifier {
|
||||||
notifyListeners();
|
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
|
// Never use this for message lookup - can be a non-indexed value
|
||||||
// e.g. -1
|
// e.g. -1
|
||||||
int get hoveredIndex => _hoveredIndex;
|
int get hoveredIndex => _hoveredIndex;
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:crypto/crypto.dart';
|
import 'package:crypto/crypto.dart';
|
||||||
import 'package:cwtch/config.dart';
|
|
||||||
import 'package:cwtch/cwtch_icons_icons.dart';
|
import 'package:cwtch/cwtch_icons_icons.dart';
|
||||||
import 'package:cwtch/models/appstate.dart';
|
import 'package:cwtch/models/appstate.dart';
|
||||||
import 'package:cwtch/models/chatmessage.dart';
|
import 'package:cwtch/models/chatmessage.dart';
|
||||||
|
@ -23,7 +22,6 @@ import 'package:flutter/services.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||||
import 'package:path/path.dart' show basename;
|
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import '../settings.dart';
|
import '../settings.dart';
|
||||||
|
@ -89,9 +87,11 @@ class _MessageViewState extends State<MessageView> {
|
||||||
if (showFileSharing) {
|
if (showFileSharing) {
|
||||||
appBarButtons.add(IconButton(
|
appBarButtons.add(IconButton(
|
||||||
splashRadius: Material.defaultSplashRadius / 2,
|
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,
|
tooltip: AppLocalizations.of(context)!.tooltipSendFile,
|
||||||
onPressed: () {
|
onPressed: Provider.of<AppState>(context).disableFilePicker
|
||||||
|
? null
|
||||||
|
: () {
|
||||||
_showFilePicker(context);
|
_showFilePicker(context);
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
@ -392,7 +392,16 @@ class _MessageViewState extends State<MessageView> {
|
||||||
|
|
||||||
void _showFilePicker(BuildContext ctx) async {
|
void _showFilePicker(BuildContext ctx) async {
|
||||||
imagePreview = null;
|
imagePreview = null;
|
||||||
|
|
||||||
|
// 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;
|
||||||
FilePickerResult? result = await FilePicker.platform.pickFiles();
|
FilePickerResult? result = await FilePicker.platform.pickFiles();
|
||||||
|
appstate.disableFilePicker = false;
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
File file = File(result.files.first.path);
|
File file = File(result.files.first.path);
|
||||||
// We have a maximum number of bytes we can represent in terms of
|
// We have a maximum number of bytes we can represent in terms of
|
||||||
|
|
Loading…
Reference in New Issue