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/resize_image.dart';
|
||||||
import 'package:fluffychat/utils/story_theme_data.dart';
|
import 'package:fluffychat/utils/story_theme_data.dart';
|
||||||
import 'package:fluffychat/utils/string_color.dart';
|
import 'package:fluffychat/utils/string_color.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import '../../utils/matrix_sdk_extensions/client_stories_extension.dart';
|
import '../../utils/matrix_sdk_extensions/client_stories_extension.dart';
|
||||||
|
|
||||||
|
|
@ -69,9 +70,11 @@ class AddStoryController extends State<AddStoryPage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void importMedia() async {
|
void importMedia() async {
|
||||||
final picked = await FilePicker.platform.pickFiles(
|
final picked = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.image,
|
FilePicker.platform.pickFiles(
|
||||||
withData: true,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final file = picked?.files.firstOrNull;
|
final file = picked?.files.firstOrNull;
|
||||||
if (file == null) return;
|
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/event_extension.dart';
|
||||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import '../../utils/account_bundles.dart';
|
import '../../utils/account_bundles.dart';
|
||||||
import '../../utils/localized_exception_extension.dart';
|
import '../../utils/localized_exception_extension.dart';
|
||||||
|
|
@ -469,9 +470,11 @@ class ChatController extends State<ChatPageWithRoom> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendFileAction() async {
|
void sendFileAction() async {
|
||||||
final result = await FilePicker.platform.pickFiles(
|
final result = await AppLock.of(context).pauseWhile(
|
||||||
allowMultiple: true,
|
FilePicker.platform.pickFiles(
|
||||||
withData: true,
|
allowMultiple: true,
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
if (result == null || result.files.isEmpty) return;
|
if (result == null || result.files.isEmpty) return;
|
||||||
await showDialog(
|
await showDialog(
|
||||||
|
|
@ -508,10 +511,13 @@ class ChatController extends State<ChatPageWithRoom> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendImageAction() async {
|
void sendImageAction() async {
|
||||||
final result = await FilePicker.platform.pickFiles(
|
//AppLock.of(context).pauseWhile();
|
||||||
type: FileType.image,
|
final result = await AppLock.of(context).pauseWhile(
|
||||||
withData: true,
|
FilePicker.platform.pickFiles(
|
||||||
allowMultiple: true,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
allowMultiple: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
if (result == null || result.files.isEmpty) return;
|
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/pages/settings/settings.dart';
|
||||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
|
|
||||||
enum AliasActions { copy, delete, setCanonical }
|
enum AliasActions { copy, delete, setCanonical }
|
||||||
|
|
@ -376,9 +377,11 @@ class ChatDetailsController extends State<ChatDetails> {
|
||||||
name: result.path,
|
name: result.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final picked = await FilePicker.platform.pickFiles(
|
final picked = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.image,
|
FilePicker.platform.pickFiles(
|
||||||
withData: true,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final pickedFile = picked?.files.firstOrNull;
|
final pickedFile = picked?.files.firstOrNull;
|
||||||
if (pickedFile == null) return;
|
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/config/app_config.dart';
|
||||||
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart';
|
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart';
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import '../../utils/localized_exception_extension.dart';
|
import '../../utils/localized_exception_extension.dart';
|
||||||
|
|
||||||
|
|
@ -168,7 +169,9 @@ class HomeserverPickerController extends State<HomeserverPicker> {
|
||||||
Widget build(BuildContext context) => HomeserverPickerView(this);
|
Widget build(BuildContext context) => HomeserverPickerView(this);
|
||||||
|
|
||||||
Future<void> restoreBackup() async {
|
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;
|
final file = picked?.files.firstOrNull;
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
await showFutureLoadingDialog(
|
await showFutureLoadingDialog(
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/utils/platform_infos.dart';
|
import 'package:fluffychat/utils/platform_infos.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import '../../widgets/matrix.dart';
|
import '../../widgets/matrix.dart';
|
||||||
import '../bootstrap/bootstrap_dialog.dart';
|
import '../bootstrap/bootstrap_dialog.dart';
|
||||||
import 'settings_view.dart';
|
import 'settings_view.dart';
|
||||||
|
|
@ -135,9 +136,11 @@ class SettingsController extends State<Settings> {
|
||||||
name: result.path,
|
name: result.path,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final result = await FilePicker.platform.pickFiles(
|
final result = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.image,
|
FilePicker.platform.pickFiles(
|
||||||
withData: true,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final pickedFile = result?.files.firstOrNull;
|
final pickedFile = result?.files.firstOrNull;
|
||||||
if (pickedFile == null) return;
|
if (pickedFile == null) return;
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/utils/client_manager.dart';
|
import 'package:fluffychat/utils/client_manager.dart';
|
||||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import '../../widgets/matrix.dart';
|
import '../../widgets/matrix.dart';
|
||||||
import 'import_archive_dialog.dart';
|
import 'import_archive_dialog.dart';
|
||||||
import 'settings_emotes_view.dart';
|
import 'settings_emotes_view.dart';
|
||||||
|
|
@ -221,9 +222,11 @@ class EmotesSettingsController extends State<EmotesSettings> {
|
||||||
void imagePickerAction(
|
void imagePickerAction(
|
||||||
ValueNotifier<ImagePackImageContent?> controller,
|
ValueNotifier<ImagePackImageContent?> controller,
|
||||||
) async {
|
) async {
|
||||||
final result = await FilePicker.platform.pickFiles(
|
final result = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.image,
|
FilePicker.platform.pickFiles(
|
||||||
withData: true,
|
type: FileType.image,
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final pickedFile = result?.files.firstOrNull;
|
final pickedFile = result?.files.firstOrNull;
|
||||||
if (pickedFile == null) return;
|
if (pickedFile == null) return;
|
||||||
|
|
@ -279,14 +282,16 @@ class EmotesSettingsController extends State<EmotesSettings> {
|
||||||
final result = await showFutureLoadingDialog<Archive?>(
|
final result = await showFutureLoadingDialog<Archive?>(
|
||||||
context: context,
|
context: context,
|
||||||
future: () async {
|
future: () async {
|
||||||
final result = await FilePicker.platform.pickFiles(
|
final result = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.custom,
|
FilePicker.platform.pickFiles(
|
||||||
allowedExtensions: [
|
type: FileType.custom,
|
||||||
'zip',
|
allowedExtensions: [
|
||||||
// TODO: add further encoders
|
'zip',
|
||||||
],
|
// TODO: add further encoders
|
||||||
// TODO: migrate to stream, currently brrrr because of `archive_io`.
|
],
|
||||||
withData: true,
|
// TODO: migrate to stream, currently brrrr because of `archive_io`.
|
||||||
|
withData: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result == null) return null;
|
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/app_config.dart';
|
||||||
import 'package:fluffychat/config/setting_keys.dart';
|
import 'package:fluffychat/config/setting_keys.dart';
|
||||||
|
import 'package:fluffychat/widgets/app_lock.dart';
|
||||||
import 'package:fluffychat/widgets/theme_builder.dart';
|
import 'package:fluffychat/widgets/theme_builder.dart';
|
||||||
import '../../widgets/matrix.dart';
|
import '../../widgets/matrix.dart';
|
||||||
import 'settings_style_view.dart';
|
import 'settings_style_view.dart';
|
||||||
|
|
@ -18,9 +19,11 @@ class SettingsStyle extends StatefulWidget {
|
||||||
|
|
||||||
class SettingsStyleController extends State<SettingsStyle> {
|
class SettingsStyleController extends State<SettingsStyle> {
|
||||||
void setWallpaperAction() async {
|
void setWallpaperAction() async {
|
||||||
final picked = await FilePicker.platform.pickFiles(
|
final picked = await AppLock.of(context).pauseWhile(
|
||||||
type: FileType.image,
|
FilePicker.platform.pickFiles(
|
||||||
withData: false,
|
type: FileType.image,
|
||||||
|
withData: false,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final pickedFile = picked?.files.firstOrNull;
|
final pickedFile = picked?.files.firstOrNull;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,12 @@ class AppLockWidget extends StatefulWidget {
|
||||||
class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
|
class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
|
||||||
String? _pincode;
|
String? _pincode;
|
||||||
bool _isLocked = false;
|
bool _isLocked = false;
|
||||||
|
bool _paused = false;
|
||||||
bool get isActive =>
|
bool get isActive =>
|
||||||
_pincode != null &&
|
_pincode != null &&
|
||||||
int.tryParse(_pincode!) != null &&
|
int.tryParse(_pincode!) != null &&
|
||||||
_pincode!.length == 4;
|
_pincode!.length == 4 &&
|
||||||
|
!_paused;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
|
@ -86,6 +88,15 @@ class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
|
||||||
_isLocked = true;
|
_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>(
|
static AppLock of(BuildContext context) => Provider.of<AppLock>(
|
||||||
context,
|
context,
|
||||||
listen: false,
|
listen: false,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue