fix: Unable to use file picker with applock

This commit is contained in:
krille-chan 2023-10-07 10:36:56 +02:00
parent bed7e34a36
commit 9c1c5a4aec
No known key found for this signature in database
8 changed files with 69 additions and 32 deletions

View file

@ -17,6 +17,7 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dar
import 'package:fluffychat/utils/resize_image.dart';
import 'package:fluffychat/utils/story_theme_data.dart';
import 'package:fluffychat/utils/string_color.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/matrix_sdk_extensions/client_stories_extension.dart';
@ -69,9 +70,11 @@ class AddStoryController extends State<AddStoryPage> {
}
void importMedia() async {
final picked = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final file = picked?.files.firstOrNull;
if (file == null) return;

View file

@ -30,6 +30,7 @@ import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
@ -469,9 +470,11 @@ class ChatController extends State<ChatPageWithRoom> {
}
void sendFileAction() async {
final result = await FilePicker.platform.pickFiles(
allowMultiple: true,
withData: true,
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
allowMultiple: true,
withData: true,
),
);
if (result == null || result.files.isEmpty) return;
await showDialog(
@ -508,10 +511,13 @@ class ChatController extends State<ChatPageWithRoom> {
}
void sendImageAction() async {
final result = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
allowMultiple: true,
//AppLock.of(context).pauseWhile();
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
allowMultiple: true,
),
);
if (result == null || result.files.isEmpty) return;

View file

@ -15,6 +15,7 @@ import 'package:fluffychat/pages/chat_details/chat_details_view.dart';
import 'package:fluffychat/pages/settings/settings.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
enum AliasActions { copy, delete, setCanonical }
@ -376,9 +377,11 @@ class ChatDetailsController extends State<ChatDetails> {
name: result.path,
);
} else {
final picked = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = picked?.files.firstOrNull;
if (pickedFile == null) return;

View file

@ -17,6 +17,7 @@ import 'package:universal_html/html.dart' as html;
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/localized_exception_extension.dart';
@ -168,7 +169,9 @@ class HomeserverPickerController extends State<HomeserverPicker> {
Widget build(BuildContext context) => HomeserverPickerView(this);
Future<void> restoreBackup() async {
final picked = await FilePicker.platform.pickFiles(withData: true);
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(withData: true),
);
final file = picked?.files.firstOrNull;
if (file == null) return;
await showFutureLoadingDialog(

View file

@ -11,6 +11,7 @@ import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart';
import '../bootstrap/bootstrap_dialog.dart';
import 'settings_view.dart';
@ -135,9 +136,11 @@ class SettingsController extends State<Settings> {
name: result.path,
);
} else {
final result = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = result?.files.firstOrNull;
if (pickedFile == null) return;

View file

@ -14,6 +14,7 @@ import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart';
import 'import_archive_dialog.dart';
import 'settings_emotes_view.dart';
@ -221,9 +222,11 @@ class EmotesSettingsController extends State<EmotesSettings> {
void imagePickerAction(
ValueNotifier<ImagePackImageContent?> controller,
) async {
final result = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: true,
),
);
final pickedFile = result?.files.firstOrNull;
if (pickedFile == null) return;
@ -279,14 +282,16 @@ class EmotesSettingsController extends State<EmotesSettings> {
final result = await showFutureLoadingDialog<Archive?>(
context: context,
future: () async {
final result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: [
'zip',
// TODO: add further encoders
],
// TODO: migrate to stream, currently brrrr because of `archive_io`.
withData: true,
final result = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: [
'zip',
// TODO: add further encoders
],
// TODO: migrate to stream, currently brrrr because of `archive_io`.
withData: true,
),
);
if (result == null) return null;

View file

@ -5,6 +5,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/theme_builder.dart';
import '../../widgets/matrix.dart';
import 'settings_style_view.dart';
@ -18,9 +19,11 @@ class SettingsStyle extends StatefulWidget {
class SettingsStyleController extends State<SettingsStyle> {
void setWallpaperAction() async {
final picked = await FilePicker.platform.pickFiles(
type: FileType.image,
withData: false,
final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(
type: FileType.image,
withData: false,
),
);
final pickedFile = picked?.files.firstOrNull;

View file

@ -28,10 +28,12 @@ class AppLockWidget extends StatefulWidget {
class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
String? _pincode;
bool _isLocked = false;
bool _paused = false;
bool get isActive =>
_pincode != null &&
int.tryParse(_pincode!) != null &&
_pincode!.length == 4;
_pincode!.length == 4 &&
!_paused;
@override
void initState() {
@ -86,6 +88,15 @@ class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
_isLocked = true;
});
Future<T> pauseWhile<T>(Future<T> future) async {
_paused = true;
try {
return await future;
} finally {
_paused = false;
}
}
static AppLock of(BuildContext context) => Provider.of<AppLock>(
context,
listen: false,