From 6a56ec4e182e46bb54dec5e3fc425871f626f4f8 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 14 Apr 2021 10:37:15 +0200 Subject: [PATCH] refactor: Enable more lints --- analysis_options.yaml | 3 ++ lib/config/themes.dart | 28 ++++++++--------- lib/controllers/sign_up_controller.dart | 4 +-- .../sign_up_password_controller.dart | 4 +-- lib/utils/background_push.dart | 30 +++++++++---------- lib/utils/date_time_extension.dart | 14 ++++----- lib/utils/matrix_file_extension.dart | 2 +- lib/utils/platform_infos.dart | 2 +- lib/utils/room_status_extension.dart | 2 +- lib/utils/url_launcher.dart | 2 +- lib/views/chat.dart | 14 ++++----- lib/views/chat_details.dart | 2 +- lib/views/chat_encryption_settings.dart | 4 +-- lib/views/chat_list.dart | 4 +-- lib/views/invitation_selection.dart | 12 ++++---- lib/views/log_view.dart | 8 +++-- lib/views/login.dart | 2 +- lib/views/new_private_chat.dart | 4 +-- lib/views/search_view.dart | 2 +- lib/views/settings.dart | 4 +-- lib/views/settings_devices.dart | 10 +++---- lib/views/settings_emotes.dart | 2 +- lib/views/widgets/audio_player.dart | 18 +++++------ lib/views/widgets/avatar.dart | 2 +- .../widgets/chat_settings_popup_menu.dart | 4 +-- .../dialogs/key_verification_dialog.dart | 2 +- .../widgets/dialogs/recording_dialog.dart | 2 +- lib/views/widgets/list_items/message.dart | 8 ++--- .../list_items/participant_list_item.dart | 2 +- lib/views/widgets/matrix.dart | 2 +- lib/views/widgets/user_bottom_sheet.dart | 2 +- 31 files changed, 103 insertions(+), 98 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index daaf9c66..5e9faf26 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -4,6 +4,9 @@ linter: rules: - camel_case_types - avoid_print + - constant_identifier_names + - prefer_final_locals + - prefer_final_in_for_each analyzer: errors: diff --git a/lib/config/themes.dart b/lib/config/themes.dart index f450e36c..c1eed89d 100644 --- a/lib/config/themes.dart +++ b/lib/config/themes.dart @@ -7,24 +7,24 @@ import 'app_config.dart'; abstract class FluffyThemes { static const double columnWidth = 360.0; - static const fallback_text_style = + static const fallbackTextStyle = TextStyle(fontFamily: 'NotoSans', fontFamilyFallback: ['NotoEmoji']); static var fallback_text_theme = PlatformInfos.isDesktop ? TextTheme( - bodyText1: fallback_text_style, - bodyText2: fallback_text_style, - button: fallback_text_style, - caption: fallback_text_style, - overline: fallback_text_style, - headline1: fallback_text_style, - headline2: fallback_text_style, - headline3: fallback_text_style, - headline4: fallback_text_style, - headline5: fallback_text_style, - headline6: fallback_text_style, - subtitle1: fallback_text_style, - subtitle2: fallback_text_style) + bodyText1: fallbackTextStyle, + bodyText2: fallbackTextStyle, + button: fallbackTextStyle, + caption: fallbackTextStyle, + overline: fallbackTextStyle, + headline1: fallbackTextStyle, + headline2: fallbackTextStyle, + headline3: fallbackTextStyle, + headline4: fallbackTextStyle, + headline5: fallbackTextStyle, + headline6: fallbackTextStyle, + subtitle1: fallbackTextStyle, + subtitle2: fallbackTextStyle) : TextTheme(); static ThemeData light = ThemeData( diff --git a/lib/controllers/sign_up_controller.dart b/lib/controllers/sign_up_controller.dart index 58d969ec..eaa0f1b2 100644 --- a/lib/controllers/sign_up_controller.dart +++ b/lib/controllers/sign_up_controller.dart @@ -20,7 +20,7 @@ class SignUpController extends State { MatrixFile avatar; void setAvatarAction() async { - var file = + final file = await FilePickerCross.importFromStorage(type: FileTypeCross.image); if (file != null) { setState( @@ -35,7 +35,7 @@ class SignUpController extends State { void resetAvatarAction() => setState(() => avatar = null); void signUpAction([_]) async { - var matrix = Matrix.of(context); + final matrix = Matrix.of(context); if (usernameController.text.isEmpty) { setState(() => usernameError = L10n.of(context).pleaseChooseAUsername); } else { diff --git a/lib/controllers/sign_up_password_controller.dart b/lib/controllers/sign_up_password_controller.dart index 690a0639..3df67182 100644 --- a/lib/controllers/sign_up_password_controller.dart +++ b/lib/controllers/sign_up_password_controller.dart @@ -29,7 +29,7 @@ class SignUpPasswordController extends State { void toggleShowPassword() => setState(() => showPassword = !showPassword); void signUpAction({AuthenticationData auth}) async { - var matrix = Matrix.of(context); + final matrix = Matrix.of(context); if (passwordController.text.isEmpty) { setState(() => passwordError = L10n.of(context).pleaseEnterYourPassword); } else { @@ -42,7 +42,7 @@ class SignUpPasswordController extends State { try { setState(() => loading = true); - var waitForLogin = matrix.client.onLoginStateChanged.stream.first; + final waitForLogin = matrix.client.onLoginStateChanged.stream.first; await matrix.client.register( username: widget.username, password: passwordController.text, diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 85d1049a..b47672c2 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -300,13 +300,13 @@ class BackgroundPush { } // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project - var initializationSettingsAndroid = + final initializationSettingsAndroid = AndroidInitializationSettings('notifications_icon'); - var initializationSettingsIOS = + final initializationSettingsIOS = IOSInitializationSettings(onDidReceiveLocalNotification: (i, a, b, c) { return null; }); - var initializationSettings = InitializationSettings( + final initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS, ); @@ -622,7 +622,7 @@ class BackgroundPush { ); // Show notification - var androidPlatformChannelSpecifics = _getAndroidNotificationDetails( + final androidPlatformChannelSpecifics = _getAndroidNotificationDetails( styleInformation: MessagingStyleInformation( person, conversationTitle: title, @@ -636,8 +636,8 @@ class BackgroundPush { ), ticker: l10n.newMessageInFluffyChat, ); - var iOSPlatformChannelSpecifics = IOSNotificationDetails(); - var platformChannelSpecifics = NotificationDetails( + final iOSPlatformChannelSpecifics = IOSNotificationDetails(); + final platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics, ); @@ -655,8 +655,8 @@ class BackgroundPush { await setupLocalNotificationsPlugin(); await loadLocale(); - String eventId = data['event_id']; - String roomId = data['room_id']; + final String eventId = data['event_id']; + final String roomId = data['room_id']; final unread = ((data['counts'] is String ? json.decode(data.tryGet('counts', '{}')) : data.tryGet>( @@ -668,9 +668,9 @@ class BackgroundPush { } // Display notification - var androidPlatformChannelSpecifics = _getAndroidNotificationDetails(); - var iOSPlatformChannelSpecifics = IOSNotificationDetails(); - var platformChannelSpecifics = NotificationDetails( + final androidPlatformChannelSpecifics = _getAndroidNotificationDetails(); + final iOSPlatformChannelSpecifics = IOSNotificationDetails(); + final platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics, ); @@ -692,20 +692,20 @@ class BackgroundPush { final thumbnail = width == null && height == null ? false : true; final tempDirectory = (await getTemporaryDirectory()).path; final prefix = thumbnail ? 'thumbnail' : ''; - var file = + final file = File('$tempDirectory/${prefix}_${content.toString().split("/").last}'); if (!file.existsSync()) { final url = thumbnail ? content.getThumbnail(client, width: width, height: height) : content.getDownloadLink(client); - var request = await HttpClient().getUrl(Uri.parse(url)); - var response = await request.close(); + final request = await HttpClient().getUrl(Uri.parse(url)); + final response = await request.close(); if (response.statusCode >= 300) { // we are not in the 2xx range return null; } - var bytes = await consolidateHttpClientResponseBytes(response); + final bytes = await consolidateHttpClientResponseBytes(response); await file.writeAsBytes(bytes); } diff --git a/lib/utils/date_time_extension.dart b/lib/utils/date_time_extension.dart index 1257644d..bfd956e8 100644 --- a/lib/utils/date_time_extension.dart +++ b/lib/utils/date_time_extension.dart @@ -44,13 +44,13 @@ extension DateTimeExtension on DateTime { /// Returns [localizedTimeOfDay()] if the ChatTime is today, the name of the week /// day if the ChatTime is this week and a date string else. String localizedTimeShort(BuildContext context) { - var now = DateTime.now(); + final now = DateTime.now(); - var sameYear = now.year == year; + final sameYear = now.year == year; - var sameDay = sameYear && now.month == month && now.day == day; + final sameDay = sameYear && now.month == month && now.day == day; - var sameWeek = sameYear && + final sameWeek = sameYear && !sameDay && now.millisecondsSinceEpoch - millisecondsSinceEpoch < 1000 * 60 * 60 * 24 * 7; @@ -86,11 +86,11 @@ extension DateTimeExtension on DateTime { /// shows the date. /// TODO: Add localization String localizedTime(BuildContext context) { - var now = DateTime.now(); + final now = DateTime.now(); - var sameYear = now.year == year; + final sameYear = now.year == year; - var sameDay = sameYear && now.month == month && now.day == day; + final sameDay = sameYear && now.month == month && now.day == day; if (sameDay) return localizedTimeOfDay(context); return L10n.of(context).dateAndTimeOfDay( diff --git a/lib/utils/matrix_file_extension.dart b/lib/utils/matrix_file_extension.dart index 0dad0dda..b34bc4ae 100644 --- a/lib/utils/matrix_file_extension.dart +++ b/lib/utils/matrix_file_extension.dart @@ -15,7 +15,7 @@ extension MatrixFileExtension on MatrixFile { if (kIsWeb) { final fileName = name.split('/').last; final mimeType = mime(fileName); - var element = html.document.createElement('a'); + final element = html.document.createElement('a'); element.setAttribute( 'href', html.Url.createObjectUrlFromBlob(html.Blob([bytes]))); element.setAttribute('target', '_blank'); diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart index a5d35d1f..963067c1 100644 --- a/lib/utils/platform_infos.dart +++ b/lib/utils/platform_infos.dart @@ -40,7 +40,7 @@ abstract class PlatformInfos { } static void showDialog(BuildContext context) async { - var version = await PlatformInfos.getVersion(); + final version = await PlatformInfos.getVersion(); showAboutDialog( context: context, useRootNavigator: false, diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart index 7d8d50c9..97cf6b4e 100644 --- a/lib/utils/room_status_extension.dart +++ b/lib/utils/room_status_extension.dart @@ -35,7 +35,7 @@ extension RoomStatusExtension on Room { String getLocalizedTypingText(BuildContext context) { var typingText = ''; - var typingUsers = this.typingUsers; + final typingUsers = this.typingUsers; typingUsers.removeWhere((User u) => u.id == client.userID); if (AppConfig.hideTypingUsernames) { diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 2c4fbc80..959e2075 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -40,7 +40,7 @@ class UrlLauncher { var roomId = room?.id; // we make the servers a set and later on convert to a list, so that we can easily // deduplicate servers added via alias lookup and query parameter - var servers = {}; + final servers = {}; if (room == null && roomIdOrAlias.sigil == '#') { // we were unable to find the room locally...so resolve it final response = await showFutureLoadingDialog( diff --git a/lib/views/chat.dart b/lib/views/chat.dart index 3ac96a46..7796c98d 100644 --- a/lib/views/chat.dart +++ b/lib/views/chat.dart @@ -251,7 +251,7 @@ class _ChatState extends State { } void openCameraAction(BuildContext context) async { - var file = await ImagePicker().getImage(source: ImageSource.camera); + final file = await ImagePicker().getImage(source: ImageSource.camera); if (file == null) return; final bytes = await file.readAsBytes(); await showDialog( @@ -297,7 +297,7 @@ class _ChatState extends State { .getDisplayEvent(timeline) .getLocalizedBody(MatrixLocals(L10n.of(context))); } - for (var event in selectedEvents) { + for (final event in selectedEvents) { if (copyString.isNotEmpty) copyString += '\n\n'; copyString += event.getDisplayEvent(timeline).getLocalizedBody( MatrixLocals(L10n.of(context)), @@ -356,7 +356,7 @@ class _ChatState extends State { } void redactEventsAction(BuildContext context) async { - var confirmed = await showOkCancelAlertDialog( + final confirmed = await showOkCancelAlertDialog( context: context, title: L10n.of(context).messageWillBeRemovedWarning, okLabel: L10n.of(context).remove, @@ -365,7 +365,7 @@ class _ChatState extends State { ) == OkCancelResult.ok; if (!confirmed) return; - for (var event in selectedEvents) { + for (final event in selectedEvents) { await showFutureLoadingDialog( context: context, future: () => event.status > 0 ? event.redact() : event.remove()); @@ -374,7 +374,7 @@ class _ChatState extends State { } bool get canRedactSelectedEvents { - for (var event in selectedEvents) { + for (final event in selectedEvents) { if (event.canRedact == false) return false; } return true; @@ -512,7 +512,7 @@ class _ChatState extends State { @override Widget build(BuildContext context) { matrix = Matrix.of(context); - var client = matrix.client; + final client = matrix.client; room ??= client.getRoomById(widget.id); if (room == null) { return Scaffold( @@ -985,7 +985,7 @@ class _ChatState extends State { selectedEvents.length == 1)) { return Container(); } - var emojis = List.from(AppEmojis.emojis); + final emojis = List.from(AppEmojis.emojis); final allReactionEvents = selectedEvents.first .aggregatedEvents( timeline, RelationshipTypes.Reaction) diff --git a/lib/views/chat_details.dart b/lib/views/chat_details.dart index a130bb71..a6d3920b 100644 --- a/lib/views/chat_details.dart +++ b/lib/views/chat_details.dart @@ -83,7 +83,7 @@ class _ChatDetailsState extends State { final aliases = aliasEvent != null ? aliasEvent.content['aliases'] ?? [] : []; if (aliases.indexWhere((s) => s == canonicalAlias) == -1) { - var newAliases = List.from(aliases); + final newAliases = List.from(aliases); newAliases.add(canonicalAlias); final response = await showFutureLoadingDialog( context: context, diff --git a/lib/views/chat_encryption_settings.dart b/lib/views/chat_encryption_settings.dart index 7ba4a544..0ae5d869 100644 --- a/lib/views/chat_encryption_settings.dart +++ b/lib/views/chat_encryption_settings.dart @@ -116,7 +116,7 @@ class _ChatEncryptionSettingsState extends State { onSelected: (action) => onSelected(context, action, deviceKeys[i]), itemBuilder: (c) { - var items = >[]; + final items = >[]; if (room .client .userDeviceKeys[deviceKeys[i].userId] @@ -166,7 +166,7 @@ class _ChatEncryptionSettingsState extends State { onSelected: (action) => onSelected(context, action, deviceKeys[i]), itemBuilder: (c) { - var items = >[]; + final items = >[]; if (deviceKeys[i].blocked || !deviceKeys[i].verified) { items.add(PopupMenuItem( diff --git a/lib/views/chat_list.dart b/lib/views/chat_list.dart index 8761c5dd..c10bc746 100644 --- a/lib/views/chat_list.dart +++ b/lib/views/chat_list.dart @@ -182,7 +182,7 @@ class _ChatListState extends State { } Future waitForFirstSync(BuildContext context) async { - var client = Matrix.of(context).client; + final client = Matrix.of(context).client; if (client.prevBatch?.isEmpty ?? true) { await client.onFirstSync.stream.first; } @@ -371,7 +371,7 @@ class _ChatListState extends State { future: waitForFirstSync(context), builder: (BuildContext context, snapshot) { if (snapshot.hasData) { - var rooms = List.from( + final rooms = List.from( Matrix.of(context).client.rooms); rooms.removeWhere((room) => room.lastEvent == null); if (rooms.isEmpty) { diff --git a/lib/views/invitation_selection.dart b/lib/views/invitation_selection.dart index e2f79af3..be942223 100644 --- a/lib/views/invitation_selection.dart +++ b/lib/views/invitation_selection.dart @@ -30,16 +30,16 @@ class _InvitationSelectionState extends State { Room room; Future> getContacts(BuildContext context) async { - var client2 = Matrix.of(context).client; + final client2 = Matrix.of(context).client; final client = client2; - var participants = await room.requestParticipants(); + final participants = await room.requestParticipants(); participants.removeWhere( (u) => ![Membership.join, Membership.invite].contains(u.membership), ); - var contacts = []; - var userMap = {}; + final contacts = []; + final userMap = {}; for (var i = 0; i < client.rooms.length; i++) { - var roomUsers = client.rooms[i].getParticipants(); + final roomUsers = client.rooms[i].getParticipants(); for (var j = 0; j < roomUsers.length; j++) { if (userMap[roomUsers[j].id] != true && @@ -157,7 +157,7 @@ class _InvitationSelectionState extends State { child: CircularProgressIndicator(), ); } - var contacts = snapshot.data; + final contacts = snapshot.data; return ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, diff --git a/lib/views/log_view.dart b/lib/views/log_view.dart index 1e7a4665..8de186ba 100644 --- a/lib/views/log_view.dart +++ b/lib/views/log_view.dart @@ -61,6 +61,7 @@ class _LogViewerState extends State { } class _AnsiParser { + // ignore: constant_identifier_names static const TEXT = 0, BRACKET = 1, CODE = 2; final String text; @@ -73,12 +74,13 @@ class _AnsiParser { spans = []; var state = TEXT; StringBuffer buffer; - var text = StringBuffer(); + final text = StringBuffer(); var code = 0; List codes; + // ignore: prefer_final_locals for (var i = 0, n = s.length; i < n; i++) { - var c = s[i]; + final c = s[i]; switch (state) { case TEXT: @@ -104,7 +106,7 @@ class _AnsiParser { case CODE: buffer.write(c); - var codeUnit = c.codeUnitAt(0); + final codeUnit = c.codeUnitAt(0); if (codeUnit >= 48 && codeUnit <= 57) { code = code * 10 + codeUnit - 48; continue; diff --git a/lib/views/login.dart b/lib/views/login.dart index 6cd89e5c..00806c4b 100644 --- a/lib/views/login.dart +++ b/lib/views/login.dart @@ -26,7 +26,7 @@ class _LoginState extends State { bool showPassword = false; void login(BuildContext context) async { - var matrix = Matrix.of(context); + final matrix = Matrix.of(context); if (usernameController.text.isEmpty) { setState(() => usernameError = L10n.of(context).pleaseEnterYourUsername); } else { diff --git a/lib/views/new_private_chat.dart b/lib/views/new_private_chat.dart index 5b87edac..1598dae0 100644 --- a/lib/views/new_private_chat.dart +++ b/lib/views/new_private_chat.dart @@ -121,7 +121,7 @@ class _NewPrivateChatState extends State { return L10n.of(context).pleaseEnterAMatrixIdentifier; } final matrix = Matrix.of(context); - var mxid = '@' + controller.text.trim(); + final mxid = '@' + controller.text.trim(); if (mxid == matrix.client.userID) { return L10n.of(context).youCannotInviteYourself; } @@ -187,7 +187,7 @@ class _NewPrivateChatState extends State { child: ListView.builder( itemCount: foundProfiles.length, itemBuilder: (BuildContext context, int i) { - var foundProfile = foundProfiles[i]; + final foundProfile = foundProfiles[i]; return ListTile( onTap: () { setState(() { diff --git a/lib/views/search_view.dart b/lib/views/search_view.dart index a0f50a45..710567c7 100644 --- a/lib/views/search_view.dart +++ b/lib/views/search_view.dart @@ -355,7 +355,7 @@ class _SearchViewState extends State { ? ListView.builder( itemCount: foundProfiles.length, itemBuilder: (BuildContext context, int i) { - var foundProfile = foundProfiles[i]; + final foundProfile = foundProfiles[i]; return ListTile( onTap: () async { final roomID = await showFutureLoadingDialog( diff --git a/lib/views/settings.dart b/lib/views/settings.dart index a5439d15..f79d0b56 100644 --- a/lib/views/settings.dart +++ b/lib/views/settings.dart @@ -51,7 +51,7 @@ class _SettingsState extends State { OkCancelResult.cancel) { return; } - var matrix = Matrix.of(context); + final matrix = Matrix.of(context); await showFutureLoadingDialog( context: context, future: () => matrix.client.logout(), @@ -146,7 +146,7 @@ class _SettingsState extends State { void setJitsiInstanceAction(BuildContext context) async { const prefix = 'https://'; - var input = await showTextInputDialog( + final input = await showTextInputDialog( context: context, title: L10n.of(context).editJitsiInstance, okLabel: L10n.of(context).ok, diff --git a/lib/views/settings_devices.dart b/lib/views/settings_devices.dart index a796d8ee..73968b65 100644 --- a/lib/views/settings_devices.dart +++ b/lib/views/settings_devices.dart @@ -38,9 +38,9 @@ class DevicesSettingsState extends State { useRootNavigator: false, ) == OkCancelResult.cancel) return; - var matrix = Matrix.of(context); - var deviceIds = []; - for (var userDevice in devices) { + final matrix = Matrix.of(context); + final deviceIds = []; + for (final userDevice in devices) { deviceIds.add(userDevice.deviceId); } @@ -150,10 +150,10 @@ class DevicesSettingsState extends State { if (!snapshot.hasData || this.devices == null) { return Center(child: CircularProgressIndicator()); } - Function isOwnDevice = (Device userDevice) => + final Function isOwnDevice = (Device userDevice) => userDevice.deviceId == Matrix.of(context).client.deviceID; final devices = List.from(this.devices); - var thisDevice = + final thisDevice = devices.firstWhere(isOwnDevice, orElse: () => null); devices.removeWhere(isOwnDevice); devices.sort((a, b) => b.lastSeenTs.compareTo(a.lastSeenTs)); diff --git a/lib/views/settings_emotes.dart b/lib/views/settings_emotes.dart index 7d68415a..983944f5 100644 --- a/lib/views/settings_emotes.dart +++ b/lib/views/settings_emotes.dart @@ -137,7 +137,7 @@ class _EmotesSettingsState extends State { @override Widget build(BuildContext context) { - var client = Matrix.of(context).client; + final client = Matrix.of(context).client; if (emotes == null) { emotes = <_EmoteEntry>[]; Map emoteSource; diff --git a/lib/views/widgets/audio_player.dart b/lib/views/widgets/audio_player.dart index 2e92f338..40b14561 100644 --- a/lib/views/widgets/audio_player.dart +++ b/lib/views/widgets/audio_player.dart @@ -27,10 +27,10 @@ class AudioPlayer extends StatefulWidget { _AudioPlayerState createState() => _AudioPlayerState(); } -enum AudioPlayerStatus { NOT_DOWNLOADED, DOWNLOADING, DOWNLOADED } +enum AudioPlayerStatus { notDownloaded, downloading, downloaded } class _AudioPlayerState extends State { - AudioPlayerStatus status = AudioPlayerStatus.NOT_DOWNLOADED; + AudioPlayerStatus status = AudioPlayerStatus.notDownloaded; final FlutterSoundPlayer flutterSound = FlutterSoundPlayer(); @@ -70,14 +70,14 @@ class _AudioPlayerState extends State { } Future _downloadAction() async { - if (status != AudioPlayerStatus.NOT_DOWNLOADED) return; - setState(() => status = AudioPlayerStatus.DOWNLOADING); + if (status != AudioPlayerStatus.notDownloaded) return; + setState(() => status = AudioPlayerStatus.downloading); try { final matrixFile = await widget.event.downloadAndDecryptAttachmentCached(); setState(() { audioFile = matrixFile.bytes; - status = AudioPlayerStatus.DOWNLOADED; + status = AudioPlayerStatus.downloaded; }); _playAction(); } catch (e, s) { @@ -126,7 +126,7 @@ class _AudioPlayerState extends State { }); AudioPlayer.currentId = null; } else if (e != null) { - var txt = + final txt = '${e.position.inMinutes.toString().padLeft(2, '0')}:${(e.position.inSeconds % 60).toString().padLeft(2, '0')}'; setState(() { maxPosition = e.duration.inMilliseconds.toDouble(); @@ -158,7 +158,7 @@ class _AudioPlayerState extends State { children: [ Container( width: 30, - child: status == AudioPlayerStatus.DOWNLOADING + child: status == AudioPlayerStatus.downloading ? CircularProgressIndicator(strokeWidth: 2) : IconButton( icon: Icon( @@ -171,7 +171,7 @@ class _AudioPlayerState extends State { ? L10n.of(context).audioPlayerPause : L10n.of(context).audioPlayerPlay, onPressed: () { - if (status == AudioPlayerStatus.DOWNLOADED) { + if (status == AudioPlayerStatus.downloaded) { _playAction(); } else { _downloadAction(); @@ -184,7 +184,7 @@ class _AudioPlayerState extends State { value: currentPosition, onChanged: (double position) => flutterSound .seekToPlayer(Duration(milliseconds: position.toInt())), - max: status == AudioPlayerStatus.DOWNLOADED ? maxPosition : 0, + max: status == AudioPlayerStatus.downloaded ? maxPosition : 0, min: 0, ), ), diff --git a/lib/views/widgets/avatar.dart b/lib/views/widgets/avatar.dart index 066139bc..96bdd477 100644 --- a/lib/views/widgets/avatar.dart +++ b/lib/views/widgets/avatar.dart @@ -25,7 +25,7 @@ class Avatar extends StatelessWidget { @override Widget build(BuildContext context) { - var thumbnail = mxContent?.getThumbnail( + final thumbnail = mxContent?.getThumbnail( client ?? Matrix.of(context).client, width: size * MediaQuery.of(context).devicePixelRatio, height: size * MediaQuery.of(context).devicePixelRatio, diff --git a/lib/views/widgets/chat_settings_popup_menu.dart b/lib/views/widgets/chat_settings_popup_menu.dart index 6d2616f5..54c03f5e 100644 --- a/lib/views/widgets/chat_settings_popup_menu.dart +++ b/lib/views/widgets/chat_settings_popup_menu.dart @@ -38,7 +38,7 @@ class _ChatSettingsPopupMenuState extends State { .listen( (u) => setState(() => null), ); - var items = >[ + final items = >[ widget.room.pushRuleState == PushRuleState.notify ? PopupMenuItem( value: 'mute', @@ -66,7 +66,7 @@ class _ChatSettingsPopupMenuState extends State { onSelected: (String choice) async { switch (choice) { case 'leave': - var confirmed = await showOkCancelAlertDialog( + final confirmed = await showOkCancelAlertDialog( context: context, useRootNavigator: false, title: L10n.of(context).areYouSure, diff --git a/lib/views/widgets/dialogs/key_verification_dialog.dart b/lib/views/widgets/dialogs/key_verification_dialog.dart index bde5c663..3023f3b9 100644 --- a/lib/views/widgets/dialogs/key_verification_dialog.dart +++ b/lib/views/widgets/dialogs/key_verification_dialog.dart @@ -248,7 +248,7 @@ class _KeyVerificationPageState extends State { )); break; case KeyVerificationState.waitingSas: - var acceptText = widget.request.sasTypes.contains('emoji') + final acceptText = widget.request.sasTypes.contains('emoji') ? L10n.of(context).waitingPartnerEmoji : L10n.of(context).waitingPartnerNumbers; body = Column( diff --git a/lib/views/widgets/dialogs/recording_dialog.dart b/lib/views/widgets/dialogs/recording_dialog.dart index 80af9e34..1388ecff 100644 --- a/lib/views/widgets/dialogs/recording_dialog.dart +++ b/lib/views/widgets/dialogs/recording_dialog.dart @@ -36,7 +36,7 @@ class _RecordingDialogState extends State { _recordedPath = '${tempDir.path}/recording${ext[codec.index]}'; // delete any existing file - var outputFile = File(_recordedPath); + final outputFile = File(_recordedPath); if (outputFile.existsSync()) { await outputFile.delete(); } diff --git a/lib/views/widgets/list_items/message.dart b/lib/views/widgets/list_items/message.dart index bf6f8311..f329bdd3 100644 --- a/lib/views/widgets/list_items/message.dart +++ b/lib/views/widgets/list_items/message.dart @@ -45,9 +45,9 @@ class Message extends StatelessWidget { return StateMessage(event, unfold: unfold); } - var client = Matrix.of(context).client; + final client = Matrix.of(context).client; final ownMessage = event.senderId == client.userID; - var alignment = ownMessage ? Alignment.topRight : Alignment.topLeft; + final alignment = ownMessage ? Alignment.topRight : Alignment.topLeft; var color = Theme.of(context).secondaryHeaderColor; final sameSender = nextEvent != null && [EventTypes.Message, EventTypes.Sticker].contains(nextEvent.type) @@ -58,7 +58,7 @@ class Message extends StatelessWidget { : Theme.of(context).brightness == Brightness.dark ? Colors.white : Colors.black; - var rowMainAxisAlignment = + final rowMainAxisAlignment = ownMessage ? MainAxisAlignment.end : MainAxisAlignment.start; final displayEvent = event.getDisplayEvent(timeline); @@ -72,7 +72,7 @@ class Message extends StatelessWidget { : Theme.of(context).primaryColor; } - var rowChildren = [ + final rowChildren = [ Expanded( child: Container( alignment: alignment, diff --git a/lib/views/widgets/list_items/participant_list_item.dart b/lib/views/widgets/list_items/participant_list_item.dart index 18230ffd..11403db9 100644 --- a/lib/views/widgets/list_items/participant_list_item.dart +++ b/lib/views/widgets/list_items/participant_list_item.dart @@ -12,7 +12,7 @@ class ParticipantListItem extends StatelessWidget { @override Widget build(BuildContext context) { - var membershipBatch = { + final membershipBatch = { Membership.join: '', Membership.ban: L10n.of(context).banned, Membership.invite: L10n.of(context).invited, diff --git a/lib/views/widgets/matrix.dart b/lib/views/widgets/matrix.dart index da0a342e..202eac48 100644 --- a/lib/views/widgets/matrix.dart +++ b/lib/views/widgets/matrix.dart @@ -238,7 +238,7 @@ class MatrixState extends State with WidgetsBindingObserver { Future initConfig() async { try { - var configJsonString = + final configJsonString = utf8.decode((await http.get('config.json')).bodyBytes); final configJson = json.decode(configJsonString); AppConfig.loadFromJson(configJson); diff --git a/lib/views/widgets/user_bottom_sheet.dart b/lib/views/widgets/user_bottom_sheet.dart index 5484ad1b..706bd0dc 100644 --- a/lib/views/widgets/user_bottom_sheet.dart +++ b/lib/views/widgets/user_bottom_sheet.dart @@ -90,7 +90,7 @@ class UserBottomSheet extends StatelessWidget { Widget build(BuildContext context) { final client = user.room.client; final presence = client.presences[user.id]; - var items = >[]; + final items = >[]; if (onMention != null) { items.add(