From 53af09227fe9ffb75a01e814a3b078d0c46c8f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Sat, 6 Dec 2025 09:34:17 +0100 Subject: [PATCH] refactor: File selector just use default FileType and remove not working zip selector --- lib/pages/chat/chat.dart | 7 +- lib/pages/chat_details/chat_details.dart | 3 +- lib/pages/new_group/new_group.dart | 3 +- lib/pages/settings/settings.dart | 3 +- .../settings_emotes/settings_emotes.dart | 5 +- lib/pages/settings_style/settings_style.dart | 4 +- lib/utils/file_selector.dart | 109 +----------------- 7 files changed, 18 insertions(+), 116 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index c64063595..ce92d4d81 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -9,6 +9,7 @@ import 'package:collection/collection.dart'; import 'package:desktop_drop/desktop_drop.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; @@ -621,7 +622,7 @@ class ChatController extends State }); } - void sendFileAction({FileSelectorType type = FileSelectorType.any}) async { + void sendFileAction({FileType type = FileType.any}) async { final files = await selectFiles(context, allowMultiple: true, type: type); if (files.isEmpty) return; await showAdaptiveDialog( @@ -1186,10 +1187,10 @@ class ChatController extends State switch (choice) { case AddPopupMenuActions.image: - sendFileAction(type: FileSelectorType.images); + sendFileAction(type: FileType.image); return; case AddPopupMenuActions.video: - sendFileAction(type: FileSelectorType.videos); + sendFileAction(type: FileType.video); return; case AddPopupMenuActions.file: sendFileAction(); diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index 8e070e447..69dda16e5 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; @@ -137,7 +138,7 @@ class ChatDetailsController extends State { final picked = await selectFiles( context, allowMultiple: false, - type: FileSelectorType.images, + type: FileType.image, ); final pickedFile = picked.firstOrNull; if (pickedFile == null) return; diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index f34d0b43a..c5737a32b 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -2,6 +2,7 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; @@ -49,7 +50,7 @@ class NewGroupController extends State { void selectPhoto() async { final photo = await selectFiles( context, - type: FileSelectorType.images, + type: FileType.image, allowMultiple: false, ); final bytes = await photo.singleOrNull?.readAsBytes(); diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 7bf4b57a2..13ca20a1e 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; @@ -134,7 +135,7 @@ class SettingsController extends State { if (result == null) return; file = MatrixFile(bytes: await result.readAsBytes(), name: result.path); } else { - final result = await selectFiles(context, type: FileSelectorType.images); + final result = await selectFiles(context, type: FileType.image); final pickedFile = result.firstOrNull; if (pickedFile == null) return; file = MatrixFile( diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index 023165764..0672f1633 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:http/http.dart' hide Client; import 'package:matrix/matrix.dart'; @@ -296,7 +297,7 @@ class EmotesSettingsController extends State { void createStickers() async { final pickedFiles = await selectFiles( context, - type: FileSelectorType.images, + type: FileType.image, allowMultiple: true, ); if (pickedFiles.isEmpty) return; @@ -355,7 +356,7 @@ class EmotesSettingsController extends State { } Future importEmojiZip() async { - final result = await selectFiles(context, type: FileSelectorType.zip); + final result = await selectFiles(context, type: FileType.any); if (result.isEmpty) return; diff --git a/lib/pages/settings_style/settings_style.dart b/lib/pages/settings_style/settings_style.dart index f3d559a0d..b22e98fbb 100644 --- a/lib/pages/settings_style/settings_style.dart +++ b/lib/pages/settings_style/settings_style.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:file_picker/file_picker.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/account_config.dart'; @@ -26,7 +28,7 @@ class SettingsStyleController extends State { void setWallpaper() async { final client = Matrix.of(context).client; - final picked = await selectFiles(context, type: FileSelectorType.images); + final picked = await selectFiles(context, type: FileType.image); final pickedFile = picked.firstOrNull; if (pickedFile == null) return; diff --git a/lib/utils/file_selector.dart b/lib/utils/file_selector.dart index 2e09b492f..97e229c2e 100644 --- a/lib/utils/file_selector.dart +++ b/lib/utils/file_selector.dart @@ -9,7 +9,7 @@ import 'package:fluffychat/widgets/future_loading_dialog.dart'; Future> selectFiles( BuildContext context, { String? title, - FileSelectorType type = FileSelectorType.any, + FileType type = FileType.any, bool allowMultiple = false, }) async { final result = await AppLock.of(context).pauseWhile( @@ -18,114 +18,9 @@ Future> selectFiles( future: () => FilePicker.platform.pickFiles( compressionQuality: 0, allowMultiple: allowMultiple, - type: type.filePickerType, - allowedExtensions: type.extensions, + type: type, ), ), ); return result.result?.xFiles ?? []; } - -enum FileSelectorType { - any([], FileType.any, null), - images( - [ - XTypeGroup( - label: 'Images', - extensions: [ - 'jpg', - 'JPG', - 'jpeg', - 'JPEG', - 'png', - 'PNG', - 'webp', - 'WebP', - 'WEBP', - 'gif', - 'GIF', - 'bmp', - 'BMP', - 'tiff', - 'TIFF', - 'tif', - 'TIF', - 'heic', - 'HEIC', - 'svg', - 'SVG', - ], - ), - XTypeGroup( - label: 'JPG', - extensions: ['jpg', 'JPG', 'jpeg', 'JPEG'], - ), - XTypeGroup(label: 'PNG', extensions: ['png', 'PNG']), - XTypeGroup(label: 'WebP', extensions: ['webp', 'WebP', 'WEBP']), - XTypeGroup(label: 'GIF', extensions: ['gif', 'GIF']), - XTypeGroup(label: 'BMP', extensions: ['bmp', 'BMP']), - XTypeGroup( - label: 'TIFF', - extensions: ['tiff', 'TIFF', 'tif', 'TIF'], - ), - XTypeGroup(label: 'HEIC', extensions: ['heic', 'HEIC']), - XTypeGroup(label: 'SVG', extensions: ['svg', 'SVG']), - ], - FileType.image, - null, - ), - videos( - [ - XTypeGroup( - label: 'Videos', - extensions: [ - 'mp4', - 'MP4', - 'avi', - 'AVI', - 'webm', - 'WebM', - 'WEBM', - 'mov', - 'MOV', - 'mkv', - 'MKV', - 'wmv', - 'WMV', - 'flv', - 'FLV', - 'mpeg', - 'MPEG', - '3gp', - '3GP', - 'ogg', - 'OGG', - ], - ), - XTypeGroup(label: 'MP4', extensions: ['mp4', 'MP4']), - XTypeGroup(label: 'WebM', extensions: ['webm', 'WebM', 'WEBM']), - XTypeGroup(label: 'AVI', extensions: ['avi', 'AVI']), - XTypeGroup(label: 'MOV', extensions: ['mov', 'MOV']), - XTypeGroup(label: 'MKV', extensions: ['mkv', 'MKV']), - XTypeGroup(label: 'WMV', extensions: ['wmv', 'WMV']), - XTypeGroup(label: 'FLV', extensions: ['flv', 'FLV']), - XTypeGroup(label: 'MPEG', extensions: ['mpeg', 'MPEG']), - XTypeGroup(label: '3GP', extensions: ['3gp', '3GP']), - XTypeGroup(label: 'OGG', extensions: ['ogg', 'OGG']), - ], - FileType.video, - null, - ), - zip( - [ - XTypeGroup(label: 'ZIP', extensions: ['zip', 'ZIP']), - ], - FileType.custom, - ['zip', 'ZIP'], - ); - - const FileSelectorType(this.groups, this.filePickerType, this.extensions); - final List groups; - final FileType filePickerType; - final List? extensions; -}