diff --git a/lib/src/chat_info_screen.dart b/example/lib/chat_info_screen.dart similarity index 98% rename from lib/src/chat_info_screen.dart rename to example/lib/chat_info_screen.dart index fd25bc97..07e36301 100644 --- a/lib/src/chat_info_screen.dart +++ b/example/lib/chat_info_screen.dart @@ -3,10 +3,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; -import '../stream_chat_flutter.dart'; -import 'channel_file_display_screen.dart'; -import 'channel_media_display_screen.dart'; -import 'option_list_tile.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Detail screen for a 1:1 chat correspondence class ChatInfoScreen extends StatefulWidget { diff --git a/example/lib/customize_channel_preview.dart b/example/lib/customize_channel_preview.dart index 3809f780..3cd48d6e 100644 --- a/example/lib/customize_channel_preview.dart +++ b/example/lib/customize_channel_preview.dart @@ -84,7 +84,6 @@ class ChannelListPage extends StatelessWidget { channel: channel, ), title: ChannelName( - channel: channel, textStyle: StreamChatTheme.of(context).channelPreviewTheme.title.copyWith( color: Colors.black.withOpacity(opacity), diff --git a/lib/src/group_info_screen.dart b/example/lib/group_info_screen.dart similarity index 95% rename from lib/src/group_info_screen.dart rename to example/lib/group_info_screen.dart index 642065dc..5d1c2063 100644 --- a/lib/src/group_info_screen.dart +++ b/example/lib/group_info_screen.dart @@ -3,13 +3,12 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:stream_chat_flutter/src/chat_info_screen.dart'; +import 'file:///Users/deven9852/Stream/stream-chat-flutter/example/lib/chat_info_screen.dart'; import 'package:stream_chat_flutter/src/option_list_tile.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; -import '../stream_chat_flutter.dart'; -import 'channel_file_display_screen.dart'; -import 'channel_media_display_screen.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'main.dart'; class GroupInfoScreen extends StatefulWidget { @override @@ -83,7 +82,6 @@ class _GroupInfoScreenState extends State { leadingWidth: 36.0, title: Column( children: [ - // TODO: Add member names instead of Demo (if name = null) FutureBuilder( future: _memberQueryFuture, builder: (context, snapshot) { @@ -163,8 +161,10 @@ class _GroupInfoScreenState extends State { return Material( child: InkWell( onTap: () { - var userMember = snapshot.data.members.firstWhere((e) => e.user.id == StreamChat.of(context).user.id); - _showUserInfoModal(snapshot.data.members[position].user, userMember.role == 'owner'); + var userMember = snapshot.data.members.firstWhere( + (e) => e.user.id == StreamChat.of(context).user.id); + _showUserInfoModal(snapshot.data.members[position].user, + userMember.role == 'owner'); }, child: Container( height: 65.0, @@ -675,9 +675,31 @@ class _GroupInfoScreenState extends State { color: Color(0xff7a7a7a), size: 24.0, ), - 'Message', - () {}), - if (!channel.isDistinct && StreamChat.of(context).user.id != user.id && isUserAdmin) + 'Message', () async { + var client = StreamChat.of(context).client; + + var c = client.channel('messaging', extraData: { + 'members': [ + user.id, + StreamChat.of(context).user.id, + ], + }); + + await c.watch(); + + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => StreamChannel( + channel: c, + child: ChannelPage(), + ), + ), + ); + }), + if (!channel.isDistinct && + StreamChat.of(context).user.id != user.id && + isUserAdmin) _buildModalListTile( StreamSvgIcon.userAdd( color: Color(0xff7a7a7a), @@ -686,7 +708,9 @@ class _GroupInfoScreenState extends State { 'Make Owner', () { // TODO: I have no clue how to make someone an owner }), - if (!channel.isDistinct && StreamChat.of(context).user.id != user.id && isUserAdmin) + if (!channel.isDistinct && + StreamChat.of(context).user.id != user.id && + isUserAdmin) _buildModalListTile( StreamSvgIcon.userRemove( color: Colors.red, diff --git a/example/lib/main.dart b/example/lib/main.dart index 4b529e23..8a67a7da 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,6 +1,8 @@ import 'dart:io'; import 'package:example/choose_user_page.dart'; +import 'package:example/chat_info_screen.dart'; +import 'package:example/group_info_screen.dart'; import 'package:example/new_chat_screen.dart'; import 'package:example/new_group_chat_screen.dart'; import 'package:flutter/cupertino.dart'; @@ -426,6 +428,44 @@ class ChannelPage extends StatelessWidget { backgroundColor: Color.fromRGBO(252, 252, 252, 1), appBar: ChannelHeader( showTypingIndicator: false, + onImageTap: () async { + var channel = StreamChannel.of(context).channel; + + if (channel.memberCount == 2 && channel.isDistinct) { + final currentUser = StreamChat.of(context).user; + final otherUser = channel.state.members.firstWhere( + (element) => element.user.id != currentUser.id, + orElse: () => null, + ); + if (otherUser != null) { + final pop = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => StreamChannel( + child: ChatInfoScreen( + user: otherUser.user, + ), + channel: channel, + ), + ), + ); + + if (pop == true) { + Navigator.pop(context); + } + } + } else { + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => StreamChannel( + child: GroupInfoScreen(), + channel: channel, + ), + ), + ); + } + }, ), body: Column( children: [ diff --git a/example/lib/routes/app_routes.dart b/example/lib/routes/app_routes.dart index 6b0529e1..f3261f72 100644 --- a/example/lib/routes/app_routes.dart +++ b/example/lib/routes/app_routes.dart @@ -7,6 +7,8 @@ import '../main.dart'; import '../group_chat_details_screen.dart'; import '../new_group_chat_screen.dart'; import '../new_chat_screen.dart'; +import '../chat_info_screen.dart'; +import '../group_info_screen.dart'; class AppRoutes { /// Add entry for new route here @@ -59,6 +61,20 @@ class AppRoutes { selectedUsers: args, ); }); + case Routes.CHAT_INFO_SCREEN: + return MaterialPageRoute( + settings: const RouteSettings(name: Routes.CHAT_INFO_SCREEN), + builder: (_) { + return ChatInfoScreen( + user: args, + ); + }); + case Routes.GROUP_INFO_SCREEN: + return MaterialPageRoute( + settings: const RouteSettings(name: Routes.GROUP_INFO_SCREEN), + builder: (_) { + return GroupInfoScreen(); + }); } } } diff --git a/example/lib/routes/routes.dart b/example/lib/routes/routes.dart index 0e0b1e57..0d2f4e5f 100644 --- a/example/lib/routes/routes.dart +++ b/example/lib/routes/routes.dart @@ -7,4 +7,6 @@ class Routes { static const String NEW_CHAT = '/new_chat'; static const String NEW_GROUP_CHAT = '/new_group_chat'; static const String NEW_GROUP_CHAT_DETAILS = '/new_group_chat_details'; + static const String CHAT_INFO_SCREEN = '/chat_info_screen'; + static const String GROUP_INFO_SCREEN = '/group_info_screen'; } diff --git a/lib/src/channel_header.dart b/lib/src/channel_header.dart index 73e44b35..4517d7a0 100644 --- a/lib/src/channel_header.dart +++ b/lib/src/channel_header.dart @@ -8,8 +8,6 @@ import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import '../stream_chat_flutter.dart'; import './channel_name.dart'; import 'channel_image.dart'; -import 'chat_info_screen.dart'; -import 'group_info_screen.dart'; import 'stream_channel.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/channel_header.png) @@ -100,43 +98,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { padding: const EdgeInsets.only(right: 10.0), child: Center( child: ChannelImage( - onTap: onImageTap ?? - () async { - if (channel.memberCount == 2 && channel.isDistinct) { - final currentUser = StreamChat.of(context).user; - final otherUser = channel.state.members.firstWhere( - (element) => element.user.id != currentUser.id, - orElse: () => null, - ); - if (otherUser != null) { - final pop = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => StreamChannel( - channel: channel, - child: ChatInfoScreen( - user: otherUser.user, - ), - ), - ), - ); - - if (pop == true) { - Navigator.pop(context); - } - } - } else { - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => StreamChannel( - channel: channel, - child: GroupInfoScreen(), - ), - ), - ); - } - }, + onTap: onImageTap, ), ), ), diff --git a/lib/src/channel_preview.dart b/lib/src/channel_preview.dart index ff727cfa..26f68812 100644 --- a/lib/src/channel_preview.dart +++ b/lib/src/channel_preview.dart @@ -2,13 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:jiffy/jiffy.dart'; import 'package:stream_chat/stream_chat.dart'; -import 'package:stream_chat_flutter/src/group_info_screen.dart'; import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import '../stream_chat_flutter.dart'; import 'channel_name.dart'; import 'channel_unread_indicator.dart'; -import 'chat_info_screen.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/channel_preview.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/screenshots/channel_preview_paint.png) @@ -62,39 +60,7 @@ class ChannelPreview extends StatelessWidget { } }, leading: ChannelImage( - onTap: onImageTap ?? - () { - if (channel.memberCount == 2 && channel.isDistinct) { - final currentUser = StreamChat.of(context).user; - final otherUser = channel.state.members.firstWhere( - (element) => element.user.id != currentUser.id, - orElse: () => null, - ); - if (otherUser != null) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => StreamChannel( - channel: channel, - child: ChatInfoScreen( - user: otherUser.user, - ), - ), - ), - ); - } - } else { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => StreamChannel( - channel: channel, - child: GroupInfoScreen(), - ), - ), - ); - } - }, + onTap: onImageTap, ), title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/stream_chat_flutter.dart b/lib/stream_chat_flutter.dart index 5dd46fa3..799af175 100644 --- a/lib/stream_chat_flutter.dart +++ b/lib/stream_chat_flutter.dart @@ -44,3 +44,6 @@ export 'src/message_search_bloc.dart'; export 'src/message_search_item.dart'; export 'src/message_search_list_view.dart'; export 'src/unread_indicator.dart'; +export 'src/option_list_tile.dart'; +export 'src/channel_file_display_screen.dart'; +export 'src/channel_media_display_screen.dart';