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 @@
-
-
-
-
-
-
+
-
+
+
+
-
@@ -25,15 +21,6 @@
-
-
-
-
-
-
-
-
-
@@ -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(