mirror of
https://github.com/krille-chan/fluffychat
synced 2024-09-10 06:25:15 +00:00
fix: Unable to use file picker with applock
This commit is contained in:
parent
bed7e34a36
commit
9c1c5a4aec
8 changed files with 69 additions and 32 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue