import 'package:stream_chatter/ui/common/my_channel_preview.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; class ChatView extends StatelessWidget { @override Widget build(BuildContext context) { final textColor = Theme.of(context).appBarTheme.backgroundColor; return Scaffold( backgroundColor: Theme.of(context).canvasColor, appBar: AppBar( title: Text( 'Chats', style: TextStyle( fontSize: 24, color: textColor, fontWeight: FontWeight.w800, ), ), centerTitle: false, elevation: 0, backgroundColor: Theme.of(context).canvasColor, ), body: ChannelsBloc( child: ChannelListView( filter: Filter.in_( 'members', [StreamChat.of(context).currentUser!.id], ), sort: [SortOption('last_message_at')], channelPreviewBuilder: (context, channel) { return Container( color: Theme.of(context).canvasColor, child: MyChannelPreview( channel: channel, heroTag: channel.id, onImageTap: () { String? name; String? image; final currentUser = StreamChat.of(context).client.state.currentUser; if (channel.isGroup) { name = channel.extraData['name'] as String?; image = channel.extraData['image'] as String?; } else { final friend = channel.state!.members .where((element) => element.userId != currentUser!.id) .first .user!; name = friend.name; image = friend.extraData['image'] as String?; } Navigator.of(context).push( PageRouteBuilder( barrierColor: Colors.black45, barrierDismissible: true, opaque: false, pageBuilder: (context, animation1, _) { return FadeTransition( opacity: animation1, child: ChatDetailView( channelId: channel.id, image: image, name: name, ), ); }), ); }, onTap: (channel) => { Navigator.push( context, MaterialPageRoute( builder: (context) { return StreamChannel( child: ChannelPage(), channel: channel, ); }, ), ) }, ), ); }, channelWidget: ChannelPage(), ), ), ); } } class ChannelPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: ChannelHeader(), body: Column( children: [ Expanded( child: MessageListView(), ), MessageInput(), ], ), ); } } class ChatDetailView extends StatelessWidget { const ChatDetailView({ Key? key, this.image, this.name, this.channelId, }) : super(key: key); final String? image; final String? name; final String? channelId; @override Widget build(BuildContext context) { return GestureDetector( onTap: Navigator.of(context).pop, child: Material( color: Colors.transparent, child: Dialog( backgroundColor: Colors.transparent, elevation: 0, child: Padding( padding: const EdgeInsets.all(20.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Hero( tag: channelId!, child: ClipOval( child: Image.network( image!, height: 180, width: 180, fit: BoxFit.cover, ), ), ), Text( name!, style: TextStyle( fontWeight: FontWeight.w700, fontSize: 22, ), ), ], ), ), ), ), ); } }