From e0e36f50cc9a720df6b8220df5a39ef457660faf Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 24 Feb 2020 16:46:05 +0100 Subject: [PATCH] add multiplr_conversation example --- .idea/workspace.xml | 152 ++++++++++++------------- example/lib/multiple_conversation.dart | 58 +++++----- example/lib/single_conversation.dart | 31 +++-- example/test/widget_test.dart | 29 ----- lib/src/channel_list_view.dart | 13 ++- lib/src/channel_preview.dart | 12 +- lib/src/stream_channel.dart | 5 +- 7 files changed, 139 insertions(+), 161 deletions(-) delete mode 100644 example/test/widget_test.dart diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 16c6fe9c..add7173b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,17 +2,13 @@ - - - - - - + - + + + - - - - - - - - - - @@ -43,11 +30,11 @@ - + - - + + @@ -58,8 +45,8 @@ - - + + @@ -70,8 +57,8 @@ - - + + @@ -80,10 +67,22 @@ + + + + + + + + + + + + - - + + @@ -103,8 +102,8 @@ - - + + @@ -147,6 +146,7 @@ dispose CHANNEL- _userController + onTap @@ -163,16 +163,16 @@ @@ -383,16 +383,6 @@ - - - - - - - - - - @@ -448,26 +438,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -475,16 +445,6 @@ - - - - - - - - - - @@ -494,8 +454,28 @@ - - + + + + + + + + + + + + + + + + + + + + + + @@ -504,13 +484,33 @@ - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/lib/multiple_conversation.dart b/example/lib/multiple_conversation.dart index 36855ddb..99fcfa0f 100644 --- a/example/lib/multiple_conversation.dart +++ b/example/lib/multiple_conversation.dart @@ -9,27 +9,21 @@ void main() async { 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoid2lsZC1icmVlemUtNyJ9.VM2EX1EXOfgqa-bTH_3JzeY0T99ngWzWahSauP3dBMo', ); - runApp(StreamChat( - client: client, - child: MyApp(), - )); -} + final channelClient = client.channel('messaging', id: 'godevs'); -class MyApp extends StatefulWidget { - @override - _MyAppState createState() => _MyAppState(); -} + channelClient.watch(); -class _MyAppState extends State { - @override - Widget build(BuildContext context) { - return MaterialApp( - theme: ThemeData( - primarySwatch: Colors.blue, + runApp( + StreamChat( + client: client, + child: MaterialApp( + home: StreamChat( + client: client, + child: ChannelListPage(), + ), ), - home: ChannelListPage(), - ); - } + ), + ); } class ChannelListPage extends StatelessWidget { @@ -48,7 +42,10 @@ class ChannelListPage extends StatelessWidget { ), onChannelTap: (channelClient) { Navigator.push(context, MaterialPageRoute(builder: (context) { - return ChannelPage(channelClient); + return StreamChannel( + child: ChannelPage(), + channelClient: channelClient, + ); })); }, ), @@ -57,21 +54,20 @@ class ChannelListPage extends StatelessWidget { } class ChannelPage extends StatelessWidget { - ChannelPage(this.channelClient); - - final ChannelClient channelClient; + const ChannelPage({ + Key key, + }) : super(key: key); @override Widget build(BuildContext context) { - return StreamChannel( - channelClient: channelClient, - child: Scaffold( - body: Column( - children: [ - Expanded(child: MessageListView()), - MessageInput(), - ], - ), + return Scaffold( + body: Column( + children: [ + Expanded( + child: MessageListView(), + ), + MessageInput(), + ], ), ); } diff --git a/example/lib/single_conversation.dart b/example/lib/single_conversation.dart index 153bfd0f..9fba044c 100644 --- a/example/lib/single_conversation.dart +++ b/example/lib/single_conversation.dart @@ -19,18 +19,29 @@ void main() async { client: client, child: StreamChannel( channelClient: channelClient, - child: Scaffold( - body: Column( - children: [ - Expanded( - child: MessageListView(), - ), - MessageInput(), - ], - ), - ), + child: ChannelPage(), ), ), ), ); } + +class ChannelPage extends StatelessWidget { + const ChannelPage({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + Expanded( + child: MessageListView(), + ), + MessageInput(), + ], + ), + ); + } +} diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart deleted file mode 100644 index a846cfb6..00000000 --- a/example/test/widget_test.dart +++ /dev/null @@ -1,29 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:example/single_conversation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/lib/src/channel_list_view.dart b/lib/src/channel_list_view.dart index 3781db08..4a484921 100644 --- a/lib/src/channel_list_view.dart +++ b/lib/src/channel_list_view.dart @@ -100,14 +100,15 @@ class _ChannelListViewState extends State { Widget child; if (widget._channelPreviewBuilder != null) { - child = widget._channelPreviewBuilder(context, channelState); + child = GestureDetector( + onTap: () { + widget.onChannelTap(channelClient); + }, + child: widget._channelPreviewBuilder(context, channelState), + ); } else { child = ChannelPreview( - onTap: widget?.onChannelTap != null - ? () { - widget?.onChannelTap(channelClient); - } - : null, + onTap: widget.onChannelTap, ); } diff --git a/lib/src/channel_preview.dart b/lib/src/channel_preview.dart index 096e72ec..e1578ea2 100644 --- a/lib/src/channel_preview.dart +++ b/lib/src/channel_preview.dart @@ -4,12 +4,13 @@ import 'package:flutter/widgets.dart'; import 'package:stream_chat/stream_chat.dart'; import 'channel_image.dart'; +import 'channel_list_view.dart'; import 'channel_name_text.dart'; import 'stream_channel.dart'; import 'stream_chat.dart'; class ChannelPreview extends StatelessWidget { - final VoidCallback onTap; + final ChannelTapCallback onTap; const ChannelPreview({ Key key, @@ -37,14 +38,13 @@ class ChannelPreview extends StatelessWidget { ChannelState channelState, StreamChannelState streamChannel, ) { + final channelClient = + StreamChat.of(context).client.channelClients[channelState.channel.id]; return StreamChannel( - channelClient: - StreamChat.of(context).client.channelClients[channelState.channel.id], + channelClient: channelClient, child: ListTile( onTap: () { - if (onTap != null) { - onTap(); - } + onTap(channelClient); }, leading: ChannelImage( channel: channelState.channel, diff --git a/lib/src/stream_channel.dart b/lib/src/stream_channel.dart index bbb96440..fe34ff00 100644 --- a/lib/src/stream_channel.dart +++ b/lib/src/stream_channel.dart @@ -8,7 +8,7 @@ class StreamChannel extends StatefulWidget { StreamChannel({ Key key, @required this.child, - this.channelClient, + @required this.channelClient, }) : super( key: key, ); @@ -95,8 +95,6 @@ class StreamChannelState extends State { @override void dispose() { _queryMessageController.close(); - widget.channelClient.dispose(); - super.dispose(); } @@ -109,6 +107,7 @@ class StreamChannelState extends State { } return FutureBuilder( future: widget.channelClient.initialized, + initialData: widget.channelClient.state != null, builder: (context, snapshot) { if (!snapshot.hasData) { return Scaffold(