From 35983437e25a8584b32ad796f6d4ed6bc84aa75f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Sun, 30 Nov 2025 12:42:04 +0100 Subject: [PATCH] refactor: Update flutter lints --- analysis_options.yaml | 36 ------------------ lib/config/setting_keys.dart | 2 +- lib/pages/chat/chat.dart | 17 +++++---- lib/pages/chat/events/cute_events.dart | 3 +- lib/pages/chat/start_poll_bottom_sheet.dart | 2 +- .../chat_encryption_settings.dart | 2 +- lib/pages/chat_members/chat_members.dart | 4 +- lib/pages/dialer/pip/pip_view.dart | 4 +- lib/pages/new_group/new_group.dart | 2 +- lib/pages/settings/settings.dart | 2 +- .../import_archive_dialog.dart | 2 +- lib/widgets/app_lock.dart | 2 +- lib/widgets/theme_builder.dart | 2 +- pubspec.lock | 37 ++++++++----------- pubspec.yaml | 8 ++-- 15 files changed, 43 insertions(+), 82 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index a18542ab5..835b6a611 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -15,41 +15,5 @@ analyzer: errors: todo: ignore use_build_context_synchronously: ignore - deprecated_member_use: ignore exclude: - - lib/generated_plugin_registrant.dart - lib/l10n/*.dart - -dart_code_metrics: - metrics: - cyclomatic-complexity: 20 - number-of-arguments: 4 - maximum-nesting-level: 5 - source-lines-of-code: 50 - maintainability-index: 40 - rules: - - no-boolean-literal-compare - - no-empty-block - - prefer-conditional-expressions - - no-equal-then-else - - no-magic-number: - severity: style - - avoid-late-keyword: - severity: style - - avoid-non-null-assertion: - severity: style - - avoid-unused-parameters - - binary-expression-operand-order - - avoid-unnecessary-setstate - - avoid-wrapping-in-padding - - prefer-const-border-radius - - prefer-single-widget-per-file: - ignore-private-widgets: true - - prefer-extracting-callbacks - metrics-exclude: - - test/** - rules-exclude: - - test/** - anti-patterns: - - long-method - - long-parameter-list diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index 1c779872e..44c42a38b 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -69,7 +69,7 @@ enum AppSettings { static SharedPreferences get store => _store!; static SharedPreferences? _store; - static Future init({loadWebConfigFile = true}) async { + static Future init({bool loadWebConfigFile = true}) async { if (AppSettings._store != null) return AppSettings.store; final store = AppSettings._store = await SharedPreferences.getInstance(); diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 54f6010cc..c33f59436 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -118,9 +118,9 @@ class ChatController extends State bool currentlyTyping = false; bool dragging = false; - void onDragEntered(_) => setState(() => dragging = true); + void onDragEntered(dynamic _) => setState(() => dragging = true); - void onDragExited(_) => setState(() => dragging = false); + void onDragExited(dynamic _) => setState(() => dragging = false); void onDragDone(DropDoneDetails details) async { setState(() => dragging = false); @@ -148,7 +148,8 @@ class ChatController extends State MessageTypes.File, }.contains(selectedEvents.single.messageType); - void saveSelectedEvent(context) => selectedEvents.single.saveFile(context); + void saveSelectedEvent(BuildContext context) => + selectedEvents.single.saveFile(context); List selectedEvents = []; @@ -213,7 +214,7 @@ class ChatController extends State context.go('/rooms'); } - void requestHistory([_]) async { + void requestHistory([dynamic _]) async { Logs().v('Requesting history...'); await timeline?.requestHistory(historyCount: _loadHistoryCount); } @@ -254,7 +255,7 @@ class ChatController extends State } } - void _shareItems([_]) { + void _shareItems([dynamic _]) { final shareItems = widget.shareItems; if (shareItems == null || shareItems.isEmpty) return; if (!room.otherPartyCanReceiveMessages) { @@ -1062,7 +1063,7 @@ class ChatController extends State scrollController.jumpTo(0); } - void onEmojiSelected(_, Emoji? emoji) { + void onEmojiSelected(dynamic _, Emoji? emoji) { typeEmoji(emoji); onInputBarChanged(sendController.text); } @@ -1185,7 +1186,7 @@ class ChatController extends State return index + 1; } - void onInputBarSubmitted(_) { + void onInputBarSubmitted(String _) { send(); FocusScope.of(context).requestFocus(inputFocus); } @@ -1221,7 +1222,7 @@ class ChatController extends State } } - unpinEvent(String eventId) async { + void unpinEvent(String eventId) async { final response = await showOkCancelAlertDialog( context: context, title: L10n.of(context).unpin, diff --git a/lib/pages/chat/events/cute_events.dart b/lib/pages/chat/events/cute_events.dart index 9d43021dc..91648e082 100644 --- a/lib/pages/chat/events/cute_events.dart +++ b/lib/pages/chat/events/cute_events.dart @@ -69,7 +69,7 @@ class _CuteContentState extends State { Overlay.of(context).insert(overlay); } - generateLabel(User? user) { + String? generateLabel(User? user) { switch (widget.event.content['cute_type']) { case 'googly_eyes': return L10n.of(context).googlyEyesContent( @@ -90,6 +90,7 @@ class _CuteContentState extends State { '', ); } + return null; } } diff --git a/lib/pages/chat/start_poll_bottom_sheet.dart b/lib/pages/chat/start_poll_bottom_sheet.dart index 3fc5acc6a..5962cd2ed 100644 --- a/lib/pages/chat/start_poll_bottom_sheet.dart +++ b/lib/pages/chat/start_poll_bottom_sheet.dart @@ -56,7 +56,7 @@ class _StartPollBottomSheetState extends State { } } - void _updateCanCreate([_]) { + void _updateCanCreate([dynamic _]) { final newCanCreate = _bodyController.text.trim().isNotEmpty && !_answers.any((controller) => controller.text.trim().isEmpty); if (_canCreate != newCanCreate) { diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart index 704f33641..6996d58d4 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 { + void enableEncryption(dynamic _) async { if (room.encrypted) { showOkAlertDialog( context: context, diff --git a/lib/pages/chat_members/chat_members.dart b/lib/pages/chat_members/chat_members.dart index 028cbc19d..36b59f3f9 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 { + void setFilter([dynamic _]) async { final filter = filterController.text.toLowerCase().trim(); final members = this @@ -56,7 +56,7 @@ class ChatMembersController extends State { }); } - void refreshMembers([_]) async { + void refreshMembers([dynamic _]) async { Logs().d('Load room members from', widget.roomId); try { setState(() { diff --git a/lib/pages/dialer/pip/pip_view.dart b/lib/pages/dialer/pip/pip_view.dart index 78facfaa0..d8ad23f4c 100644 --- a/lib/pages/dialer/pip/pip_view.dart +++ b/lib/pages/dialer/pip/pip_view.dart @@ -111,7 +111,7 @@ class PIPViewState extends State with TickerProviderStateMixin { }); } - void _onPanEnd(_) { + void _onPanEnd(dynamic _) { if (!_isDragging) return; final nearestCorner = _calculateNearestCorner( @@ -128,7 +128,7 @@ class PIPViewState extends State with TickerProviderStateMixin { }); } - void _onPanStart(_) { + void _onPanStart(dynamic _) { if (_isAnimating()) return; setState(() { _dragOffset = _offsets[_corner]!; diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index 03b9b642d..84e4564ed 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -109,7 +109,7 @@ class NewGroupController extends State { context.pop(spaceId); } - void submitAction([_]) async { + void submitAction([dynamic _]) async { final client = Matrix.of(context).client; try { diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index c386b18d3..9e808585f 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -187,7 +187,7 @@ class SettingsController extends State { bool? crossSigningCached; bool? showChatBackupBanner; - void firstRunBootstrapAction([_]) async { + void firstRunBootstrapAction([dynamic _]) async { if (showChatBackupBanner != true) { showOkAlertDialog( context: context, diff --git a/lib/pages/settings_emotes/import_archive_dialog.dart b/lib/pages/settings_emotes/import_archive_dialog.dart index 1e0c2e880..12bc0a09c 100644 --- a/lib/pages/settings_emotes/import_archive_dialog.dart +++ b/lib/pages/settings_emotes/import_archive_dialog.dart @@ -303,7 +303,7 @@ class _EmojiImportPreviewState extends State<_EmojiImportPreview> { ); } - _setRenderError() { + void _setRenderError() { hasErrorNotifier.value = true; widget.onRemove.call(); } diff --git a/lib/widgets/app_lock.dart b/lib/widgets/app_lock.dart index c4682d9f4..ff379c5d8 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 { + void _checkLoggedIn(dynamic _) async { if (widget.clients.any((client) => client.isLogged())) return; await changePincode(null); diff --git a/lib/widgets/theme_builder.dart b/lib/widgets/theme_builder.dart index 1ce0a6f05..b526aadfd 100644 --- a/lib/widgets/theme_builder.dart +++ b/lib/widgets/theme_builder.dart @@ -43,7 +43,7 @@ class ThemeController extends State { listen: false, ); - void _loadData(_) async { + void _loadData(dynamic _) async { final preferences = _sharedPreferences ??= await SharedPreferences.getInstance(); diff --git a/pubspec.lock b/pubspec.lock index 0858b43be..dc4dcda09 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "91.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08 url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "8.4.1" animations: dependency: "direct main" description: @@ -495,10 +495,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "6.0.0" flutter_local_notifications: dependency: "direct main" description: @@ -1015,10 +1015,11 @@ packages: license_checker: dependency: "direct dev" description: - name: license_checker - sha256: eea27638e42bc98fd91a6a8187eb57e5617e2c3c8b313a5d51b14bec7a8685e1 - url: "https://pub.dev" - source: hosted + path: "." + ref: HEAD + resolved-ref: "38a65ff5b4b65db092b11dad999081388f75ece8" + url: "https://github.com/krille-chan/license_checker.git" + source: git version: "1.6.0" linkify: dependency: "direct main" @@ -1032,10 +1033,10 @@ packages: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "6.0.0" lists: dependency: transitive description: @@ -1176,10 +1177,10 @@ packages: dependency: transitive description: name: pana - sha256: "3fc3fe8e7a9fd4827fa4d625a423eec95d305b2bc3538a3adf7fd6c49217af97" + sha256: eb816d35b80d3880335c3f2d139b376e81fd98a9ea273faf39f2c8914c4afba5 url: "https://pub.dev" source: hosted - version: "0.21.45" + version: "0.23.3" path: dependency: "direct main" description: @@ -1801,14 +1802,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.1" - tar: - dependency: transitive - description: - name: tar - sha256: "22f67e2d77b51050436620b2a5de521c58ca6f0b75af1d9ab3c8cae2eae58fcd" - url: "https://pub.dev" - source: hosted - version: "1.0.5" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b5e55483f..8f4b981d8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -85,14 +85,16 @@ dependencies: webrtc_interface: ^1.3.0 dev_dependencies: - flutter_lints: ^3.0.0 + flutter_lints: ^6.0.0 flutter_native_splash: ^2.4.7 flutter_test: sdk: flutter import_sorter: ^4.6.0 integration_test: sdk: flutter - license_checker: ^1.6.0 + # Waiting for https://github.com/rufman/license_checker/pull/47 + license_checker: + git: https://github.com/krille-chan/license_checker.git translations_cleaner: ^0.0.5 import_sorter: @@ -116,4 +118,4 @@ flutter: # 1. Don't do it if you can avoid it or fix it upstream in a manageable time # 2. Always link an (upstream?) issue # 3. Explain how and when this can be removed (overrides must be temporarily) -dependency_overrides: +dependency_overrides: \ No newline at end of file