From 28af7bb0c76b4adc27fbc42b30db034fe118daad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Tue, 24 Feb 2026 10:04:40 +0100 Subject: [PATCH] refactor: Enable more strict lints --- analysis_options.yaml | 11 ++++- lib/pages/archive/archive.dart | 4 +- lib/pages/bootstrap/bootstrap_dialog.dart | 4 +- lib/pages/chat/chat.dart | 45 ++++++++++--------- lib/pages/chat/events/audio_player.dart | 6 +-- lib/pages/chat/events/message_content.dart | 2 +- lib/pages/chat/input_bar.dart | 2 +- lib/pages/chat/recording_view_model.dart | 2 +- lib/pages/chat/reply_display.dart | 2 +- lib/pages/chat/send_location_dialog.dart | 2 +- lib/pages/chat/start_poll_bottom_sheet.dart | 2 +- .../chat_access_settings_controller.dart | 14 +++--- lib/pages/chat_details/chat_details.dart | 6 +-- .../chat_encryption_settings.dart | 4 +- lib/pages/chat_list/chat_list.dart | 23 +++++----- .../chat_list/client_chooser_button.dart | 2 +- lib/pages/chat_list/search_title.dart | 2 +- lib/pages/chat_list/space_view.dart | 13 +++--- lib/pages/chat_members/chat_members.dart | 4 +- .../chat_permissions_settings.dart | 2 +- lib/pages/chat_search/chat_search_page.dart | 2 +- .../device_settings/device_settings.dart | 12 ++--- lib/pages/dialer/dialer.dart | 6 +-- lib/pages/image_viewer/image_viewer.dart | 4 +- lib/pages/image_viewer/video_player.dart | 2 +- lib/pages/intro/intro_page_presenter.dart | 2 +- .../invitation_selection.dart | 8 +++- lib/pages/login/login.dart | 6 +-- lib/pages/new_group/new_group.dart | 4 +- .../new_private_chat/new_private_chat.dart | 6 +-- lib/pages/settings/settings.dart | 10 ++--- lib/pages/settings_3pid/settings_3pid.dart | 4 +- .../settings_emotes/settings_emotes.dart | 6 +-- .../settings_notifications.dart | 6 +-- .../settings_password/settings_password.dart | 2 +- .../settings_security/settings_security.dart | 6 +-- lib/pages/settings_style/settings_style.dart | 8 ++-- .../settings_style/settings_style_view.dart | 2 +- .../view_model/sign_in_view_model.dart | 2 +- lib/utils/background_push.dart | 2 +- .../client_download_content_extension.dart | 2 +- lib/utils/client_manager.dart | 2 +- lib/utils/error_reporter.dart | 4 +- lib/utils/markdown_context_builder.dart | 2 +- .../event_extension.dart | 4 +- .../cipher.dart | 2 +- .../matrix_file_extension.dart | 4 +- .../notification_background_handler.dart | 2 +- lib/utils/platform_infos.dart | 2 +- lib/utils/show_update_snackbar.dart | 2 +- lib/utils/sign_in_flows/check_homeserver.dart | 2 +- lib/utils/size_string.dart | 6 +-- lib/utils/url_launcher.dart | 4 +- .../adaptive_dialogs/public_room_dialog.dart | 2 +- lib/widgets/app_lock.dart | 2 +- lib/widgets/config_viewer.dart | 2 +- .../local_notifications_extension.dart | 2 +- lib/widgets/lock_screen.dart | 2 +- lib/widgets/log_view.dart | 4 +- lib/widgets/matrix.dart | 2 +- .../member_actions_popup_menu_button.dart | 2 +- lib/widgets/mxc_image.dart | 2 +- lib/widgets/qr_code_viewer.dart | 2 +- lib/widgets/share_scaffold_dialog.dart | 2 +- lib/widgets/theme_builder.dart | 2 +- 65 files changed, 170 insertions(+), 146 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 82dc170d2..0b19afcfc 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,6 +11,7 @@ linter: - omit_local_variable_types - cancel_subscriptions - always_declare_return_types + - avoid_void_async - no_adjacent_strings_in_list - test_types_in_equals - throw_in_finally @@ -19,6 +20,15 @@ linter: - prefer_single_quotes - prefer_const_declarations - unnecessary_lambdas + - combinators_ordering + - noop_primitive_operations + - unnecessary_null_checks + - unnecessary_null_in_if_null_operators + - unnecessary_to_list_in_spreads + - use_is_even_rather_than_modulo + - use_super_parameters + # Flutter specific: + - use_colored_box analyzer: plugins: @@ -61,7 +71,6 @@ dart_code_linter: - prefer-correct-edge-insets-constructor - avoid-returning-widgets # TODO: - # - avoid-returning-widgets # - prefer-single-widget-per-file: # ignore-private-widgets: true # - prefer-extracting-callbacks diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart index a39840a3c..2481dfdde 100644 --- a/lib/pages/archive/archive.dart +++ b/lib/pages/archive/archive.dart @@ -23,7 +23,7 @@ class ArchiveController extends State { return archive = await Matrix.of(context).client.loadArchive(); } - void forgetRoomAction(int i) async { + Future forgetRoomAction(int i) async { await showFutureLoadingDialog( context: context, future: () async { @@ -35,7 +35,7 @@ class ArchiveController extends State { setState(() {}); } - void forgetAllAction() async { + Future forgetAllAction() async { final archive = this.archive; final client = Matrix.of(context).client; if (archive.isEmpty) return; diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart index 592bb3e85..e565d42d3 100644 --- a/lib/pages/bootstrap/bootstrap_dialog.dart +++ b/lib/pages/bootstrap/bootstrap_dialog.dart @@ -71,7 +71,7 @@ class BootstrapDialogState extends State { _createBootstrap(widget.wipe); } - void _cancelAction() async { + Future _cancelAction() async { final consent = await showOkCancelAlertDialog( context: context, title: L10n.of(context).skipChatBackup, @@ -110,7 +110,7 @@ class BootstrapDialogState extends State { } } - void _createBootstrap(bool wipe) async { + Future _createBootstrap(bool wipe) async { await client.roomsLoading; await client.accountDataLoading; await client.userDeviceKeysLoading; diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 15b36b982..4fa0d5132 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -121,7 +121,7 @@ class ChatController extends State void onDragExited(_) => setState(() => dragging = false); - void onDragDone(DropDoneDetails details) async { + Future onDragDone(DropDoneDetails details) async { setState(() => dragging = false); if (details.files.isEmpty) return; @@ -190,7 +190,7 @@ class ChatController extends State selectedEvents.clear(); }); - void recreateChat() async { + Future recreateChat() async { final room = this.room; final userId = room.directChatMatrixID; if (userId == null) { @@ -204,7 +204,7 @@ class ChatController extends State ); } - void leaveChat() async { + Future leaveChat() async { final success = await showFutureLoadingDialog( context: context, future: room.leave, @@ -213,12 +213,12 @@ class ChatController extends State context.go('/rooms'); } - void requestHistory([_]) async { + Future requestHistory([_]) async { Logs().v('Requesting history...'); await timeline?.requestHistory(historyCount: _loadHistoryCount); } - void requestFuture() async { + Future requestFuture() async { final timeline = this.timeline; if (timeline == null) return; Logs().v('Requesting future...'); @@ -392,7 +392,7 @@ class ChatController extends State }); } - void _tryLoadTimeline() async { + Future _tryLoadTimeline() async { final initialEventId = widget.eventId; loadTimelineFuture = _getTimeline(); try { @@ -625,7 +625,7 @@ class ChatController extends State }); } - void sendFileAction({FileType type = FileType.any}) async { + Future sendFileAction({FileType type = FileType.any}) async { final files = await selectFiles(context, allowMultiple: true, type: type); if (files.isEmpty) return; await showAdaptiveDialog( @@ -640,7 +640,7 @@ class ChatController extends State ); } - void sendImageFromClipBoard(Uint8List? image) async { + Future sendImageFromClipBoard(Uint8List? image) async { if (image == null) return; await showAdaptiveDialog( context: context, @@ -654,7 +654,7 @@ class ChatController extends State ); } - void openCameraAction() async { + Future openCameraAction() async { // Make sure the textfield is unfocused before opening the camera FocusScope.of(context).requestFocus(FocusNode()); final file = await ImagePicker().pickImage(source: ImageSource.camera); @@ -672,7 +672,7 @@ class ChatController extends State ); } - void openVideoCameraAction() async { + Future openVideoCameraAction() async { // Make sure the textfield is unfocused before opening the camera FocusScope.of(context).requestFocus(FocusNode()); final file = await ImagePicker().pickVideo( @@ -759,7 +759,7 @@ class ChatController extends State } } - void sendLocationAction() async { + Future sendLocationAction() async { await showAdaptiveDialog( context: context, builder: (c) => SendLocationDialog(room: room), @@ -793,7 +793,7 @@ class ChatController extends State }); } - void reportEventAction() async { + Future reportEventAction() async { final event = selectedEvents.single; final score = await showModalActionPopup( context: context, @@ -837,7 +837,7 @@ class ChatController extends State ); } - void deleteErrorEventsAction() async { + Future deleteErrorEventsAction() async { try { if (selectedEvents.any((event) => event.status != EventStatus.error)) { throw Exception( @@ -856,7 +856,7 @@ class ChatController extends State } } - void redactEventsAction() async { + Future redactEventsAction() async { final reasonInput = selectedEvents.any((event) => event.status.isSent) ? await showTextInputDialog( context: context, @@ -949,7 +949,7 @@ class ChatController extends State ); } - void forwardEventsAction() async { + Future forwardEventsAction() async { if (selectedEvents.isEmpty) return; final timeline = this.timeline; if (timeline == null) return; @@ -992,7 +992,10 @@ class ChatController extends State inputFocus.requestFocus(); } - void scrollToEventId(String eventId, {bool highlightEvent = true}) async { + Future scrollToEventId( + String eventId, { + bool highlightEvent = true, + }) async { final foundEvent = timeline!.events.firstWhereOrNull( (event) => event.eventId == eventId, ); @@ -1036,7 +1039,7 @@ class ChatController extends State _updateScrollController(); } - void scrollDown() async { + Future scrollDown() async { if (!timeline!.allowNewEvent) { setState(() { timeline = null; @@ -1117,7 +1120,7 @@ class ChatController extends State inputFocus.requestFocus(); } - void goToNewRoomAction() async { + Future goToNewRoomAction() async { final result = await showFutureLoadingDialog( context: context, future: () async { @@ -1216,7 +1219,7 @@ class ChatController extends State } } - void unpinEvent(String eventId) async { + Future unpinEvent(String eventId) async { final response = await showOkCancelAlertDialog( context: context, title: L10n.of(context).unpin, @@ -1309,7 +1312,7 @@ class ChatController extends State void showEventInfo([Event? event]) => (event ?? selectedEvents.single).showInfoDialog(context); - void onPhoneButtonTap() async { + Future onPhoneButtonTap() async { // VoIP required Android SDK 21 if (PlatformInfos.isAndroid) { DeviceInfoPlugin().androidInfo.then((value) { @@ -1365,7 +1368,7 @@ class ChatController extends State late final ValueNotifier _displayChatDetailsColumn; - void toggleDisplayChatDetailsColumn() async { + Future toggleDisplayChatDetailsColumn() async { await AppSettings.displayChatDetailsColumn.setItem( !_displayChatDetailsColumn.value, ); diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index fd631cbc1..e79980832 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -124,7 +124,7 @@ class AudioPlayerState extends State { } } - void _onButtonTap() async { + Future _onButtonTap() async { WidgetsBinding.instance.addPostFrameCallback((_) { ScaffoldMessenger.of(matrix.context).clearMaterialBanners(); }); @@ -216,7 +216,7 @@ class AudioPlayerState extends State { ); } - void _toggleSpeed() async { + Future _toggleSpeed() async { final audioPlayer = matrix.audioPlayer; if (audioPlayer == null) return; switch (audioPlayer.speed) { @@ -459,7 +459,7 @@ class AudioPlayerState extends State { height: 20, child: Center( child: Text( - '${audioPlayer?.speed.toString()}x', + '${audioPlayer?.speed}x', style: TextStyle( color: widget.color, fontSize: 9, diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index cf1f07f4f..cccd8d1a9 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -47,7 +47,7 @@ class MessageContent extends StatelessWidget { required this.selected, }); - void _verifyOrRequestKey(BuildContext context) async { + Future _verifyOrRequestKey(BuildContext context) async { final l10n = L10n.of(context); if (event.content['can_request_session'] != true) { ScaffoldMessenger.of(context).showSnackBar( diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index 3c240d30e..bc1261ff3 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -411,7 +411,7 @@ class InputBar extends StatelessWidget { ), minLines: minLines, maxLines: maxLines, - keyboardType: keyboardType!, + keyboardType: keyboardType, textInputAction: textInputAction, autofocus: autofocus!, inputFormatters: [ diff --git a/lib/pages/chat/recording_view_model.dart b/lib/pages/chat/recording_view_model.dart index 0c75182c3..2f401c1cb 100644 --- a/lib/pages/chat/recording_view_model.dart +++ b/lib/pages/chat/recording_view_model.dart @@ -164,7 +164,7 @@ class RecordingViewModelState extends State { }); } - void stopAndSend( + Future stopAndSend( Future Function( String path, int duration, diff --git a/lib/pages/chat/reply_display.dart b/lib/pages/chat/reply_display.dart index 3e9fe0c2d..2090cecca 100644 --- a/lib/pages/chat/reply_display.dart +++ b/lib/pages/chat/reply_display.dart @@ -35,7 +35,7 @@ class ReplyDisplay extends StatelessWidget { child: controller.replyEvent != null ? ReplyContent( controller.replyEvent!, - timeline: controller.timeline!, + timeline: controller.timeline, ) : _EditContent( controller.editEvent?.getDisplayEvent(controller.timeline!), diff --git a/lib/pages/chat/send_location_dialog.dart b/lib/pages/chat/send_location_dialog.dart index 8efc2cb60..914604679 100644 --- a/lib/pages/chat/send_location_dialog.dart +++ b/lib/pages/chat/send_location_dialog.dart @@ -73,7 +73,7 @@ class SendLocationDialogState extends State { } } - void sendAction() async { + Future sendAction() async { setState(() => isSending = true); final body = 'https://www.openstreetmap.org/?mlat=${position!.latitude}&mlon=${position!.longitude}#map=16/${position!.latitude}/${position!.longitude}'; diff --git a/lib/pages/chat/start_poll_bottom_sheet.dart b/lib/pages/chat/start_poll_bottom_sheet.dart index 25e18ad44..7c5bf176c 100644 --- a/lib/pages/chat/start_poll_bottom_sheet.dart +++ b/lib/pages/chat/start_poll_bottom_sheet.dart @@ -28,7 +28,7 @@ class _StartPollBottomSheetState extends State { String? _txid; - void _createPoll() async { + Future _createPoll() async { try { var id = 0; _txid ??= widget.room.client.generateUniqueTransactionId(); diff --git a/lib/pages/chat_access_settings/chat_access_settings_controller.dart b/lib/pages/chat_access_settings/chat_access_settings_controller.dart index 4161099fd..93f5cda09 100644 --- a/lib/pages/chat_access_settings/chat_access_settings_controller.dart +++ b/lib/pages/chat_access_settings/chat_access_settings_controller.dart @@ -78,7 +78,7 @@ class ChatAccessSettingsController extends State { return joinRules.toList(); } - void setJoinRule(JoinRules? newJoinRules) async { + Future setJoinRule(JoinRules? newJoinRules) async { if (newJoinRules == null) return; setState(() { joinRulesLoading = true; @@ -111,7 +111,9 @@ class ChatAccessSettingsController extends State { } } - void setHistoryVisibility(HistoryVisibility? historyVisibility) async { + Future setHistoryVisibility( + HistoryVisibility? historyVisibility, + ) async { if (historyVisibility == null) return; setState(() { historyVisibilityLoading = true; @@ -135,7 +137,7 @@ class ChatAccessSettingsController extends State { } } - void setGuestAccess(GuestAccess? guestAccess) async { + Future setGuestAccess(GuestAccess? guestAccess) async { if (guestAccess == null) return; setState(() { guestAccessLoading = true; @@ -159,7 +161,7 @@ class ChatAccessSettingsController extends State { } } - void updateRoomAction() async { + Future updateRoomAction() async { final roomVersion = room .getState(EventTypes.RoomCreate)! .content @@ -303,7 +305,7 @@ class ChatAccessSettingsController extends State { ); } - void deleteAlias(String alias) async { + Future deleteAlias(String alias) async { await showFutureLoadingDialog( context: context, future: () => room.client.deleteRoomAlias(alias), @@ -311,7 +313,7 @@ class ChatAccessSettingsController extends State { setState(() {}); } - void setChatVisibilityOnDirectory(bool? visibility) async { + Future setChatVisibilityOnDirectory(bool? visibility) async { if (visibility == null) return; setState(() { visibilityLoading = true; diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index ad2fa8dcd..b9a02690b 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -38,7 +38,7 @@ class ChatDetailsController extends State { String? get roomId => widget.roomId; - void setDisplaynameAction() async { + Future setDisplaynameAction() async { final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, @@ -59,7 +59,7 @@ class ChatDetailsController extends State { } } - void setTopicAction() async { + Future setTopicAction() async { final room = Matrix.of(context).client.getRoomById(roomId!)!; final input = await showTextInputDialog( context: context, @@ -83,7 +83,7 @@ class ChatDetailsController extends State { } } - void setAvatarAction() async { + Future setAvatarAction() async { final room = Matrix.of(context).client.getRoomById(roomId!); final actions = [ if (PlatformInfos.isMobile) diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart index 704f33641..d8db6f25e 100644 --- a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart +++ b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart @@ -30,7 +30,7 @@ class ChatEncryptionSettingsController extends State { } } - void enableEncryption(_) async { + Future enableEncryption(_) async { if (room.encrypted) { showOkAlertDialog( context: context, @@ -69,7 +69,7 @@ class ChatEncryptionSettingsController extends State { ); } - void startVerification() async { + Future startVerification() async { final consent = await showOkCancelAlertDialog( context: context, title: L10n.of(context).verifyOtherUser, diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index aae3a10cc..e55b8251d 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -78,7 +78,7 @@ class ChatListController extends State String? _activeSpaceId; String? get activeSpaceId => _activeSpaceId; - void setActiveSpace(String spaceId) async { + Future setActiveSpace(String spaceId) async { await Matrix.of(context).client.getRoomById(spaceId)!.postLoad(); setState(() { @@ -90,7 +90,7 @@ class ChatListController extends State _activeSpaceId = null; }); - void onChatTap(Room room) async { + Future onChatTap(Room room) async { if (room.membership == Membership.invite) { final joinResult = await showFutureLoadingDialog( context: context, @@ -156,7 +156,7 @@ class ChatListController extends State bool isSearching = false; static const String _serverStoreNamespace = 'im.fluffychat.search.server'; - void setServer() async { + Future setServer() async { final newServer = await showTextInputDialog( useRootNavigator: false, title: L10n.of(context).changeTheHomeserver, @@ -184,7 +184,7 @@ class ChatListController extends State final TextEditingController searchController = TextEditingController(); final FocusNode searchFocusNode = FocusNode(); - void _search() async { + Future _search() async { final client = Matrix.of(context).client; if (!isSearching) { setState(() { @@ -292,7 +292,7 @@ class ChatListController extends State } } - void editSpace(BuildContext context, String spaceId) async { + Future editSpace(BuildContext context, String spaceId) async { await Matrix.of(context).client.getRoomById(spaceId)!.postLoad(); if (mounted) { context.push('/rooms/$spaceId/details'); @@ -326,7 +326,7 @@ class ChatListController extends State ); } - void _processIncomingUris(Uri? uri) async { + Future _processIncomingUris(Uri? uri) async { if (uri == null) return; context.go('/rooms'); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -399,7 +399,7 @@ class ChatListController extends State super.dispose(); } - void chatContextAction( + Future chatContextAction( Room room, BuildContext posContext, [ Room? space, @@ -671,7 +671,7 @@ class ChatListController extends State } } - void dismissStatusList() async { + Future dismissStatusList() async { final result = await showOkCancelAlertDialog( title: L10n.of(context).hidePresences, context: context, @@ -682,7 +682,7 @@ class ChatListController extends State } } - void setStatus() async { + Future setStatus() async { final client = Matrix.of(context).client; final currentPresence = await client.fetchCurrentPresence(client.userID!); final input = await showTextInputDialog( @@ -793,7 +793,10 @@ class ChatListController extends State }); } - void editBundlesForAccount(String? userId, String? activeBundle) async { + Future editBundlesForAccount( + String? userId, + String? activeBundle, + ) async { final l10n = L10n.of(context); final client = Matrix.of( context, diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart index 50c9f4a72..d6431ad7d 100644 --- a/lib/pages/chat_list/client_chooser_button.dart +++ b/lib/pages/chat_list/client_chooser_button.dart @@ -194,7 +194,7 @@ class ClientChooserButton extends StatelessWidget { ); } - void _clientSelected(Object object, BuildContext context) async { + Future _clientSelected(Object object, BuildContext context) async { if (object is Client) { controller.setActiveClient(object); } else if (object is String) { diff --git a/lib/pages/chat_list/search_title.dart b/lib/pages/chat_list/search_title.dart index 95bb5364d..5f9b2f844 100644 --- a/lib/pages/chat_list/search_title.dart +++ b/lib/pages/chat_list/search_title.dart @@ -52,7 +52,7 @@ class SearchTitle extends StatelessWidget { Expanded( child: Align( alignment: Alignment.centerRight, - child: trailing!, + child: trailing, ), ), ], diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 719fa2fb8..9a1fdd56b 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -60,7 +60,7 @@ class _SpaceViewState extends State { super.initState(); } - void _loadHierarchy() async { + Future _loadHierarchy() async { final matrix = Matrix.of(context); final room = matrix.client.getRoomById(widget.spaceId); if (room == null) return; @@ -127,7 +127,7 @@ class _SpaceViewState extends State { } } - void _joinChildRoom(SpaceRoomsChunk$2 item) async { + Future _joinChildRoom(SpaceRoomsChunk$2 item) async { final client = Matrix.of(context).client; final space = client.getRoomById(widget.spaceId); final via = space?.spaceChildren @@ -146,7 +146,7 @@ class _SpaceViewState extends State { if (room != null) widget.onChatTab(room); } - void _onSpaceAction(SpaceActions action) async { + Future _onSpaceAction(SpaceActions action) async { final space = Matrix.of(context).client.getRoomById(widget.spaceId); switch (action) { @@ -184,7 +184,7 @@ class _SpaceViewState extends State { } } - void _addChatOrSubspace(AddRoomType roomType) async { + Future _addChatOrSubspace(AddRoomType roomType) async { final names = await showTextInputDialog( context: context, title: roomType == AddRoomType.subspace @@ -261,7 +261,10 @@ class _SpaceViewState extends State { _loadHierarchy(); } - void _showSpaceChildEditMenu(BuildContext posContext, String roomId) async { + Future _showSpaceChildEditMenu( + BuildContext posContext, + String roomId, + ) async { final overlay = Overlay.of(posContext).context.findRenderObject() as RenderBox; diff --git a/lib/pages/chat_members/chat_members.dart b/lib/pages/chat_members/chat_members.dart index e4ce1a5ab..a652eff06 100644 --- a/lib/pages/chat_members/chat_members.dart +++ b/lib/pages/chat_members/chat_members.dart @@ -29,7 +29,7 @@ class ChatMembersController extends State { setFilter(); } - void setFilter([_]) async { + Future setFilter([_]) async { final filter = filterController.text.toLowerCase().trim(); final members = this.members @@ -56,7 +56,7 @@ class ChatMembersController extends State { }); } - void refreshMembers([_]) async { + Future refreshMembers([_]) async { Logs().d('Load room members from', widget.roomId); try { setState(() { diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart index f9d5afb82..e3dbfde40 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart @@ -21,7 +21,7 @@ class ChatPermissionsSettings extends StatefulWidget { class ChatPermissionsSettingsController extends State { String? get roomId => GoRouterState.of(context).pathParameters['roomid']; - void editPowerLevel( + Future editPowerLevel( BuildContext context, String key, int currentLevel, { diff --git a/lib/pages/chat_search/chat_search_page.dart b/lib/pages/chat_search/chat_search_page.dart index 965658eed..579a21037 100644 --- a/lib/pages/chat_search/chat_search_page.dart +++ b/lib/pages/chat_search/chat_search_page.dart @@ -44,7 +44,7 @@ class ChatSearchController extends State }); } - void startSearch() async { + Future startSearch() async { switch (tabController.index) { case 0: final searchQuery = searchController.text.trim(); diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index df7c5f5d2..014359a8c 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -38,7 +38,7 @@ class DevicesSettingsController extends State { super.initState(); } - void _checkChatBackup() async { + Future _checkChatBackup() async { final client = Matrix.of(context).client; final state = await client.getCryptoIdentityState(); setState(() { @@ -46,7 +46,7 @@ class DevicesSettingsController extends State { }); } - void removeDevicesAction(List devices) async { + Future removeDevicesAction(List devices) async { final client = Matrix.of(context).client; final wellKnown = await client.getWellknown(); @@ -84,7 +84,7 @@ class DevicesSettingsController extends State { reload(); } - void renameDeviceAction(Device device) async { + Future renameDeviceAction(Device device) async { final displayName = await showTextInputDialog( context: context, title: L10n.of(context).changeDeviceName, @@ -104,7 +104,7 @@ class DevicesSettingsController extends State { } } - void verifyDeviceAction(Device device) async { + Future verifyDeviceAction(Device device) async { final consent = await showOkCancelAlertDialog( context: context, title: L10n.of(context).verifyOtherDevice, @@ -129,7 +129,7 @@ class DevicesSettingsController extends State { await KeyVerificationDialog(request: req).show(context); } - void blockDeviceAction(Device device) async { + Future blockDeviceAction(Device device) async { final key = Matrix.of(context) .client .userDeviceKeys[Matrix.of(context).client.userID!]! @@ -141,7 +141,7 @@ class DevicesSettingsController extends State { setState(() {}); } - void unblockDeviceAction(Device device) async { + Future unblockDeviceAction(Device device) async { final key = Matrix.of(context) .client .userDeviceKeys[Matrix.of(context).client.userID!]! diff --git a/lib/pages/dialer/dialer.dart b/lib/pages/dialer/dialer.dart index 753312b33..f7af5b540 100644 --- a/lib/pages/dialer/dialer.dart +++ b/lib/pages/dialer/dialer.dart @@ -171,7 +171,7 @@ class MyCallingPage extends State { EdgeInsetsGeometry? _localVideoMargin; CallState? _state; - void _playCallSound() async { + Future _playCallSound() async { const path = 'assets/sounds/call.ogg'; if (kIsWeb || PlatformInfos.isMobile || PlatformInfos.isMacOS) { final player = AudioPlayer(); @@ -245,7 +245,7 @@ class MyCallingPage extends State { } void _handleCallState(CallState state) { - Logs().v('CallingPage::handleCallState: ${state.toString()}'); + Logs().v('CallingPage::handleCallState: $state'); if ({CallState.kConnected, CallState.kEnded}.contains(state)) { HapticFeedback.heavyImpact(); } @@ -322,7 +322,7 @@ class MyCallingPage extends State { }); } - void _switchCamera() async { + Future _switchCamera() async { if (call.localUserMediaStream != null) { await Helper.switchCamera( call.localUserMediaStream!.stream!.getVideoTracks().first, diff --git a/lib/pages/image_viewer/image_viewer.dart b/lib/pages/image_viewer/image_viewer.dart index 1dba46b28..fc64d0f4a 100644 --- a/lib/pages/image_viewer/image_viewer.dart +++ b/lib/pages/image_viewer/image_viewer.dart @@ -67,7 +67,7 @@ class ImageViewerController extends State { } } - void prevImage() async { + Future prevImage() async { await pageController.previousPage( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, @@ -76,7 +76,7 @@ class ImageViewerController extends State { setState(() {}); } - void nextImage() async { + Future nextImage() async { await pageController.nextPage( duration: FluffyThemes.animationDuration, curve: FluffyThemes.animationCurve, diff --git a/lib/pages/image_viewer/video_player.dart b/lib/pages/image_viewer/video_player.dart index 5ca9fcc2b..2fd5e0c2c 100644 --- a/lib/pages/image_viewer/video_player.dart +++ b/lib/pages/image_viewer/video_player.dart @@ -35,7 +35,7 @@ class EventVideoPlayerState extends State { final _supportsVideoPlayer = !PlatformInfos.isWindows && !PlatformInfos.isLinux; - void _downloadAction() async { + Future _downloadAction() async { if (!_supportsVideoPlayer) { widget.event.saveFile(context); return; diff --git a/lib/pages/intro/intro_page_presenter.dart b/lib/pages/intro/intro_page_presenter.dart index dad35f348..fa702bee5 100644 --- a/lib/pages/intro/intro_page_presenter.dart +++ b/lib/pages/intro/intro_page_presenter.dart @@ -35,7 +35,7 @@ class _IntroPagePresenterState extends State { if (kIsWeb) _finishOidcLogin(); } - void _finishOidcLogin() async { + Future _finishOidcLogin() async { final store = await SharedPreferences.getInstance(); final storedHomeserverString = store.getString( OidcSessionJsonExtension.homeserverStoreKey, diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart index 50fcd2667..b662829e5 100644 --- a/lib/pages/invitation_selection/invitation_selection.dart +++ b/lib/pages/invitation_selection/invitation_selection.dart @@ -50,7 +50,11 @@ class InvitationSelectionController extends State { return contacts; } - void inviteAction(BuildContext context, String id, String displayname) async { + Future inviteAction( + BuildContext context, + String id, + String displayname, + ) async { final room = Matrix.of(context).client.getRoomById(roomId!)!; final success = await showFutureLoadingDialog( @@ -74,7 +78,7 @@ class InvitationSelectionController extends State { ); } - void searchUser(BuildContext context, String text) async { + Future searchUser(BuildContext context, String text) async { coolDown?.cancel(); if (text.isEmpty) { setState(() => foundProfiles = []); diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index fdc2f7cad..c0a3e10ab 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -32,7 +32,7 @@ class LoginController extends State { void toggleShowPassword() => setState(() => showPassword = !loading && !showPassword); - void login() async { + Future login() async { final matrix = Matrix.of(context); if (usernameController.text.isEmpty) { setState(() => usernameError = L10n.of(context).pleaseEnterYourUsername); @@ -102,7 +102,7 @@ class LoginController extends State { ); } - void _checkWellKnown(String userId) async { + Future _checkWellKnown(String userId) async { if (mounted) setState(() => usernameError = null); if (!userId.isValidMatrixId) return; final oldHomeserver = widget.client.homeserver; @@ -158,7 +158,7 @@ class LoginController extends State { } } - void passwordForgotten() async { + Future passwordForgotten() async { final input = await showTextInputDialog( useRootNavigator: false, context: context, diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index 4c2e711ad..51202f2be 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -47,7 +47,7 @@ class NewGroupController extends State { void setGroupCanBeFound(bool b) => setState(() => groupCanBeFound = b); - void selectPhoto() async { + Future selectPhoto() async { final photo = await selectFiles( context, type: FileType.image, @@ -108,7 +108,7 @@ class NewGroupController extends State { context.pop(spaceId); } - void submitAction([_]) async { + Future submitAction([_]) async { final client = Matrix.of(context).client; try { diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart index 982290c4b..55435cc11 100644 --- a/lib/pages/new_private_chat/new_private_chat.dart +++ b/lib/pages/new_private_chat/new_private_chat.dart @@ -33,7 +33,7 @@ class NewPrivateChatController extends State { static const Duration _coolDown = Duration(milliseconds: 500); - void searchUsers([String? input]) async { + Future searchUsers([String? input]) async { final searchTerm = input ?? controller.text; if (searchTerm.isEmpty) { _searchCoolDown?.cancel(); @@ -68,7 +68,7 @@ class NewPrivateChatController extends State { void inviteAction() => FluffyShare.shareInviteLink(context); - void openScannerAction() async { + Future openScannerAction() async { if (PlatformInfos.isAndroid) { final info = await DeviceInfoPlugin().androidInfo; if (info.version.sdkInt < 21) { @@ -88,7 +88,7 @@ class NewPrivateChatController extends State { ); } - void copyUserId() async { + Future copyUserId() async { await Clipboard.setData( ClipboardData(text: Matrix.of(context).client.userID!), ); diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 3f6c7411b..4f5be9a88 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -35,7 +35,7 @@ class SettingsController extends State { profileFuture = null; }); - void setDisplaynameAction() async { + Future setDisplaynameAction() async { final profile = await profileFuture; final input = await showTextInputDialog( useRootNavigator: false, @@ -61,7 +61,7 @@ class SettingsController extends State { } } - void logoutAction() async { + Future logoutAction() async { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, @@ -81,7 +81,7 @@ class SettingsController extends State { ); } - void setAvatarAction() async { + Future setAvatarAction() async { final profile = await profileFuture; final actions = [ if (PlatformInfos.isMobile) @@ -159,7 +159,7 @@ class SettingsController extends State { super.initState(); } - void checkBootstrap() async { + Future checkBootstrap() async { final client = Matrix.of(context).client; if (!client.encryptionEnabled) return; await client.accountDataLoading; @@ -176,7 +176,7 @@ class SettingsController extends State { bool? cryptoIdentityConnected; - void firstRunBootstrapAction([_]) async { + Future firstRunBootstrapAction([_]) async { if (cryptoIdentityConnected == true) { showOkAlertDialog( context: context, diff --git a/lib/pages/settings_3pid/settings_3pid.dart b/lib/pages/settings_3pid/settings_3pid.dart index f35c5c1fc..765399ec6 100644 --- a/lib/pages/settings_3pid/settings_3pid.dart +++ b/lib/pages/settings_3pid/settings_3pid.dart @@ -19,7 +19,7 @@ class Settings3Pid extends StatefulWidget { } class Settings3PidController extends State { - void add3PidAction() async { + Future add3PidAction() async { final input = await showTextInputDialog( useRootNavigator: false, context: context, @@ -63,7 +63,7 @@ class Settings3PidController extends State { Future?>? request; - void delete3Pid(ThirdPartyIdentifier identifier) async { + Future delete3Pid(ThirdPartyIdentifier identifier) async { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart index c2f68a15a..8b8cb2f52 100644 --- a/lib/pages/settings_emotes/settings_emotes.dart +++ b/lib/pages/settings_emotes/settings_emotes.dart @@ -245,7 +245,7 @@ class EmotesSettingsController extends State { }); } - void createImagePack() async { + Future createImagePack() async { final room = this.room; if (room == null) throw Exception('Cannot create image pack without room'); @@ -287,14 +287,14 @@ class EmotesSettingsController extends State { setState(() {}); } - void saveAction() async { + Future saveAction() async { await save(context); setState(() { showSave = false; }); } - void createStickers() async { + Future createStickers() async { final pickedFiles = await selectFiles( context, type: FileType.image, diff --git a/lib/pages/settings_notifications/settings_notifications.dart b/lib/pages/settings_notifications/settings_notifications.dart index 98e430304..05c9e3e54 100644 --- a/lib/pages/settings_notifications/settings_notifications.dart +++ b/lib/pages/settings_notifications/settings_notifications.dart @@ -26,7 +26,7 @@ class SettingsNotifications extends StatefulWidget { class SettingsNotificationsController extends State { bool isLoading = false; - void onPusherTap(Pusher pusher) async { + Future onPusherTap(Pusher pusher) async { final delete = await showModalActionPopup( context: context, title: pusher.deviceDisplayName, @@ -58,7 +58,7 @@ class SettingsNotificationsController extends State { Future?>? pusherFuture; - void togglePushRule(PushRuleKind kind, PushRule pushRule) async { + Future togglePushRule(PushRuleKind kind, PushRule pushRule) async { setState(() { isLoading = true; }); @@ -91,7 +91,7 @@ class SettingsNotificationsController extends State { } } - void editPushRule(PushRule rule, PushRuleKind kind) async { + Future editPushRule(PushRule rule, PushRuleKind kind) async { final theme = Theme.of(context); final action = await showAdaptiveDialog( context: context, diff --git a/lib/pages/settings_password/settings_password.dart b/lib/pages/settings_password/settings_password.dart index 413f80259..d2fe2621d 100644 --- a/lib/pages/settings_password/settings_password.dart +++ b/lib/pages/settings_password/settings_password.dart @@ -25,7 +25,7 @@ class SettingsPasswordController extends State { bool loading = false; - void changePassword() async { + Future changePassword() async { setState(() { oldPasswordError = newPassword1Error = newPassword2Error = null; }); diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart index 688feb4bd..f73a0e186 100644 --- a/lib/pages/settings_security/settings_security.dart +++ b/lib/pages/settings_security/settings_security.dart @@ -19,7 +19,7 @@ class SettingsSecurity extends StatefulWidget { } class SettingsSecurityController extends State { - void setAppLockAction() async { + Future setAppLockAction() async { if (AppLock.of(context).isActive) { AppLock.of(context).showLockScreen(); } @@ -46,7 +46,7 @@ class SettingsSecurityController extends State { } } - void deleteAccountAction() async { + Future deleteAccountAction() async { if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, @@ -93,7 +93,7 @@ class SettingsSecurityController extends State { Future dehydrateAction() => Matrix.of(context).dehydrateAction(context); - void changeShareKeysWith(ShareKeysWith? shareKeysWith) async { + Future changeShareKeysWith(ShareKeysWith? shareKeysWith) async { if (shareKeysWith == null) return; AppSettings.shareKeysWith.setItem(shareKeysWith.name); Matrix.of(context).client.shareKeysWith = shareKeysWith; diff --git a/lib/pages/settings_style/settings_style.dart b/lib/pages/settings_style/settings_style.dart index c30492cfe..c47495686 100644 --- a/lib/pages/settings_style/settings_style.dart +++ b/lib/pages/settings_style/settings_style.dart @@ -26,7 +26,7 @@ class SettingsStyleController extends State { ThemeController.of(context).setPrimaryColor(color); } - void setWallpaper() async { + Future setWallpaper() async { final client = Matrix.of(context).client; final picked = await selectFiles(context, type: FileType.image); final pickedFile = picked.firstOrNull; @@ -53,7 +53,7 @@ class SettingsStyleController extends State { double? _wallpaperOpacity; - void saveWallpaperOpacity(double opacity) async { + Future saveWallpaperOpacity(double opacity) async { final client = Matrix.of(context).client; final result = await showFutureLoadingDialog( context: context, @@ -80,7 +80,7 @@ class SettingsStyleController extends State { 0.5; double? _wallpaperBlur; - void saveWallpaperBlur(double blur) async { + Future saveWallpaperBlur(double blur) async { final client = Matrix.of(context).client; final result = await showFutureLoadingDialog( context: context, @@ -153,7 +153,7 @@ class SettingsStyleController extends State { setState(() {}); } - void changeFontSizeFactor(double d) async { + Future changeFontSizeFactor(double d) async { await AppSettings.fontSizeFactor.setItem(d); setState(() {}); } diff --git a/lib/pages/settings_style/settings_style_view.dart b/lib/pages/settings_style/settings_style_view.dart index 213cf5d5f..9391bbf3f 100644 --- a/lib/pages/settings_style/settings_style_view.dart +++ b/lib/pages/settings_style/settings_style_view.dart @@ -201,7 +201,7 @@ class SettingsStyleView extends StatelessWidget { type: EventTypes.RoomMember, senderId: client.userID!, originServerTs: DateTime.now(), - stateKey: client.userID!, + stateKey: client.userID, ), ), Padding( diff --git a/lib/pages/sign_in/view_model/sign_in_view_model.dart b/lib/pages/sign_in/view_model/sign_in_view_model.dart index 23d0028f2..6d9bcc87a 100644 --- a/lib/pages/sign_in/view_model/sign_in_view_model.dart +++ b/lib/pages/sign_in/view_model/sign_in_view_model.dart @@ -52,7 +52,7 @@ class SignInViewModel extends ValueNotifier { ); } - void refreshPublicHomeservers() async { + Future refreshPublicHomeservers() async { value = value.copyWith(publicHomeservers: AsyncSnapshot.waiting()); final defaultHomeserverData = PublicHomeserverData( name: AppSettings.defaultHomeserver.value, diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index bec7d5ef5..2713073b4 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -72,7 +72,7 @@ class BackgroundPush { bool upAction = false; - void _init() async { + Future _init() async { //firebaseEnabled = true; try { mainIsolateReceivePort?.listen((message) async { diff --git a/lib/utils/client_download_content_extension.dart b/lib/utils/client_download_content_extension.dart index b93357a0f..24a5868da 100644 --- a/lib/utils/client_download_content_extension.dart +++ b/lib/utils/client_download_content_extension.dart @@ -22,7 +22,7 @@ extension ClientDownloadContentExtension on Client { width: width, height: height, animated: animated, - method: thumbnailMethod!, + method: thumbnailMethod, ) : mxc; diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index 452d8956d..817727e94 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -145,7 +145,7 @@ abstract class ClientManager { ); } - static void sendInitNotification(String title, String body) async { + static Future sendInitNotification(String title, String body) async { if (kIsWeb) { html.Notification(title, body: body); return; diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index 514d8162b..670d2f8ae 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -22,14 +22,14 @@ class ErrorReporter { 'HandshakeException', }; - void onErrorCallback(Object error, [StackTrace? stackTrace]) { + Future onErrorCallback(Object error, [StackTrace? stackTrace]) async { if (ingoredTypes.contains(error.runtimeType.toString())) return; Logs().e(message ?? 'Error caught', error, stackTrace); final text = '$error\n${stackTrace ?? ''}'; return _onErrorCallback(text); } - void _onErrorCallback(String text) async { + Future _onErrorCallback(String text) async { await showAdaptiveDialog( context: context!, builder: (context) => AlertDialog.adaptive( diff --git a/lib/utils/markdown_context_builder.dart b/lib/utils/markdown_context_builder.dart index f03da17fb..57d44d4cd 100644 --- a/lib/utils/markdown_context_builder.dart +++ b/lib/utils/markdown_context_builder.dart @@ -56,7 +56,7 @@ class MarkdownContextBuilder extends StatelessWidget { controller.text = controller.text.replaceRange( selection.start, selection.end, - '[$selectedText](${url.toString()})', + '[$selectedText]($url)', ); ContextMenuController.removeAny(); }, diff --git a/lib/utils/matrix_sdk_extensions/event_extension.dart b/lib/utils/matrix_sdk_extensions/event_extension.dart index 09cbe5343..6f1138bfd 100644 --- a/lib/utils/matrix_sdk_extensions/event_extension.dart +++ b/lib/utils/matrix_sdk_extensions/event_extension.dart @@ -26,13 +26,13 @@ extension LocalizedBody on Event { }, ); - void saveFile(BuildContext context) async { + Future saveFile(BuildContext context) async { final matrixFile = await _getFile(context); matrixFile.result?.save(context); } - void shareFile(BuildContext context) async { + Future shareFile(BuildContext context) async { final matrixFile = await _getFile(context); inspect(matrixFile); diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart index a91c79f20..3862346f9 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart @@ -47,7 +47,7 @@ Future getDatabaseCipher() async { return password; } -void _sendNoEncryptionWarning(Object exception) async { +Future _sendNoEncryptionWarning(Object exception) async { final isStored = AppSettings.noEncryptionWarningShown.value; if (isStored == true) return; diff --git a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart index dffea0c63..857c80954 100644 --- a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart +++ b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart @@ -8,7 +8,7 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/size_string.dart'; extension MatrixFileExtension on MatrixFile { - void save(BuildContext context) async { + Future save(BuildContext context) async { final scaffoldMessenger = ScaffoldMessenger.of(context); final l10n = L10n.of(context); final downloadPath = await FilePicker.platform.saveFile( @@ -31,7 +31,7 @@ extension MatrixFileExtension on MatrixFile { return FileType.any; } - void share(BuildContext context) async { + Future share(BuildContext context) async { // Workaround for iPad from // https://github.com/fluttercommunity/plus_plugins/tree/main/packages/share_plus/share_plus#ipad final box = context.findRenderObject() as RenderBox?; diff --git a/lib/utils/notification_background_handler.dart b/lib/utils/notification_background_handler.dart index 81213d829..6c257e9a1 100644 --- a/lib/utils/notification_background_handler.dart +++ b/lib/utils/notification_background_handler.dart @@ -53,7 +53,7 @@ Future waitForPushIsolateDone() async { } @pragma('vm:entry-point') -void notificationTapBackground( +Future notificationTapBackground( NotificationResponse notificationResponse, ) async { final sendPort = IsolateNameServer.lookupPortByName( diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart index 36cd454c5..0f225b733 100644 --- a/lib/utils/platform_infos.dart +++ b/lib/utils/platform_infos.dart @@ -47,7 +47,7 @@ abstract class PlatformInfos { return version; } - static void showDialog(BuildContext context) async { + static Future showDialog(BuildContext context) async { final version = await PlatformInfos.getVersion(); showAboutDialog( context: context, diff --git a/lib/utils/show_update_snackbar.dart b/lib/utils/show_update_snackbar.dart index 27078943f..7d47f1bf4 100644 --- a/lib/utils/show_update_snackbar.dart +++ b/lib/utils/show_update_snackbar.dart @@ -10,7 +10,7 @@ import 'package:fluffychat/utils/platform_infos.dart'; abstract class UpdateNotifier { static const String versionStoreKey = 'last_known_version'; - static void showUpdateSnackBar(BuildContext context) async { + static Future showUpdateSnackBar(BuildContext context) async { final scaffoldMessenger = ScaffoldMessenger.of(context); final currentVersion = await PlatformInfos.getVersion(); final store = await SharedPreferences.getInstance(); diff --git a/lib/utils/sign_in_flows/check_homeserver.dart b/lib/utils/sign_in_flows/check_homeserver.dart index bd822c993..6a0e441cf 100644 --- a/lib/utils/sign_in_flows/check_homeserver.dart +++ b/lib/utils/sign_in_flows/check_homeserver.dart @@ -13,7 +13,7 @@ import 'package:fluffychat/utils/sign_in_flows/sso_login.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -void connectToHomeserverFlow( +Future connectToHomeserverFlow( PublicHomeserverData homeserverData, BuildContext context, void Function(AsyncSnapshot) setState, diff --git a/lib/utils/size_string.dart b/lib/utils/size_string.dart index 315033076..619462ab0 100644 --- a/lib/utils/size_string.dart +++ b/lib/utils/size_string.dart @@ -7,15 +7,15 @@ extension SizeString on num { if (size < 1000 * 1000) { size = size / 1000; size = (size * 10).round() / 10; - return '${size.toString()} KB'; + return '$size KB'; } if (size < 1000 * 1000 * 1000) { size = size / 1000000; size = (size * 10).round() / 10; - return '${size.toString()} MB'; + return '$size MB'; } size = size / 1000 * 1000 * 1000 * 1000; size = (size * 10).round() / 10; - return '${size.toString()} GB'; + return '$size GB'; } } diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 994d40c45..d3644e49a 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -27,7 +27,7 @@ class UrlLauncher { const UrlLauncher(this.context, this.url, [this.name]); - void launchUrl() async { + Future launchUrl() async { if (url!.toLowerCase().startsWith(AppConfig.deepLinkPrefix) || url!.toLowerCase().startsWith(AppConfig.inviteLinkPrefix) || {'#', '@', '!', '+', '\$'}.contains(url![0]) || @@ -117,7 +117,7 @@ class UrlLauncher { ); } - void openMatrixToUrl() async { + Future openMatrixToUrl() async { final matrix = Matrix.of(context); final url = this.url!.replaceFirst( AppConfig.deepLinkPrefix, diff --git a/lib/widgets/adaptive_dialogs/public_room_dialog.dart b/lib/widgets/adaptive_dialogs/public_room_dialog.dart index 7fee87bfb..4d5ac8587 100644 --- a/lib/widgets/adaptive_dialogs/public_room_dialog.dart +++ b/lib/widgets/adaptive_dialogs/public_room_dialog.dart @@ -23,7 +23,7 @@ class PublicRoomDialog extends StatelessWidget { const PublicRoomDialog({super.key, this.roomAlias, this.chunk, this.via}); - void _joinRoom(BuildContext context) async { + Future _joinRoom(BuildContext context) async { final client = Matrix.of(context).client; final chunk = this.chunk; final knock = chunk?.joinRule == 'knock'; diff --git a/lib/widgets/app_lock.dart b/lib/widgets/app_lock.dart index 636b38dff..70f0a9efb 100644 --- a/lib/widgets/app_lock.dart +++ b/lib/widgets/app_lock.dart @@ -41,7 +41,7 @@ class AppLock extends State with WidgetsBindingObserver { WidgetsBinding.instance.addPostFrameCallback(_checkLoggedIn); } - void _checkLoggedIn(_) async { + Future _checkLoggedIn(_) async { if (widget.clients.any((client) => client.isLogged())) return; await changePincode(null); diff --git a/lib/widgets/config_viewer.dart b/lib/widgets/config_viewer.dart index 080ea494f..82a9d4ba5 100644 --- a/lib/widgets/config_viewer.dart +++ b/lib/widgets/config_viewer.dart @@ -16,7 +16,7 @@ class ConfigViewer extends StatefulWidget { } class _ConfigViewerState extends State { - void _changeSetting( + Future _changeSetting( AppSettings appSetting, SharedPreferences store, String initialValue, diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index c2dcb7bc7..ee5708a5e 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -22,7 +22,7 @@ extension LocalNotificationsExtension on MatrixState { ..src = 'assets/assets/sounds/notification.ogg' ..load(); - void showLocalNotification(Event event) async { + Future showLocalNotification(Event event) async { final roomId = event.room.id; if (activeRoomId == roomId) { if (WidgetsBinding.instance.lifecycleState == AppLifecycleState.resumed) { diff --git a/lib/widgets/lock_screen.dart b/lib/widgets/lock_screen.dart index ea4bcf8c2..66a90951c 100644 --- a/lib/widgets/lock_screen.dart +++ b/lib/widgets/lock_screen.dart @@ -20,7 +20,7 @@ class _LockScreenState extends State { bool _inputBlocked = false; final TextEditingController _textEditingController = TextEditingController(); - void tryUnlock(String text) async { + Future tryUnlock(String text) async { text = text.trim(); setState(() { _errorText = null; diff --git a/lib/widgets/log_view.dart b/lib/widgets/log_view.dart index 402e64064..9d34ddf21 100644 --- a/lib/widgets/log_view.dart +++ b/lib/widgets/log_view.dart @@ -81,10 +81,10 @@ extension on LogEvent { String toDisplayString() { var str = '# [${level.toString().split('.').last.toUpperCase()}] $title'; if (exception != null) { - str += ' - ${exception.toString()}'; + str += ' - $exception'; } if (stackTrace != null) { - str += '\n${stackTrace.toString()}'; + str += '\n$stackTrace'; } return str; } diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 3e3fa8ef9..6c66b16d1 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -342,7 +342,7 @@ class MatrixState extends State with WidgetsBindingObserver { createVoipPlugin(); } - void createVoipPlugin() async { + Future createVoipPlugin() async { if (AppSettings.experimentalVoip.value) { voipPlugin = null; return; diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 56ecd9935..e985be01c 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -10,7 +10,7 @@ import 'adaptive_dialogs/user_dialog.dart'; import 'avatar.dart'; import 'future_loading_dialog.dart'; -void showMemberActionsPopupMenu({ +Future showMemberActionsPopupMenu({ required BuildContext context, required User user, void Function()? onMention, diff --git a/lib/widgets/mxc_image.dart b/lib/widgets/mxc_image.dart index 680fe9e2a..a92338aa3 100644 --- a/lib/widgets/mxc_image.dart +++ b/lib/widgets/mxc_image.dart @@ -109,7 +109,7 @@ class _MxcImageState extends State { } } - void _tryLoad() async { + Future _tryLoad() async { if (_imageData != null) { return; } diff --git a/lib/widgets/qr_code_viewer.dart b/lib/widgets/qr_code_viewer.dart index 32024f11a..ac87d9942 100644 --- a/lib/widgets/qr_code_viewer.dart +++ b/lib/widgets/qr_code_viewer.dart @@ -24,7 +24,7 @@ class QrCodeViewer extends StatelessWidget { const QrCodeViewer({required this.content, super.key}); - void _save(BuildContext context) async { + Future _save(BuildContext context) async { final imageResult = await showFutureLoadingDialog( context: context, future: () { diff --git a/lib/widgets/share_scaffold_dialog.dart b/lib/widgets/share_scaffold_dialog.dart index fa80896b4..2a23e050c 100644 --- a/lib/widgets/share_scaffold_dialog.dart +++ b/lib/widgets/share_scaffold_dialog.dart @@ -48,7 +48,7 @@ class _ShareScaffoldDialogState extends State { }); } - void _forwardAction() async { + Future _forwardAction() async { final roomId = selectedRoomId; if (roomId == null) { throw Exception( diff --git a/lib/widgets/theme_builder.dart b/lib/widgets/theme_builder.dart index 0be03731d..77bda417e 100644 --- a/lib/widgets/theme_builder.dart +++ b/lib/widgets/theme_builder.dart @@ -41,7 +41,7 @@ class ThemeController extends State { static ThemeController of(BuildContext context) => Provider.of(context, listen: false); - void _loadData(_) async { + Future _loadData(_) async { final preferences = _sharedPreferences ??= await SharedPreferences.getInstance();