Skip to content

Commit a048bf8

Browse files
committed
fix: add message search thread navigation support
Signed-off-by: xsahil03x <[email protected]>
1 parent 80665c3 commit a048bf8

File tree

3 files changed

+38
-19
lines changed

3 files changed

+38
-19
lines changed

packages/stream_chat_v1/lib/channel_page.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,7 @@ class _ChannelPageState extends State<ChannelPage> {
142142
);
143143
},
144144
threadBuilder: (_, parentMessage) {
145-
return ThreadPage(
146-
parent: parentMessage,
147-
);
145+
return ThreadPage(parent: parentMessage!);
148146
},
149147
pinPermissions: ['owner', 'admin', 'member'],
150148
),

packages/stream_chat_v1/lib/routes/app_routes.dart

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:collection/src/iterable_extensions.dart';
12
import 'package:example/channel_list_page.dart';
23
import 'package:flutter/material.dart';
34
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
@@ -12,6 +13,7 @@ import '../home_page.dart';
1213
import '../main.dart';
1314
import '../new_chat_screen.dart';
1415
import '../new_group_chat_screen.dart';
16+
import '../thread_page.dart';
1517
import 'routes.dart';
1618

1719
class AppRoutes {
@@ -48,18 +50,35 @@ class AppRoutes {
4850
);
4951
case Routes.CHANNEL_PAGE:
5052
return MaterialPageRoute(
51-
settings: RouteSettings(arguments: args, name: Routes.CHANNEL_PAGE),
52-
builder: (_) {
53-
final channelPageArgs = args as ChannelPageArgs;
54-
return StreamChannel(
55-
channel: channelPageArgs.channel!,
56-
initialMessageId: channelPageArgs.initialMessage?.id,
57-
child: ChannelPage(
58-
highlightInitialMessage:
59-
channelPageArgs.initialMessage != null,
60-
),
61-
);
62-
});
53+
settings: RouteSettings(arguments: args, name: Routes.CHANNEL_PAGE),
54+
builder: (context) {
55+
final channelPageArgs = args as ChannelPageArgs;
56+
final initialMessage = channelPageArgs.initialMessage;
57+
58+
return StreamChannel(
59+
channel: channelPageArgs.channel!,
60+
initialMessageId: initialMessage?.id,
61+
child: Builder(
62+
builder: (context) {
63+
final parentId = initialMessage?.parentId;
64+
Message? parentMessage;
65+
if (parentId != null) {
66+
final channel = StreamChannel.of(context).channel;
67+
parentMessage = channel.state!.messages
68+
.firstWhereOrNull((it) => it.id == parentId);
69+
}
70+
if (parentMessage != null) {
71+
return ThreadPage(parent: parentMessage);
72+
}
73+
return ChannelPage(
74+
highlightInitialMessage:
75+
channelPageArgs.initialMessage != null,
76+
);
77+
},
78+
),
79+
);
80+
},
81+
);
6382
case Routes.NEW_CHAT:
6483
return MaterialPageRoute(
6584
settings: RouteSettings(arguments: args, name: Routes.NEW_CHAT),

packages/stream_chat_v1/lib/thread_page.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
22
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
33

44
class ThreadPage extends StatefulWidget {
5-
final Message? parent;
5+
final Message parent;
66
final int? initialScrollIndex;
77
final double? initialAlignment;
88

99
ThreadPage({
1010
Key? key,
11-
this.parent,
11+
required this.parent,
1212
this.initialScrollIndex,
1313
this.initialAlignment,
1414
}) : super(key: key);
@@ -39,7 +39,7 @@ class _ThreadPageState extends State<ThreadPage> {
3939
return Scaffold(
4040
backgroundColor: StreamChatTheme.of(context).colorTheme.appBg,
4141
appBar: ThreadHeader(
42-
parent: widget.parent!,
42+
parent: widget.parent,
4343
),
4444
body: Column(
4545
children: <Widget>[
@@ -50,6 +50,8 @@ class _ThreadPageState extends State<ThreadPage> {
5050
initialAlignment: widget.initialAlignment,
5151
onMessageSwiped: _reply,
5252
messageFilter: defaultFilter,
53+
showScrollToBottom: false,
54+
highlightInitialMessage: true,
5355
messageBuilder: (context, details, messages, defaultMessage) {
5456
return defaultMessage.copyWith(
5557
onReplyTap: _reply,
@@ -61,7 +63,7 @@ class _ThreadPageState extends State<ThreadPage> {
6163
pinPermissions: ['owner', 'admin', 'member'],
6264
),
6365
),
64-
if (widget.parent!.type != 'deleted')
66+
if (widget.parent.type != 'deleted')
6567
MessageInput(
6668
parentMessage: widget.parent,
6769
focusNode: _focusNode,

0 commit comments

Comments
 (0)