diff --git a/packages/stream_chat_flutter/analysis_options.yaml b/packages/stream_chat_flutter/analysis_options.yaml index 42965ec7..8d6f9064 100644 --- a/packages/stream_chat_flutter/analysis_options.yaml +++ b/packages/stream_chat_flutter/analysis_options.yaml @@ -1,63 +1,63 @@ -#include: package:pedantic/analysis_options.yaml -# -#analyzer: -# enable-experiment: -# - extension-methods -# exclude: -# - lib/**/*.g.dart -# - example/** -# -#linter: -# rules: -# # these rules are documented on and in the same order as -# # the Dart Lint rules page to make maintenance easier -# # https://github.com/dart-lang/linter/blob/master/example/all.yaml -# # - always_declare_return_types -# # - always_specify_types -# # - annotate_overrides -# # - avoid_as -# - avoid_empty_else -# - avoid_init_to_null -# - avoid_return_types_on_setters -# - avoid_web_libraries_in_flutter -# - await_only_futures -# - camel_case_types -# - cancel_subscriptions -# - close_sinks -# # - comment_references # we do not presume as to what people want to reference in their dartdocs -# # - constant_identifier_names # https://github.com/dart-lang/linter/issues/204 -# - control_flow_in_finally -# - empty_constructor_bodies -# - empty_statements -# - hash_and_equals -# - implementation_imports -# # - invariant_booleans -# # - iterable_contains_unrelated_type -# - library_names -# # - library_prefixes -# # - list_remove_unrelated_type -# # - literal_only_boolean_expressions -# - non_constant_identifier_names -# # - one_member_abstracts -# # - only_throw_errors -# # - overridden_fields -## - package_api_docs -# - package_names -# - package_prefixed_library_names -# - prefer_is_not_empty -# # - prefer_mixin # https://github.com/dart-lang/language/issues/32 -# - public_member_api_docs -# - slash_for_doc_comments -# # - sort_constructors_first -# # - sort_unnamed_constructors_first -# # - super_goes_last # no longer needed w/ Dart 2 -# - test_types_in_equals -# - throw_in_finally -# # - type_annotate_public_apis # subset of always_specify_types -# - type_init_formals -# # - unawaited_futures -# - unnecessary_brace_in_string_interps -# - unnecessary_getters_setters -# - unnecessary_statements +include: package:pedantic/analysis_options.yaml + +analyzer: + enable-experiment: + - extension-methods + exclude: + - lib/**/*.g.dart + - example/** + +linter: + rules: + # these rules are documented on and in the same order as + # the Dart Lint rules page to make maintenance easier + # https://github.com/dart-lang/linter/blob/master/example/all.yaml + # - always_declare_return_types + # - always_specify_types + # - annotate_overrides + # - avoid_as + - avoid_empty_else + - avoid_init_to_null + - avoid_return_types_on_setters + - avoid_web_libraries_in_flutter + - await_only_futures + - camel_case_types + - cancel_subscriptions + - close_sinks + # - comment_references # we do not presume as to what people want to reference in their dartdocs + # - constant_identifier_names # https://github.com/dart-lang/linter/issues/204 + - control_flow_in_finally + - empty_constructor_bodies + - empty_statements + - hash_and_equals + - implementation_imports + # - invariant_booleans + # - iterable_contains_unrelated_type + - library_names + # - library_prefixes + # - list_remove_unrelated_type + # - literal_only_boolean_expressions + - non_constant_identifier_names + # - one_member_abstracts + # - only_throw_errors + # - overridden_fields +# - package_api_docs + - package_names + - package_prefixed_library_names + - prefer_is_not_empty + # - prefer_mixin # https://github.com/dart-lang/language/issues/32 + - public_member_api_docs + - slash_for_doc_comments + # - sort_constructors_first + # - sort_unnamed_constructors_first + # - super_goes_last # no longer needed w/ Dart 2 + - test_types_in_equals + - throw_in_finally + # - type_annotate_public_apis # subset of always_specify_types + - type_init_formals + # - unawaited_futures + - unnecessary_brace_in_string_interps + - unnecessary_getters_setters + - unnecessary_statements - unrelated_type_equality_checks - valid_regexps diff --git a/packages/stream_chat_flutter/example/lib/chat_info_screen.dart b/packages/stream_chat_flutter/example/lib/chat_info_screen.dart index a6b14dec..8db438c3 100644 --- a/packages/stream_chat_flutter/example/lib/chat_info_screen.dart +++ b/packages/stream_chat_flutter/example/lib/chat_info_screen.dart @@ -1,7 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; - import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'main.dart'; @@ -285,7 +284,7 @@ class _ChatInfoScreenState extends State { titleTextStyle: StreamChatTheme.of(context).textTheme.body, leading: Padding( padding: const EdgeInsets.symmetric(horizontal: 22.0), - child: StreamSvgIcon.Icon_group( + child: StreamSvgIcon.iconGroup( size: 24.0, color: StreamChatTheme.of(context).colorTheme.black.withOpacity(0.5), diff --git a/packages/stream_chat_flutter/example/lib/choose_user_page.dart b/packages/stream_chat_flutter/example/lib/choose_user_page.dart index 02852c64..a23db661 100644 --- a/packages/stream_chat_flutter/example/lib/choose_user_page.dart +++ b/packages/stream_chat_flutter/example/lib/choose_user_page.dart @@ -213,7 +213,7 @@ class ChooseUserPage extends StatelessWidget { .grey, ), ), - trailing: StreamSvgIcon.arrow_right( + trailing: StreamSvgIcon.arrowRight( color: StreamChatTheme.of(context) .colorTheme .accentBlue, diff --git a/packages/stream_chat_flutter/example/lib/group_info_screen.dart b/packages/stream_chat_flutter/example/lib/group_info_screen.dart index 0f200c82..d22b1ce4 100644 --- a/packages/stream_chat_flutter/example/lib/group_info_screen.dart +++ b/packages/stream_chat_flutter/example/lib/group_info_screen.dart @@ -377,7 +377,7 @@ class _GroupInfoScreenState extends State { mainAxisSize: MainAxisSize.min, children: [ InkWell( - child: StreamSvgIcon.close_small(), + child: StreamSvgIcon.closeSmall(), onTap: () { setState(() { _nameController.text = @@ -739,7 +739,7 @@ class _GroupInfoScreenState extends State { ), SizedBox(width: 16.0), IconButton( - icon: StreamSvgIcon.close_small( + icon: StreamSvgIcon.closeSmall( color: theme.colorTheme.grey, ), constraints: BoxConstraints.tightFor( @@ -869,7 +869,7 @@ class _GroupInfoScreenState extends State { isUserAdmin) _buildModalListTile( context, - StreamSvgIcon.Icon_user_settings( + StreamSvgIcon.iconUserSettings( color: StreamChatTheme.of(context).colorTheme.grey, size: 24.0, ), @@ -891,7 +891,7 @@ class _GroupInfoScreenState extends State { }, color: StreamChatTheme.of(context).colorTheme.accentRed), _buildModalListTile( context, - StreamSvgIcon.close_small( + StreamSvgIcon.closeSmall( color: StreamChatTheme.of(context).colorTheme.grey, size: 24.0, ), diff --git a/packages/stream_chat_flutter/example/lib/main.dart b/packages/stream_chat_flutter/example/lib/main.dart index 775b1d6e..45f86f07 100644 --- a/packages/stream_chat_flutter/example/lib/main.dart +++ b/packages/stream_chat_flutter/example/lib/main.dart @@ -294,7 +294,7 @@ class _HomePageState extends State { ), ), trailing: IconButton( - icon: StreamSvgIcon.Icon_moon( + icon: StreamSvgIcon.iconMoon( size: 24, ), color: StreamChatTheme.of(context).colorTheme.grey, diff --git a/packages/stream_chat_flutter/example/lib/new_group_chat_screen.dart b/packages/stream_chat_flutter/example/lib/new_group_chat_screen.dart index 4e924d86..209d3729 100644 --- a/packages/stream_chat_flutter/example/lib/new_group_chat_screen.dart +++ b/packages/stream_chat_flutter/example/lib/new_group_chat_screen.dart @@ -67,7 +67,7 @@ class _NewGroupChatScreenState extends State { actions: [ if (_selectedUsers.isNotEmpty) IconButton( - icon: StreamSvgIcon.arrow_right( + icon: StreamSvgIcon.arrowRight( color: StreamChatTheme.of(context).colorTheme.accentBlue, ), onPressed: () async { diff --git a/packages/stream_chat_flutter/example/lib/search_text_field.dart b/packages/stream_chat_flutter/example/lib/search_text_field.dart index ff34e8a9..9628ddba 100644 --- a/packages/stream_chat_flutter/example/lib/search_text_field.dart +++ b/packages/stream_chat_flutter/example/lib/search_text_field.dart @@ -71,7 +71,7 @@ class SearchTextField extends StatelessWidget { color: Colors.transparent, child: IconButton( padding: const EdgeInsets.all(0), - icon: StreamSvgIcon.close_small( + icon: StreamSvgIcon.closeSmall( color: Colors.grey, ), splashRadius: 24, diff --git a/packages/stream_chat_flutter/lib/src/channel_bottom_sheet.dart b/packages/stream_chat_flutter/lib/src/channel_bottom_sheet.dart index b380eb01..57b27a2f 100644 --- a/packages/stream_chat_flutter/lib/src/channel_bottom_sheet.dart +++ b/packages/stream_chat_flutter/lib/src/channel_bottom_sheet.dart @@ -195,7 +195,7 @@ class _ChannelBottomSheetState extends State { OptionListTile( leading: Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: StreamSvgIcon.close_small( + child: StreamSvgIcon.closeSmall( color: StreamChatTheme.of(context).colorTheme.grey, ), ), diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 27194627..6845a632 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -89,8 +89,8 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { return ConnectionStatusBuilder( statusBuilder: (context, status) { - String statusString = ''; - bool showStatus = true; + var statusString = ''; + var showStatus = true; switch (status) { case ConnectionStatus.connected: diff --git a/packages/stream_chat_flutter/lib/src/channel_list_header.dart b/packages/stream_chat_flutter/lib/src/channel_list_header.dart index 045d24d5..cca4170e 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_header.dart @@ -82,8 +82,8 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { final user = _client.state.user; return ConnectionStatusBuilder( statusBuilder: (context, status) { - String statusString = ''; - bool showStatus = true; + var statusString = ''; + var showStatus = true; switch (status) { case ConnectionStatus.connected: diff --git a/packages/stream_chat_flutter/lib/src/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel_preview.dart index eddd0ea6..2d29f12b 100644 --- a/packages/stream_chat_flutter/lib/src/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel_preview.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import '../stream_chat_flutter.dart'; import 'channel_name.dart'; @@ -269,7 +269,7 @@ class ChannelPreview extends StatelessWidget { TextStyle normalTextStyle, TextStyle mentionsTextStyle) { var textList = text.split(' '); - List resList = []; + var resList = []; for (var e in textList) { if (mentions != null && mentions.isNotEmpty && diff --git a/packages/stream_chat_flutter/lib/src/extension.dart b/packages/stream_chat_flutter/lib/src/extension.dart index ad26735a..75a03925 100644 --- a/packages/stream_chat_flutter/lib/src/extension.dart +++ b/packages/stream_chat_flutter/lib/src/extension.dart @@ -1,18 +1,20 @@ -import 'package:emojis/emoji.dart'; import 'package:characters/characters.dart'; +import 'package:emojis/emoji.dart'; final _emojis = Emoji.all(); +/// String extension extension StringExtension on String { + /// Returns the capitalized string String capitalize() { - return "${this[0].toUpperCase()}${this.substring(1)}"; + return '${this[0].toUpperCase()}${substring(1)}'; } // Emojis guidelines // 1 to 3 emojis: big size with no text bubble. // 4+ emojis or emojis+text: standard size with text bubble. bool get isOnlyEmoji { - final characters = this.trim().characters; + final characters = trim().characters; if (characters.isEmpty) return false; if (characters.length > 3) return false; return characters.every((c) => _emojis.map((e) => e.char).contains(c)); diff --git a/packages/stream_chat_flutter/lib/src/file_attachment.dart b/packages/stream_chat_flutter/lib/src/file_attachment.dart index 0fff2445..209cdb99 100644 --- a/packages/stream_chat_flutter/lib/src/file_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/file_attachment.dart @@ -3,10 +3,10 @@ import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/utils.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:video_compress/video_compress.dart'; import 'package:video_player/video_player.dart'; @@ -110,7 +110,7 @@ class _FileAttachmentState extends State { type: MaterialType.transparency, child: widget.trailing ?? IconButton( - icon: StreamSvgIcon.cloud_download( + icon: StreamSvgIcon.cloudDownload( color: StreamChatTheme.of(context).colorTheme.black, ), padding: const EdgeInsets.all(8), diff --git a/packages/stream_chat_flutter/lib/src/full_screen_media.dart b/packages/stream_chat_flutter/lib/src/full_screen_media.dart index 98ed3384..16ab0da5 100644 --- a/packages/stream_chat_flutter/lib/src/full_screen_media.dart +++ b/packages/stream_chat_flutter/lib/src/full_screen_media.dart @@ -258,9 +258,9 @@ class VideoPackage { _videoPlayerController.addListener(errorListener); } - get videoPlayer => _videoPlayerController; + VideoPlayerController get videoPlayer => _videoPlayerController; - get chewieController => _chewieController; + ChewieController get chewieController => _chewieController; void dispose() { _videoPlayerController.dispose(); diff --git a/packages/stream_chat_flutter/lib/src/image_actions_modal.dart b/packages/stream_chat_flutter/lib/src/image_actions_modal.dart index 2a251c61..4be1dc1d 100644 --- a/packages/stream_chat_flutter/lib/src/image_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/image_actions_modal.dart @@ -56,7 +56,7 @@ class ImageActionsModal extends StatelessWidget { _buildButton( context, 'Reply', - StreamSvgIcon.Icon_curve_line_left_up( + StreamSvgIcon.iconCurveLineLeftUp( size: 24.0, color: StreamChatTheme.of(context).colorTheme.grey, ), @@ -76,7 +76,7 @@ class ImageActionsModal extends StatelessWidget { _buildButton( context, 'Save ${urls[currentIndex].type == 'video' ? 'Video' : 'Image'}', - StreamSvgIcon.Icon_save( + StreamSvgIcon.iconSave( size: 24.0, color: StreamChatTheme.of(context).colorTheme.grey, ), @@ -167,14 +167,14 @@ class ImageActionsModal extends StatelessWidget { final result = await ImageGallerySaver.saveImage( Uint8List.fromList(response.data), quality: 60, - name: "${DateTime.now().millisecondsSinceEpoch}"); + name: '${DateTime.now().millisecondsSinceEpoch}'); return result; } Future _saveVideo(String url) async { var appDocDir = await getTemporaryDirectory(); var savePath = - appDocDir.path + "/${DateTime.now().millisecondsSinceEpoch}.mp4"; + appDocDir.path + '/${DateTime.now().millisecondsSinceEpoch}.mp4'; await Dio().download(url, savePath); final result = await ImageGallerySaver.saveFile(savePath); print(result); diff --git a/packages/stream_chat_flutter/lib/src/image_footer.dart b/packages/stream_chat_flutter/lib/src/image_footer.dart index 4e87423e..7b0ed621 100644 --- a/packages/stream_chat_flutter/lib/src/image_footer.dart +++ b/packages/stream_chat_flutter/lib/src/image_footer.dart @@ -7,9 +7,9 @@ import 'package:dio/dio.dart'; import 'package:esys_flutter_share/esys_flutter_share.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; class ImageFooter extends StatefulWidget implements PreferredSizeWidget { /// Callback to call when pressing the back button. @@ -54,36 +54,17 @@ class ImageFooter extends StatefulWidget implements PreferredSizeWidget { } class _ImageFooterState extends State { - //ignore:unused_field - bool _userSearchMode = false; TextEditingController _searchController; final TextEditingController _messageController = TextEditingController(); final FocusNode _messageFocusNode = FocusNode(); - //ignore:unused_field - String _channelNameQuery; - final List _selectedChannels = []; - Timer _debounce; - Function modalSetStateCallback; - void _userNameListener() { - if (_debounce?.isActive ?? false) _debounce.cancel(); - _debounce = Timer(const Duration(milliseconds: 350), () { - if (mounted && modalSetStateCallback != null) { - modalSetStateCallback(() { - _channelNameQuery = _searchController.text; - }); - } - }); - } - @override void initState() { super.initState(); - _searchController = TextEditingController()..addListener(_userNameListener); _messageFocusNode.addListener(() { setState(() {}); }); @@ -92,7 +73,6 @@ class _ImageFooterState extends State { @override void dispose() { _searchController?.clear(); - _searchController?.removeListener(_userNameListener); _searchController?.dispose(); super.dispose(); } @@ -113,7 +93,7 @@ class _ImageFooterState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( - icon: StreamSvgIcon.Icon_SHARE( + icon: StreamSvgIcon.iconShare( size: 24.0, color: StreamChatTheme.of(context).colorTheme.black, ), @@ -151,7 +131,7 @@ class _ImageFooterState extends State { ), ), IconButton( - icon: StreamSvgIcon.Icon_grid( + icon: StreamSvgIcon.iconGrid( color: StreamChatTheme.of(context).colorTheme.black, ), onPressed: () => _showPhotosModal(context), @@ -174,9 +154,9 @@ class _ImageFooterState extends State { backgroundColor: StreamChatTheme.of(context).colorTheme.white, isScrollControlled: true, shape: const RoundedRectangleBorder( - borderRadius: const BorderRadius.only( - topLeft: const Radius.circular(16.0), - topRight: const Radius.circular(16.0), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16.0), + topRight: Radius.circular(16.0), ), ), builder: (context) { diff --git a/packages/stream_chat_flutter/lib/src/image_header.dart b/packages/stream_chat_flutter/lib/src/image_header.dart index a818ee13..25eab839 100644 --- a/packages/stream_chat_flutter/lib/src/image_header.dart +++ b/packages/stream_chat_flutter/lib/src/image_header.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; + import 'image_actions_modal.dart'; class ImageHeader extends StatelessWidget implements PreferredSizeWidget { @@ -63,7 +64,7 @@ class ImageHeader extends StatelessWidget implements PreferredSizeWidget { StreamChatTheme.of(context).channelTheme.channelHeaderTheme.color, actions: [ IconButton( - icon: StreamSvgIcon.Icon_menu_point_v( + icon: StreamSvgIcon.iconMenuPoint( color: StreamChatTheme.of(context).colorTheme.black, ), onPressed: () { diff --git a/packages/stream_chat_flutter/lib/src/media_utils.dart b/packages/stream_chat_flutter/lib/src/media_utils.dart index e91a47d6..e55e02df 100644 --- a/packages/stream_chat_flutter/lib/src/media_utils.dart +++ b/packages/stream_chat_flutter/lib/src/media_utils.dart @@ -1,14 +1,14 @@ -import 'package:http_parser/http_parser.dart' as httpParser; +import 'package:http_parser/http_parser.dart' as http_parser; import 'package:mime/mime.dart'; class MediaUtils { - static httpParser.MediaType getMimeType(String filename) { - httpParser.MediaType mimeType; + static http_parser.MediaType getMimeType(String filename) { + http_parser.MediaType mimeType; if (filename != null) { if (filename.toLowerCase().endsWith('heic')) { - mimeType = httpParser.MediaType.parse('image/heic'); + mimeType = http_parser.MediaType.parse('image/heic'); } else { - mimeType = httpParser.MediaType.parse(lookupMimeType(filename)); + mimeType = http_parser.MediaType.parse(lookupMimeType(filename)); } } diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index 6ca7c688..9551ff71 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -4,16 +4,16 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/reaction_picker.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/utils.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; +import 'extension.dart'; import 'message_input.dart'; import 'message_widget.dart'; import 'stream_chat.dart'; import 'stream_chat_theme.dart'; -import 'extension.dart'; class MessageActionsModal extends StatefulWidget { final Widget Function(BuildContext, Message) editMessageInputBuilder; @@ -280,20 +280,22 @@ class _MessageActionsModalState extends State { setState(() { _showActions = false; }); - var answer = await showConfirmationDialog(context, - title: 'Delete message', - icon: StreamSvgIcon.flag( - color: StreamChatTheme.of(context).colorTheme.accentRed, - size: 24.0, - ), - question: 'Are you sure you want to permanently delete this\nmessage?', - okText: 'DELETE', - cancelText: 'CANCEL'); + var answer = await showConfirmationDialog( + context, + title: 'Delete message', + icon: StreamSvgIcon.flag( + color: StreamChatTheme.of(context).colorTheme.accentRed, + size: 24.0, + ), + question: 'Are you sure you want to permanently delete this\nmessage?', + okText: 'DELETE', + cancelText: 'CANCEL', + ); if (answer) { try { Navigator.pop(context); - StreamChat.of(context).client.deleteMessage( + await StreamChat.of(context).client.deleteMessage( widget.message, StreamChannel.of(context).channel.cid, ); @@ -470,7 +472,7 @@ class _MessageActionsModalState extends State { padding: const EdgeInsets.symmetric(vertical: 11.0, horizontal: 16.0), child: Row( children: [ - StreamSvgIcon.icon_flag( + StreamSvgIcon.iconFlag( color: StreamChatTheme.of(context).primaryIconTheme.color, ), const SizedBox(width: 16), @@ -577,7 +579,7 @@ class _MessageActionsModalState extends State { padding: const EdgeInsets.symmetric(vertical: 11.0, horizontal: 16.0), child: Row( children: [ - StreamSvgIcon.circle_up( + StreamSvgIcon.circleUp( color: StreamChatTheme.of(context).colorTheme.accentBlue, ), const SizedBox(width: 16), @@ -632,7 +634,7 @@ class _MessageActionsModalState extends State { ), IconButton( visualDensity: VisualDensity.compact, - icon: StreamSvgIcon.close_small(), + icon: StreamSvgIcon.closeSmall(), onPressed: Navigator.of(context).pop, ), ], diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index b5be1fb1..425bf5ea 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -9,7 +9,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:http_parser/http_parser.dart' as httpParser; +import 'package:http_parser/http_parser.dart' as http_parser; import 'package:image_picker/image_picker.dart'; import 'package:mime/mime.dart'; import 'package:photo_manager/photo_manager.dart'; @@ -202,7 +202,7 @@ class MessageInputState extends State { bool _openFilePickerSection = false; int _filePickerIndex = 0; double _filePickerSize = _kMinMediaPickerSize; - KeyboardVisibilityController _keyboardVisibilityController = + final KeyboardVisibilityController _keyboardVisibilityController = KeyboardVisibilityController(); /// The editing controller passed to the input TextField @@ -247,7 +247,7 @@ class MessageInputState extends State { ), IconButton( visualDensity: VisualDensity.compact, - icon: StreamSvgIcon.close_small(), + icon: StreamSvgIcon.closeSmall(), onPressed: widget.onQuotedMessageCleared, ), ], @@ -493,7 +493,7 @@ class MessageInputState extends State { : null, suffixIcon: _commandEnabled ? IconButton( - icon: StreamSvgIcon.close_small(), + icon: StreamSvgIcon.closeSmall(), splashRadius: 24, padding: const EdgeInsets.all(0), constraints: BoxConstraints.tightFor( @@ -1128,7 +1128,7 @@ class MessageInputState extends State { case 'ban': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, - child: StreamSvgIcon.Icon_user_delete( + child: StreamSvgIcon.iconUserDelete( size: 16.0, color: Colors.white, ), @@ -1964,7 +1964,7 @@ class MessageInputState extends State { final mimeType = _getMimeType(file.path.split('/').last); - Map extraDataMap = {}; + var extraDataMap = {}; if (camera) { if (mimeType.type == 'video' || mimeType.type == 'image') { @@ -2074,13 +2074,13 @@ class MessageInputState extends State { return res.file; } - httpParser.MediaType _getMimeType(String filename) { - httpParser.MediaType mimeType; + http_parser.MediaType _getMimeType(String filename) { + http_parser.MediaType mimeType; if (filename != null) { if (filename.toLowerCase().endsWith('heic')) { - mimeType = httpParser.MediaType.parse('image/heic'); + mimeType = http_parser.MediaType.parse('image/heic'); } else { - mimeType = httpParser.MediaType.parse(lookupMimeType(filename)); + mimeType = http_parser.MediaType.parse(lookupMimeType(filename)); } } diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 86c1445c..3bb6b716 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -6,18 +6,18 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:rxdart/rxdart.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/info_tile.dart'; import 'package:stream_chat_flutter/src/message_widget.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/system_message.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:visibility_detector/visibility_detector.dart'; import '../stream_chat_flutter.dart'; import 'connection_status_builder.dart'; import 'date_divider.dart'; -import 'swipeable.dart'; import 'extension.dart'; +import 'swipeable.dart'; typedef MessageBuilder = Widget Function( BuildContext, @@ -237,7 +237,7 @@ class _MessageListViewState extends State { bool _inBetweenList = false; - MessageListController _messageListController = MessageListController(); + final MessageListController _messageListController = MessageListController(); @override Widget build(BuildContext context) { @@ -308,8 +308,8 @@ class _MessageListViewState extends State { children: [ ConnectionStatusBuilder( statusBuilder: (context, status) { - String statusString = ''; - bool showStatus = true; + var statusString = ''; + var showStatus = true; switch (status) { case ConnectionStatus.connected: statusString = 'Connected'; @@ -878,7 +878,7 @@ class _MessageListViewState extends State { if (messages.map((e) => e.id).contains(quotedMessageId)) { scrollToIndex(); } else { - streamChannel.loadChannelAtMessage(quotedMessageId).then((_) { + await streamChannel.loadChannelAtMessage(quotedMessageId).then((_) { WidgetsBinding.instance.addPostFrameCallback((_) { if (messages.map((e) => e.id).contains(quotedMessageId)) { scrollToIndex(); diff --git a/packages/stream_chat_flutter/lib/src/message_search_item.dart b/packages/stream_chat_flutter/lib/src/message_search_item.dart index 4d8d9148..335f7ff4 100644 --- a/packages/stream_chat_flutter/lib/src/message_search_item.dart +++ b/packages/stream_chat_flutter/lib/src/message_search_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// It shows the current [Message] preview. /// @@ -152,7 +152,7 @@ class MessageSearchItem extends StatelessWidget { TextStyle normalTextStyle, TextStyle mentionsTextStyle) { var textList = text.split(' '); - List resList = []; + var resList = []; for (var e in textList) { if (mentions != null && mentions.isNotEmpty && diff --git a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart index 8a22bf00..490b3581 100644 --- a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/info_tile.dart'; import 'package:stream_chat_flutter/src/message_search_item.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import '../stream_chat_flutter.dart'; @@ -116,7 +116,7 @@ class MessageSearchListView extends StatefulWidget { } class _MessageSearchListViewState extends State { - MessageSearchListController _messageSearchListController = + final MessageSearchListController _messageSearchListController = MessageSearchListController(); @override @@ -245,7 +245,7 @@ class _MessageSearchListViewState extends State { } Widget _buildQueryProgressIndicator(context) { - MessageSearchBlocState messageSearchBloc = MessageSearchBloc.of(context); + final messageSearchBloc = MessageSearchBloc.of(context); return StreamBuilder( stream: messageSearchBloc.queryMessagesLoading, diff --git a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart index c65f36cc..be69e366 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart @@ -1,11 +1,11 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/src/channel_header.dart'; import 'package:stream_chat_flutter/src/channel_preview.dart'; import 'package:stream_chat_flutter/src/message_input.dart'; import 'package:stream_chat_flutter/src/reaction_icon.dart'; import 'package:stream_chat_flutter/src/utils.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Inherited widget providing the [StreamChatThemeData] to the widget tree class StreamChatTheme extends InheritedWidget { @@ -476,7 +476,7 @@ class ColorTheme { this.bgGradient = const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [const Color(0xfff7f7f7), const Color(0xfffcfcfc)], + colors: [Color(0xfff7f7f7), Color(0xfffcfcfc)], stops: [0, 1], ), this.borderTop = const Effect( @@ -519,7 +519,10 @@ class ColorTheme { this.bgGradient = const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, - colors: [const Color(0xff101214), const Color(0xff070a0d)], + colors: [ + Color(0xff101214), + Color(0xff070a0d), + ], stops: [0, 1], ), }); diff --git a/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart b/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart index 0d705d31..b0b3d0bb 100644 --- a/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart +++ b/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart @@ -386,7 +386,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.cloud_download({ + factory StreamSvgIcon.cloudDownload({ double size, Color color, }) { @@ -434,7 +434,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.arrow_right({ + factory StreamSvgIcon.arrowRight({ double size, Color color, }) { @@ -446,7 +446,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.close_small({ + factory StreamSvgIcon.closeSmall({ double size, Color color, }) { @@ -458,7 +458,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_curve_line_left_up({ + factory StreamSvgIcon.iconCurveLineLeftUp({ double size, Color color, }) { @@ -470,7 +470,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_moon({ + factory StreamSvgIcon.iconMoon({ double size, Color color, }) { @@ -482,7 +482,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_SHARE({ + factory StreamSvgIcon.iconShare({ double size, Color color, }) { @@ -494,7 +494,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_grid({ + factory StreamSvgIcon.iconGrid({ double size, Color color, }) { @@ -506,7 +506,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_send_message({ + factory StreamSvgIcon.iconSendMessage({ double size, Color color, }) { @@ -518,7 +518,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_menu_point_v({ + factory StreamSvgIcon.iconMenuPoint({ double size, Color color, }) { @@ -530,7 +530,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_save({ + factory StreamSvgIcon.iconSave({ double size, Color color, }) { @@ -542,7 +542,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.share_arrow({ + factory StreamSvgIcon.shareArrow({ double size, Color color, }) { @@ -554,7 +554,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_7z({ + factory StreamSvgIcon.filetype7z({ double size, Color color, }) { @@ -566,7 +566,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_csv({ + factory StreamSvgIcon.filetypeCsv({ double size, Color color, }) { @@ -578,7 +578,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_doc({ + factory StreamSvgIcon.filetypeDoc({ double size, Color color, }) { @@ -590,7 +590,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_docx({ + factory StreamSvgIcon.filetypeDocx({ double size, Color color, }) { @@ -602,7 +602,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_Generic({ + factory StreamSvgIcon.filetypeGeneric({ double size, Color color, }) { @@ -614,7 +614,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_html({ + factory StreamSvgIcon.filetypeHtml({ double size, Color color, }) { @@ -626,7 +626,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_md({ + factory StreamSvgIcon.filetypeMd({ double size, Color color, }) { @@ -638,7 +638,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_odt({ + factory StreamSvgIcon.filetypeOdt({ double size, Color color, }) { @@ -650,7 +650,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_pdf({ + factory StreamSvgIcon.filetypePdf({ double size, Color color, }) { @@ -662,7 +662,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_ppt({ + factory StreamSvgIcon.filetypePpt({ double size, Color color, }) { @@ -674,7 +674,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_pptx({ + factory StreamSvgIcon.filetypePptx({ double size, Color color, }) { @@ -686,7 +686,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_rar({ + factory StreamSvgIcon.filetypeRar({ double size, Color color, }) { @@ -698,7 +698,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_rtf({ + factory StreamSvgIcon.filetypeRtf({ double size, Color color, }) { @@ -710,7 +710,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_tar({ + factory StreamSvgIcon.filetypeTar({ double size, Color color, }) { @@ -722,7 +722,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_txt({ + factory StreamSvgIcon.filetypeTxt({ double size, Color color, }) { @@ -734,7 +734,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_xls({ + factory StreamSvgIcon.filetypeXls({ double size, Color color, }) { @@ -746,7 +746,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_xlsx({ + factory StreamSvgIcon.filetypeXlsx({ double size, Color color, }) { @@ -758,7 +758,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.filetype_zip({ + factory StreamSvgIcon.filetypeZip({ double size, Color color, }) { @@ -770,7 +770,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_group({ + factory StreamSvgIcon.iconGroup({ double size, Color color, }) { @@ -782,7 +782,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_notification({ + factory StreamSvgIcon.iconNotification({ double size, Color color, }) { @@ -794,7 +794,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_user_delete({ + factory StreamSvgIcon.iconUserDelete({ double size, Color color, }) { @@ -818,7 +818,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.circle_up({ + factory StreamSvgIcon.circleUp({ double size, Color color, }) { @@ -830,7 +830,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.Icon_user_settings({ + factory StreamSvgIcon.iconUserSettings({ double size, Color color, }) { @@ -890,7 +890,7 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.icon_flag({ + factory StreamSvgIcon.iconFlag({ double size, Color color, }) { diff --git a/packages/stream_chat_flutter/lib/src/user_list_view.dart b/packages/stream_chat_flutter/lib/src/user_list_view.dart index a53ba97a..a1819592 100644 --- a/packages/stream_chat_flutter/lib/src/user_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/user_list_view.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'user_item.dart'; @@ -138,7 +138,7 @@ class _UserListViewState extends State with WidgetsBindingObserver { bool get _isListView => widget.crossAxisCount == 1; - UserListController _userListController = UserListController(); + final UserListController _userListController = UserListController(); @override Widget build(BuildContext context) { diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index 93d87ab2..f7eaf385 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -221,7 +221,7 @@ String getSizeText(int bytes) { } if (bytes <= 1000) { - return '${bytes} bytes'; + return '$bytes bytes'; } else if (bytes <= 100000) { return '${(bytes / 1000).toStringAsFixed(2)} KB'; } else { @@ -233,58 +233,58 @@ String getSizeText(int bytes) { StreamSvgIcon getFileTypeImage(String type) { switch (type) { case '7z': - return StreamSvgIcon.filetype_7z(); + return StreamSvgIcon.filetype7z(); break; case 'csv': - return StreamSvgIcon.filetype_csv(); + return StreamSvgIcon.filetypeCsv(); break; case 'doc': - return StreamSvgIcon.filetype_doc(); + return StreamSvgIcon.filetypeDoc(); break; case 'docx': - return StreamSvgIcon.filetype_docx(); + return StreamSvgIcon.filetypeDocx(); break; case 'html': - return StreamSvgIcon.filetype_html(); + return StreamSvgIcon.filetypeHtml(); break; case 'md': - return StreamSvgIcon.filetype_md(); + return StreamSvgIcon.filetypeMd(); break; case 'odt': - return StreamSvgIcon.filetype_odt(); + return StreamSvgIcon.filetypeOdt(); break; case 'pdf': - return StreamSvgIcon.filetype_pdf(); + return StreamSvgIcon.filetypePdf(); break; case 'ppt': - return StreamSvgIcon.filetype_ppt(); + return StreamSvgIcon.filetypePpt(); break; case 'pptx': - return StreamSvgIcon.filetype_pptx(); + return StreamSvgIcon.filetypePptx(); break; case 'rar': - return StreamSvgIcon.filetype_rar(); + return StreamSvgIcon.filetypeRar(); break; case 'rtf': - return StreamSvgIcon.filetype_rtf(); + return StreamSvgIcon.filetypeRtf(); break; case 'tar': - return StreamSvgIcon.filetype_tar(); + return StreamSvgIcon.filetypeTar(); break; case 'txt': - return StreamSvgIcon.filetype_txt(); + return StreamSvgIcon.filetypeTxt(); break; case 'xls': - return StreamSvgIcon.filetype_xls(); + return StreamSvgIcon.filetypeXls(); break; case 'xlsx': - return StreamSvgIcon.filetype_xlsx(); + return StreamSvgIcon.filetypeXlsx(); break; case 'zip': - return StreamSvgIcon.filetype_zip(); + return StreamSvgIcon.filetypeZip(); break; default: - return StreamSvgIcon.filetype_Generic(); + return StreamSvgIcon.filetypeGeneric(); break; } }