diff --git a/packages/chatty/lib/ui/common/my_channel_preview.dart b/packages/chatty/lib/ui/common/my_channel_preview.dart index 9d54a9b..5e7f368 100644 --- a/packages/chatty/lib/ui/common/my_channel_preview.dart +++ b/packages/chatty/lib/ui/common/my_channel_preview.dart @@ -164,7 +164,7 @@ class MyChannelPreview extends StatelessWidget { String stringDate; final now = DateTime.now(); - var startOfDay = DateTime(now.year, now.month, now.day); + final startOfDay = DateTime(now.year, now.month, now.day); if (lastMessageAt.millisecondsSinceEpoch >= startOfDay.millisecondsSinceEpoch) { @@ -300,9 +300,9 @@ class MyChannelPreview extends StatelessWidget { List attachments, TextStyle normalTextStyle, TextStyle mentionsTextStyle) { - var textList = text.split(' '); - var resList = []; - for (var e in textList) { + final textList = text.split(' '); + final resList = []; + for (final e in textList) { if (mentions.isNotEmpty && mentions.any((element) => '@${element.name}' == e)) { resList.add(TextSpan( diff --git a/packages/imessage/lib/cutom_painter.dart b/packages/imessage/lib/cutom_painter.dart index 6fc6537..189c9bc 100644 --- a/packages/imessage/lib/cutom_painter.dart +++ b/packages/imessage/lib/cutom_painter.dart @@ -17,7 +17,7 @@ class ChatBubble extends CustomPainter { @override void paint(Canvas canvas, Size size) { - var path = Path(); + final path = Path(); const cornerSize = 18.0; const buffer = 6.0; const innerTailWidth = 7.0; diff --git a/packages/stream_chat_v1/lib/pages/advanced_options_page.dart b/packages/stream_chat_v1/lib/pages/advanced_options_page.dart index 1b03bf6..4cd5e09 100644 --- a/packages/stream_chat_v1/lib/pages/advanced_options_page.dart +++ b/packages/stream_chat_v1/lib/pages/advanced_options_page.dart @@ -32,6 +32,15 @@ class _AdvancedOptionsPageState extends State { bool loading = false; + @override + void dispose() { + _apiKeyController.dispose(); + _userIdController.dispose(); + _userTokenController.dispose(); + _usernameController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Scaffold( diff --git a/packages/stream_chat_v1/lib/pages/channel_media_display_screen.dart b/packages/stream_chat_v1/lib/pages/channel_media_display_screen.dart index 9017538..e16cb93 100644 --- a/packages/stream_chat_v1/lib/pages/channel_media_display_screen.dart +++ b/packages/stream_chat_v1/lib/pages/channel_media_display_screen.dart @@ -102,7 +102,7 @@ class _ChannelMediaDisplayScreenState extends State { } final media = <_AssetPackage>[]; - for (var item in value.asSuccess.items) { + for (final item in value.asSuccess.items) { item.message.attachments .where((e) => (e.type == 'image' || e.type == 'video') && @@ -110,7 +110,7 @@ class _ChannelMediaDisplayScreenState extends State { .forEach((e) { VideoPlayerController? controller; if (e.type == 'video') { - var cachedController = controllerCache[e.assetUrl]; + final cachedController = controllerCache[e.assetUrl]; if (cachedController == null) { controller = VideoPlayerController.network(e.assetUrl!); diff --git a/packages/stream_chat_v1/lib/pages/chat_info_screen.dart b/packages/stream_chat_v1/lib/pages/chat_info_screen.dart index dc4e6c3..ff9761d 100644 --- a/packages/stream_chat_v1/lib/pages/chat_info_screen.dart +++ b/packages/stream_chat_v1/lib/pages/chat_info_screen.dart @@ -117,7 +117,7 @@ class _ChatInfoScreenState extends State { } Widget _buildOptionListTiles() { - var channel = StreamChannel.of(context); + final channel = StreamChannel.of(context); return Column( children: [ @@ -398,7 +398,7 @@ class _SharedGroupsScreen extends StatefulWidget { class __SharedGroupsScreenState extends State<_SharedGroupsScreen> { @override Widget build(BuildContext context) { - var chat = StreamChat.of(context); + final chat = StreamChat.of(context); return Scaffold( backgroundColor: StreamChatTheme.of(context).colorTheme.appBg, @@ -505,7 +505,7 @@ class __SharedGroupsScreenState extends State<_SharedGroupsScreen> { final maxChars = maxWidth / textStyle.fontSize!; var currentChars = 0; final currentMembers = []; - for (var element in otherMembers) { + for (final element in otherMembers) { final newLength = currentChars + element.user!.name.length; if (newLength < maxChars) { currentChars = newLength; diff --git a/packages/stream_chat_v1/lib/pages/group_chat_details_screen.dart b/packages/stream_chat_v1/lib/pages/group_chat_details_screen.dart index 9ae78eb..8b813ec 100644 --- a/packages/stream_chat_v1/lib/pages/group_chat_details_screen.dart +++ b/packages/stream_chat_v1/lib/pages/group_chat_details_screen.dart @@ -18,16 +18,17 @@ class GroupChatDetailsScreen extends StatefulWidget { } class _GroupChatDetailsScreenState extends State { - final _selectedUsers = []; + late final _selectedUsers = [...?widget.selectedUsers]; - TextEditingController? _groupNameController; + late final TextEditingController _groupNameController = + TextEditingController()..addListener(_groupNameListener); bool _isGroupNameEmpty = true; int get _totalUsers => _selectedUsers.length; void _groupNameListener() { - final name = _groupNameController!.text; + final name = _groupNameController.text; if (mounted) { setState(() { _isGroupNameEmpty = name.isEmpty; @@ -35,19 +36,11 @@ class _GroupChatDetailsScreenState extends State { } } - @override - void initState() { - super.initState(); - _selectedUsers.addAll(widget.selectedUsers!); - _groupNameController = TextEditingController() - ..addListener(_groupNameListener); - } - @override void dispose() { - _groupNameController?.removeListener(_groupNameListener); - _groupNameController?.clear(); - _groupNameController?.dispose(); + _groupNameController.removeListener(_groupNameListener); + _groupNameController.clear(); + _groupNameController.dispose(); super.dispose(); } @@ -128,7 +121,7 @@ class _GroupChatDetailsScreenState extends State { ? null : () async { try { - final groupName = _groupNameController!.text; + final groupName = _groupNameController.text; final client = StreamChat.of(context).client; final navigator = Navigator.of(context); final channel = client.channel('messaging', diff --git a/packages/stream_chat_v1/lib/pages/group_info_screen.dart b/packages/stream_chat_v1/lib/pages/group_info_screen.dart index ccddb8a..95c0680 100644 --- a/packages/stream_chat_v1/lib/pages/group_info_screen.dart +++ b/packages/stream_chat_v1/lib/pages/group_info_screen.dart @@ -25,9 +25,14 @@ class GroupInfoScreen extends StatefulWidget { } class _GroupInfoScreenState extends State { - TextEditingController? _nameController; + late final TextEditingController _nameController = + TextEditingController.fromValue( + TextEditingValue(text: (channel.extraData['name'] as String?) ?? ''), + ); + + late final TextEditingController _searchController = TextEditingController() + ..addListener(_userNameListener); - TextEditingController? _searchController; String _userNameQuery = ''; Timer? _debounce; @@ -37,23 +42,23 @@ class _GroupInfoScreenState extends State { bool listExpanded = false; - ValueNotifier mutedBool = ValueNotifier(false); + late ValueNotifier mutedBool = ValueNotifier(channel.isMuted); late final channel = StreamChannel.of(context).channel; - late StreamUserListController userListController; + late StreamUserListController _userListController; void _userNameListener() { - if (_searchController!.text == _userNameQuery) { + if (_searchController.text == _userNameQuery) { return; } if (_debounce?.isActive ?? false) _debounce!.cancel(); _debounce = Timer(const Duration(milliseconds: 350), () { if (mounted) { - _userNameQuery = _searchController!.text; - userListController.filter = Filter.and( + _userNameQuery = _searchController.text; + _userListController.filter = Filter.and( [ - if (_searchController!.text.isNotEmpty) + if (_searchController.text.isNotEmpty) Filter.autoComplete('name', _userNameQuery), Filter.notIn('id', [ StreamChat.of(context).currentUser!.id, @@ -63,7 +68,7 @@ class _GroupInfoScreenState extends State { ]), ], ); - userListController.doInitialLoad(); + _userListController.doInitialLoad(); } }); } @@ -72,12 +77,7 @@ class _GroupInfoScreenState extends State { void initState() { super.initState(); - _nameController = TextEditingController.fromValue( - TextEditingValue(text: (channel.extraData['name'] as String?) ?? ''), - ); - _searchController = TextEditingController()..addListener(_userNameListener); - - _nameController!.addListener(() { + _nameController.addListener(() { setState(() {}); }); mutedBool = ValueNotifier(channel.isMuted); @@ -85,12 +85,12 @@ class _GroupInfoScreenState extends State { @override void didChangeDependencies() { - userListController = StreamUserListController( + _userListController = StreamUserListController( client: StreamChat.of(context).client, limit: 25, filter: Filter.and( [ - if (_searchController!.text.isNotEmpty) + if (_searchController.text.isNotEmpty) Filter.autoComplete('name', _userNameQuery), Filter.notIn('id', [ StreamChat.of(context).currentUser!.id, @@ -112,7 +112,9 @@ class _GroupInfoScreenState extends State { @override void dispose() { - userListController.dispose(); + _nameController.dispose(); + _searchController.dispose(); + _userListController.dispose(); super.dispose(); } @@ -382,7 +384,7 @@ class _GroupInfoScreenState extends State { } Widget _buildNameTile() { - var channelName = (channel.extraData['name'] as String?) ?? ''; + final channelName = (channel.extraData['name'] as String?) ?? ''; return Material( color: StreamChatTheme.of(context).colorTheme.appBg, @@ -429,7 +431,7 @@ class _GroupInfoScreenState extends State { ), ), ), - if (channelName != _nameController!.text.trim()) + if (channelName != _nameController.text.trim()) Row( mainAxisSize: MainAxisSize.min, children: [ @@ -437,7 +439,7 @@ class _GroupInfoScreenState extends State { child: StreamSvgIcon.closeSmall(), onTap: () { setState(() { - _nameController!.text = _getChannelName( + _nameController.text = _getChannelName( 2 * MediaQuery.of(context).size.width / 3, members: channel.state!.members, extraData: channel.extraData, @@ -458,10 +460,10 @@ class _GroupInfoScreenState extends State { ), onTap: () { channel.update({ - 'name': _nameController!.text.trim(), + 'name': _nameController.text.trim(), }).catchError((err) { setState(() { - _nameController!.text = channelName; + _nameController.text = channelName; _focusNode.unfocus(); }); }); @@ -572,7 +574,7 @@ class _GroupInfoScreenState extends State { color: StreamChatTheme.of(context).colorTheme.textLowEmphasis, ), onTap: () { - var channel = StreamChannel.of(context).channel; + final channel = StreamChannel.of(context).channel; Navigator.push( context, @@ -606,7 +608,7 @@ class _GroupInfoScreenState extends State { color: StreamChatTheme.of(context).colorTheme.textLowEmphasis, ), onTap: () { - var channel = StreamChannel.of(context).channel; + final channel = StreamChannel.of(context).channel; Navigator.push( context, @@ -691,9 +693,9 @@ class _GroupInfoScreenState extends State { ), Expanded( child: StreamUserGridView( - controller: userListController, + controller: _userListController, onUserTap: (user) async { - _searchController!.clear(); + _searchController.clear(); final navigator = Navigator.of(context); await channel.addMembers([user.id]); @@ -740,7 +742,7 @@ class _GroupInfoScreenState extends State { ); }, ).whenComplete(() { - _searchController?.clear(); + _searchController.clear(); }); } @@ -1053,7 +1055,7 @@ class _GroupInfoScreenState extends State { double? maxFontSize, }) { String? title; - var client = StreamChat.of(context); + final client = StreamChat.of(context); if (extraData['name'] == null) { final otherMembers = members!.where((member) => member.user!.id != client.currentUser!.id); @@ -1062,7 +1064,7 @@ class _GroupInfoScreenState extends State { final maxChars = maxWidth / maxFontSize!; var currentChars = 0; final currentMembers = []; - for (var element in otherMembers) { + for (final element in otherMembers) { final newLength = currentChars + element.user!.name.length; if (newLength < maxChars) { currentChars = newLength; diff --git a/packages/stream_chat_v1/lib/pages/new_group_chat_screen.dart b/packages/stream_chat_v1/lib/pages/new_group_chat_screen.dart index 69cd061..8446e6a 100644 --- a/packages/stream_chat_v1/lib/pages/new_group_chat_screen.dart +++ b/packages/stream_chat_v1/lib/pages/new_group_chat_screen.dart @@ -15,7 +15,8 @@ class NewGroupChatScreen extends StatefulWidget { } class _NewGroupChatScreenState extends State { - TextEditingController? _controller; + late final TextEditingController _controller = TextEditingController() + ..addListener(_userNameListener); String _userNameQuery = ''; @@ -44,7 +45,7 @@ class _NewGroupChatScreenState extends State { _debounce = Timer(const Duration(milliseconds: 350), () { if (mounted) { setState(() { - _userNameQuery = _controller!.text; + _userNameQuery = _controller.text; _isSearchActive = _userNameQuery.isNotEmpty; }); userListController.filter = Filter.and([ @@ -57,17 +58,11 @@ class _NewGroupChatScreenState extends State { }); } - @override - void initState() { - super.initState(); - _controller = TextEditingController()..addListener(_userNameListener); - } - @override void dispose() { - _controller?.clear(); - _controller?.removeListener(_userNameListener); - _controller?.dispose(); + _controller.clear(); + _controller.removeListener(_userNameListener); + _controller.dispose(); userListController.dispose(); super.dispose(); } diff --git a/packages/stream_chat_v1/lib/widgets/channel_list.dart b/packages/stream_chat_v1/lib/widgets/channel_list.dart index 5337feb..44cb7ba 100644 --- a/packages/stream_chat_v1/lib/widgets/channel_list.dart +++ b/packages/stream_chat_v1/lib/widgets/channel_list.dart @@ -36,7 +36,8 @@ class _ChannelList extends State { ], ); - TextEditingController? _controller; + late final TextEditingController _controller = TextEditingController() + ..addListener(_channelQueryListener); bool _isSearchActive = false; @@ -46,9 +47,9 @@ class _ChannelList extends State { if (_debounce?.isActive ?? false) _debounce!.cancel(); _debounce = Timer(const Duration(milliseconds: 350), () { if (mounted) { - _messageSearchListController.searchQuery = _controller!.text; + _messageSearchListController.searchQuery = _controller.text; setState(() { - _isSearchActive = _controller!.text.isNotEmpty; + _isSearchActive = _controller.text.isNotEmpty; }); if (_isSearchActive) _messageSearchListController.doInitialLoad(); } @@ -65,16 +66,10 @@ class _ChannelList extends State { limit: 30, ); - @override - void initState() { - super.initState(); - _controller = TextEditingController()..addListener(_channelQueryListener); - } - @override void dispose() { - _controller?.removeListener(_channelQueryListener); - _controller?.dispose(); + _controller.removeListener(_channelQueryListener); + _controller.dispose(); _scrollController.dispose(); _channelListController.dispose(); super.dispose(); @@ -85,7 +80,7 @@ class _ChannelList extends State { return WillPopScope( onWillPop: () async { if (_isSearchActive) { - _controller!.clear(); + _controller.clear(); setState(() => _isSearchActive = false); return false; }