refactor: Update flutter lints

This commit is contained in:
Christian Kußowski 2025-11-30 12:42:04 +01:00
parent b473f514ba
commit 35983437e2
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
15 changed files with 43 additions and 82 deletions

View file

@ -15,41 +15,5 @@ analyzer:
errors: errors:
todo: ignore todo: ignore
use_build_context_synchronously: ignore use_build_context_synchronously: ignore
deprecated_member_use: ignore
exclude: exclude:
- lib/generated_plugin_registrant.dart
- lib/l10n/*.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

View file

@ -69,7 +69,7 @@ enum AppSettings<T> {
static SharedPreferences get store => _store!; static SharedPreferences get store => _store!;
static SharedPreferences? _store; static SharedPreferences? _store;
static Future<SharedPreferences> init({loadWebConfigFile = true}) async { static Future<SharedPreferences> init({bool loadWebConfigFile = true}) async {
if (AppSettings._store != null) return AppSettings.store; if (AppSettings._store != null) return AppSettings.store;
final store = AppSettings._store = await SharedPreferences.getInstance(); final store = AppSettings._store = await SharedPreferences.getInstance();

View file

@ -118,9 +118,9 @@ class ChatController extends State<ChatPageWithRoom>
bool currentlyTyping = false; bool currentlyTyping = false;
bool dragging = 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 { void onDragDone(DropDoneDetails details) async {
setState(() => dragging = false); setState(() => dragging = false);
@ -148,7 +148,8 @@ class ChatController extends State<ChatPageWithRoom>
MessageTypes.File, MessageTypes.File,
}.contains(selectedEvents.single.messageType); }.contains(selectedEvents.single.messageType);
void saveSelectedEvent(context) => selectedEvents.single.saveFile(context); void saveSelectedEvent(BuildContext context) =>
selectedEvents.single.saveFile(context);
List<Event> selectedEvents = []; List<Event> selectedEvents = [];
@ -213,7 +214,7 @@ class ChatController extends State<ChatPageWithRoom>
context.go('/rooms'); context.go('/rooms');
} }
void requestHistory([_]) async { void requestHistory([dynamic _]) async {
Logs().v('Requesting history...'); Logs().v('Requesting history...');
await timeline?.requestHistory(historyCount: _loadHistoryCount); await timeline?.requestHistory(historyCount: _loadHistoryCount);
} }
@ -254,7 +255,7 @@ class ChatController extends State<ChatPageWithRoom>
} }
} }
void _shareItems([_]) { void _shareItems([dynamic _]) {
final shareItems = widget.shareItems; final shareItems = widget.shareItems;
if (shareItems == null || shareItems.isEmpty) return; if (shareItems == null || shareItems.isEmpty) return;
if (!room.otherPartyCanReceiveMessages) { if (!room.otherPartyCanReceiveMessages) {
@ -1062,7 +1063,7 @@ class ChatController extends State<ChatPageWithRoom>
scrollController.jumpTo(0); scrollController.jumpTo(0);
} }
void onEmojiSelected(_, Emoji? emoji) { void onEmojiSelected(dynamic _, Emoji? emoji) {
typeEmoji(emoji); typeEmoji(emoji);
onInputBarChanged(sendController.text); onInputBarChanged(sendController.text);
} }
@ -1185,7 +1186,7 @@ class ChatController extends State<ChatPageWithRoom>
return index + 1; return index + 1;
} }
void onInputBarSubmitted(_) { void onInputBarSubmitted(String _) {
send(); send();
FocusScope.of(context).requestFocus(inputFocus); FocusScope.of(context).requestFocus(inputFocus);
} }
@ -1221,7 +1222,7 @@ class ChatController extends State<ChatPageWithRoom>
} }
} }
unpinEvent(String eventId) async { void unpinEvent(String eventId) async {
final response = await showOkCancelAlertDialog( final response = await showOkCancelAlertDialog(
context: context, context: context,
title: L10n.of(context).unpin, title: L10n.of(context).unpin,

View file

@ -69,7 +69,7 @@ class _CuteContentState extends State<CuteContent> {
Overlay.of(context).insert(overlay); Overlay.of(context).insert(overlay);
} }
generateLabel(User? user) { String? generateLabel(User? user) {
switch (widget.event.content['cute_type']) { switch (widget.event.content['cute_type']) {
case 'googly_eyes': case 'googly_eyes':
return L10n.of(context).googlyEyesContent( return L10n.of(context).googlyEyesContent(
@ -90,6 +90,7 @@ class _CuteContentState extends State<CuteContent> {
'', '',
); );
} }
return null;
} }
} }

View file

@ -56,7 +56,7 @@ class _StartPollBottomSheetState extends State<StartPollBottomSheet> {
} }
} }
void _updateCanCreate([_]) { void _updateCanCreate([dynamic _]) {
final newCanCreate = _bodyController.text.trim().isNotEmpty && final newCanCreate = _bodyController.text.trim().isNotEmpty &&
!_answers.any((controller) => controller.text.trim().isEmpty); !_answers.any((controller) => controller.text.trim().isEmpty);
if (_canCreate != newCanCreate) { if (_canCreate != newCanCreate) {

View file

@ -30,7 +30,7 @@ class ChatEncryptionSettingsController extends State<ChatEncryptionSettings> {
} }
} }
void enableEncryption(_) async { void enableEncryption(dynamic _) async {
if (room.encrypted) { if (room.encrypted) {
showOkAlertDialog( showOkAlertDialog(
context: context, context: context,

View file

@ -29,7 +29,7 @@ class ChatMembersController extends State<ChatMembersPage> {
setFilter(); setFilter();
} }
void setFilter([_]) async { void setFilter([dynamic _]) async {
final filter = filterController.text.toLowerCase().trim(); final filter = filterController.text.toLowerCase().trim();
final members = this final members = this
@ -56,7 +56,7 @@ class ChatMembersController extends State<ChatMembersPage> {
}); });
} }
void refreshMembers([_]) async { void refreshMembers([dynamic _]) async {
Logs().d('Load room members from', widget.roomId); Logs().d('Load room members from', widget.roomId);
try { try {
setState(() { setState(() {

View file

@ -111,7 +111,7 @@ class PIPViewState extends State<PIPView> with TickerProviderStateMixin {
}); });
} }
void _onPanEnd(_) { void _onPanEnd(dynamic _) {
if (!_isDragging) return; if (!_isDragging) return;
final nearestCorner = _calculateNearestCorner( final nearestCorner = _calculateNearestCorner(
@ -128,7 +128,7 @@ class PIPViewState extends State<PIPView> with TickerProviderStateMixin {
}); });
} }
void _onPanStart(_) { void _onPanStart(dynamic _) {
if (_isAnimating()) return; if (_isAnimating()) return;
setState(() { setState(() {
_dragOffset = _offsets[_corner]!; _dragOffset = _offsets[_corner]!;

View file

@ -109,7 +109,7 @@ class NewGroupController extends State<NewGroup> {
context.pop<String>(spaceId); context.pop<String>(spaceId);
} }
void submitAction([_]) async { void submitAction([dynamic _]) async {
final client = Matrix.of(context).client; final client = Matrix.of(context).client;
try { try {

View file

@ -187,7 +187,7 @@ class SettingsController extends State<Settings> {
bool? crossSigningCached; bool? crossSigningCached;
bool? showChatBackupBanner; bool? showChatBackupBanner;
void firstRunBootstrapAction([_]) async { void firstRunBootstrapAction([dynamic _]) async {
if (showChatBackupBanner != true) { if (showChatBackupBanner != true) {
showOkAlertDialog( showOkAlertDialog(
context: context, context: context,

View file

@ -303,7 +303,7 @@ class _EmojiImportPreviewState extends State<_EmojiImportPreview> {
); );
} }
_setRenderError() { void _setRenderError() {
hasErrorNotifier.value = true; hasErrorNotifier.value = true;
widget.onRemove.call(); widget.onRemove.call();
} }

View file

@ -41,7 +41,7 @@ class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
WidgetsBinding.instance.addPostFrameCallback(_checkLoggedIn); WidgetsBinding.instance.addPostFrameCallback(_checkLoggedIn);
} }
void _checkLoggedIn(_) async { void _checkLoggedIn(dynamic _) async {
if (widget.clients.any((client) => client.isLogged())) return; if (widget.clients.any((client) => client.isLogged())) return;
await changePincode(null); await changePincode(null);

View file

@ -43,7 +43,7 @@ class ThemeController extends State<ThemeBuilder> {
listen: false, listen: false,
); );
void _loadData(_) async { void _loadData(dynamic _) async {
final preferences = final preferences =
_sharedPreferences ??= await SharedPreferences.getInstance(); _sharedPreferences ??= await SharedPreferences.getInstance();

View file

@ -5,18 +5,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "67.0.0" version: "91.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.4.1" version: "8.4.1"
animations: animations:
dependency: "direct main" dependency: "direct main"
description: description:
@ -495,10 +495,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: flutter_lints name: flutter_lints
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "6.0.0"
flutter_local_notifications: flutter_local_notifications:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1015,10 +1015,11 @@ packages:
license_checker: license_checker:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: license_checker path: "."
sha256: eea27638e42bc98fd91a6a8187eb57e5617e2c3c8b313a5d51b14bec7a8685e1 ref: HEAD
url: "https://pub.dev" resolved-ref: "38a65ff5b4b65db092b11dad999081388f75ece8"
source: hosted url: "https://github.com/krille-chan/license_checker.git"
source: git
version: "1.6.0" version: "1.6.0"
linkify: linkify:
dependency: "direct main" dependency: "direct main"
@ -1032,10 +1033,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: lints name: lints
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "6.0.0"
lists: lists:
dependency: transitive dependency: transitive
description: description:
@ -1176,10 +1177,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pana name: pana
sha256: "3fc3fe8e7a9fd4827fa4d625a423eec95d305b2bc3538a3adf7fd6c49217af97" sha256: eb816d35b80d3880335c3f2d139b376e81fd98a9ea273faf39f2c8914c4afba5
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.21.45" version: "0.23.3"
path: path:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1801,14 +1802,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.3.1" version: "3.3.1"
tar:
dependency: transitive
description:
name: tar
sha256: "22f67e2d77b51050436620b2a5de521c58ca6f0b75af1d9ab3c8cae2eae58fcd"
url: "https://pub.dev"
source: hosted
version: "1.0.5"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:

View file

@ -85,14 +85,16 @@ dependencies:
webrtc_interface: ^1.3.0 webrtc_interface: ^1.3.0
dev_dependencies: dev_dependencies:
flutter_lints: ^3.0.0 flutter_lints: ^6.0.0
flutter_native_splash: ^2.4.7 flutter_native_splash: ^2.4.7
flutter_test: flutter_test:
sdk: flutter sdk: flutter
import_sorter: ^4.6.0 import_sorter: ^4.6.0
integration_test: integration_test:
sdk: flutter 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 translations_cleaner: ^0.0.5
import_sorter: import_sorter: