Merge branch 'develop' into message-input-controller
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
# Upcoming
|
||||
|
||||
✅ Added
|
||||
|
||||
- Added `MessageInputController` to hold `Message` related data.
|
||||
|
||||
## 3.3.0
|
||||
|
||||
- Updated `stream_chat` dependency to [`3.3.0`](https://pub.dev/packages/stream_chat/changelog).
|
||||
|
||||
## 3.2.0
|
||||
|
||||
- Updated `stream_chat` dependency to [`3.2.0`](https://pub.dev/packages/stream_chat/changelog).
|
||||
|
||||
@@ -83,9 +83,12 @@ class HomeScreen extends StatelessWidget {
|
||||
channelListController: channelListController,
|
||||
filter: Filter.and([
|
||||
Filter.equal('type', 'messaging'),
|
||||
Filter.in_('members', [
|
||||
StreamChatCore.of(context).currentUser!.id,
|
||||
])
|
||||
Filter.in_(
|
||||
'members',
|
||||
[
|
||||
StreamChatCore.of(context).currentUser!.id,
|
||||
],
|
||||
)
|
||||
]),
|
||||
emptyBuilder: (BuildContext context) => const Center(
|
||||
child: Text('Looks like you are not in any channels'),
|
||||
@@ -120,7 +123,7 @@ class HomeScreen extends StatelessWidget {
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
final _item = channels[index];
|
||||
return ListTile(
|
||||
title: Text(_item.name!),
|
||||
title: Text(_item.name ?? ''),
|
||||
subtitle: StreamBuilder<Message?>(
|
||||
stream: _item.state!.lastMessageStream,
|
||||
initialData: _item.state!.lastMessage,
|
||||
@@ -318,10 +321,10 @@ class _MessageScreenState extends State<MessageScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -157,7 +157,10 @@ class ChannelListCoreState extends State<ChannelListCore> {
|
||||
presence: widget.presence,
|
||||
memberLimit: widget.memberLimit,
|
||||
messageLimit: widget.messageLimit,
|
||||
paginationParams: PaginationParams(limit: widget.limit),
|
||||
paginationParams: PaginationParams(
|
||||
limit: widget.limit,
|
||||
offset: 0,
|
||||
),
|
||||
);
|
||||
|
||||
/// Fetches more channels with updated pagination and updates the widget
|
||||
|
||||
@@ -227,13 +227,13 @@ class StreamChannelState extends State<StreamChannel> {
|
||||
preferOffline: preferOffline,
|
||||
);
|
||||
|
||||
Future<List<ChannelState>> _queryAtMessage({
|
||||
Future<ChannelState?> _queryAtMessage({
|
||||
String? messageId,
|
||||
int before = 20,
|
||||
int after = 20,
|
||||
bool preferOffline = false,
|
||||
}) async {
|
||||
if (channel.state == null) return [];
|
||||
if (channel.state == null) return null;
|
||||
channel.state!.isUpToDate = false;
|
||||
channel.state!.truncate();
|
||||
|
||||
@@ -245,23 +245,33 @@ class StreamChannelState extends State<StreamChannel> {
|
||||
preferOffline: preferOffline,
|
||||
);
|
||||
channel.state!.isUpToDate = true;
|
||||
return [];
|
||||
return null;
|
||||
}
|
||||
|
||||
return Future.wait([
|
||||
queryBeforeMessage(
|
||||
messageId,
|
||||
limit: before,
|
||||
preferOffline: preferOffline,
|
||||
),
|
||||
queryAfterMessage(
|
||||
messageId,
|
||||
limit: after,
|
||||
preferOffline: preferOffline,
|
||||
),
|
||||
]);
|
||||
return queryAroundMessage(
|
||||
messageId,
|
||||
before: before,
|
||||
after: after,
|
||||
preferOffline: preferOffline,
|
||||
);
|
||||
}
|
||||
|
||||
///
|
||||
Future<ChannelState> queryAroundMessage(
|
||||
String messageId, {
|
||||
int before = 20,
|
||||
int after = 20,
|
||||
bool preferOffline = false,
|
||||
}) =>
|
||||
channel.query(
|
||||
messagesPagination: PaginationParams(
|
||||
idAround: messageId,
|
||||
before: before,
|
||||
after: after,
|
||||
),
|
||||
preferOffline: preferOffline,
|
||||
);
|
||||
|
||||
///
|
||||
Future<ChannelState> queryBeforeMessage(
|
||||
String messageId, {
|
||||
|
||||
@@ -95,7 +95,12 @@ class StreamChatCoreState extends State<StreamChatCore>
|
||||
Timer? _disconnectTimer;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => widget.child;
|
||||
Widget build(BuildContext context) {
|
||||
StreamChatClient.additionalHeaders = {
|
||||
'X-Stream-Client': '${StreamChatClient.defaultUserAgent}-core',
|
||||
};
|
||||
return widget.child;
|
||||
}
|
||||
|
||||
// coverage:ignore-start
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: stream_chat_flutter_core
|
||||
homepage: https://github.com/GetStream/stream-chat-flutter
|
||||
description: Stream Chat official Flutter SDK Core. Build your own chat experience using Dart and Flutter.
|
||||
version: 3.2.0
|
||||
version: 3.3.0
|
||||
repository: https://github.com/GetStream/stream-chat-flutter
|
||||
issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues
|
||||
|
||||
@@ -16,7 +16,7 @@ dependencies:
|
||||
sdk: flutter
|
||||
meta: ^1.3.0
|
||||
rxdart: ^0.27.0
|
||||
stream_chat: ^3.2.0
|
||||
stream_chat: ^3.3.0
|
||||
|
||||
dev_dependencies:
|
||||
dart_code_metrics: ^4.4.0
|
||||
|
||||
@@ -476,7 +476,7 @@ void main() {
|
||||
_stateSetter?.call(() => limit = 6);
|
||||
|
||||
final updatedChannels = _generateChannels(mockClient, count: limit);
|
||||
final updatedPagination = pagination.copyWith(limit: limit);
|
||||
final updatedPagination = PaginationParams(limit: limit);
|
||||
when(() => mockClient.queryChannels(
|
||||
filter: any(named: 'filter'),
|
||||
sort: any(named: 'sort'),
|
||||
|
||||
@@ -518,7 +518,7 @@ void main() {
|
||||
_stateSetter?.call(() => limit = 6);
|
||||
|
||||
final updatedMessageResponseList = _generateMessages(count: limit);
|
||||
final updatedPagination = pagination.copyWith(limit: limit);
|
||||
final updatedPagination = PaginationParams(limit: limit);
|
||||
when(() => mockClient.search(
|
||||
testFilter,
|
||||
query: any(named: 'query'),
|
||||
|
||||
@@ -189,9 +189,7 @@ void main() {
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
)).called(
|
||||
2, // Fetching After messages + Fetching Before messages,
|
||||
);
|
||||
)).called(1);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -214,14 +212,10 @@ void main() {
|
||||
child: const Offstage(key: childKey),
|
||||
);
|
||||
|
||||
final beforePagination = PaginationParams(
|
||||
lessThan: initialMessageId,
|
||||
limit: 20,
|
||||
);
|
||||
|
||||
final afterPagination = PaginationParams(
|
||||
greaterThanOrEqual: initialMessageId,
|
||||
limit: 20,
|
||||
final paginationParams = PaginationParams(
|
||||
idAround: initialMessageId,
|
||||
after: 20,
|
||||
before: 20,
|
||||
);
|
||||
|
||||
when(() => mockChannel.initialized).thenAnswer((_) async => true);
|
||||
@@ -232,17 +226,7 @@ void main() {
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: beforePagination,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
)).thenAnswer((_) async => ChannelState(messages: messages));
|
||||
|
||||
when(() => mockChannel.query(
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: afterPagination,
|
||||
messagesPagination: paginationParams,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
@@ -267,17 +251,7 @@ void main() {
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: beforePagination,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
)).called(1);
|
||||
|
||||
verify(() => mockChannel.query(
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: afterPagination,
|
||||
messagesPagination: paginationParams,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
@@ -285,29 +259,15 @@ void main() {
|
||||
|
||||
_stateSetter?.call(() => initialMessageId = 'testInitialMessageId2');
|
||||
|
||||
final updatedBeforePagination = beforePagination.copyWith(
|
||||
lessThan: initialMessageId,
|
||||
);
|
||||
|
||||
final updatedAfterPagination = afterPagination.copyWith(
|
||||
greaterThanOrEqual: initialMessageId,
|
||||
final updatedPaginationParams = paginationParams.copyWith(
|
||||
idAround: initialMessageId,
|
||||
);
|
||||
|
||||
when(() => mockChannel.query(
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: updatedBeforePagination,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
)).thenAnswer((_) async => ChannelState(messages: messages));
|
||||
|
||||
when(() => mockChannel.query(
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: updatedAfterPagination,
|
||||
messagesPagination: updatedPaginationParams,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
@@ -319,17 +279,7 @@ void main() {
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: updatedBeforePagination,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
)).called(1);
|
||||
|
||||
verify(() => mockChannel.query(
|
||||
state: any(named: 'state'),
|
||||
watch: any(named: 'watch'),
|
||||
presence: any(named: 'presence'),
|
||||
messagesPagination: updatedAfterPagination,
|
||||
messagesPagination: updatedPaginationParams,
|
||||
membersPagination: any(named: 'membersPagination'),
|
||||
watchersPagination: any(named: 'watchersPagination'),
|
||||
preferOffline: any(named: 'preferOffline'),
|
||||
|
||||
@@ -496,7 +496,7 @@ void main() {
|
||||
_stateSetter?.call(() => limit = 6);
|
||||
|
||||
final updatedUsers = _generateUsers(count: limit);
|
||||
final updatedPagination = pagination.copyWith(limit: limit);
|
||||
final updatedPagination = PaginationParams(limit: limit);
|
||||
when(() => mockClient.queryUsers(
|
||||
filter: any(named: 'filter'),
|
||||
sort: any(named: 'sort'),
|
||||
|
||||
Reference in New Issue
Block a user