Merge branch 'develop' into fix/reaction_card_text_overflow
This commit is contained in:
@@ -64,7 +64,7 @@ class StreamChatClient {
|
|||||||
StreamChatClient(
|
StreamChatClient(
|
||||||
String apiKey, {
|
String apiKey, {
|
||||||
this.logLevel = Level.WARNING,
|
this.logLevel = Level.WARNING,
|
||||||
LogHandlerFunction? logHandlerFunction,
|
this.logHandlerFunction = StreamChatClient.defaultLogHandler,
|
||||||
RetryPolicy? retryPolicy,
|
RetryPolicy? retryPolicy,
|
||||||
@Deprecated('''
|
@Deprecated('''
|
||||||
Location is now deprecated in favor of the new edge server. Will be removed in v4.0.0.
|
Location is now deprecated in favor of the new edge server. Will be removed in v4.0.0.
|
||||||
@@ -77,7 +77,6 @@ class StreamChatClient {
|
|||||||
WebSocket? ws,
|
WebSocket? ws,
|
||||||
AttachmentFileUploader? attachmentFileUploader,
|
AttachmentFileUploader? attachmentFileUploader,
|
||||||
}) {
|
}) {
|
||||||
this.logHandlerFunction = logHandlerFunction ?? _defaultLogHandler;
|
|
||||||
logger.info('Initiating new StreamChatClient');
|
logger.info('Initiating new StreamChatClient');
|
||||||
|
|
||||||
final options = StreamHttpClientOptions(
|
final options = StreamHttpClientOptions(
|
||||||
@@ -134,7 +133,7 @@ class StreamChatClient {
|
|||||||
'${CurrentPlatform.name}-'
|
'${CurrentPlatform.name}-'
|
||||||
'${PACKAGE_VERSION.split('+')[0]}';
|
'${PACKAGE_VERSION.split('+')[0]}';
|
||||||
|
|
||||||
/// Additionals headers for all requests
|
/// Additional headers for all requests
|
||||||
static Map<String, Object?> additionalHeaders = {};
|
static Map<String, Object?> additionalHeaders = {};
|
||||||
|
|
||||||
ChatPersistenceClient? _originalChatPersistenceClient;
|
ChatPersistenceClient? _originalChatPersistenceClient;
|
||||||
@@ -189,7 +188,7 @@ class StreamChatClient {
|
|||||||
/// final client = StreamChatClient("stream-chat-api-key",
|
/// final client = StreamChatClient("stream-chat-api-key",
|
||||||
/// logHandlerFunction: myLogHandlerFunction);
|
/// logHandlerFunction: myLogHandlerFunction);
|
||||||
///```
|
///```
|
||||||
late LogHandlerFunction logHandlerFunction;
|
final LogHandlerFunction logHandlerFunction;
|
||||||
|
|
||||||
StreamSubscription<ConnectionStatus>? _connectionStatusSubscription;
|
StreamSubscription<ConnectionStatus>? _connectionStatusSubscription;
|
||||||
|
|
||||||
@@ -214,17 +213,18 @@ class StreamChatClient {
|
|||||||
Stream<ConnectionStatus> get wsConnectionStatusStream =>
|
Stream<ConnectionStatus> get wsConnectionStatusStream =>
|
||||||
_wsConnectionStatusController.stream.distinct();
|
_wsConnectionStatusController.stream.distinct();
|
||||||
|
|
||||||
LogHandlerFunction get _defaultLogHandler => (LogRecord record) {
|
/// Default log handler function for the [StreamChatClient] logger.
|
||||||
print(
|
static void defaultLogHandler(LogRecord record) {
|
||||||
'${record.time} '
|
print(
|
||||||
'${_levelEmojiMapper[record.level] ?? record.level.name} '
|
'${record.time} '
|
||||||
'${record.loggerName} ${record.message} ',
|
'${_levelEmojiMapper[record.level] ?? record.level.name} '
|
||||||
);
|
'${record.loggerName} ${record.message} ',
|
||||||
if (record.error != null) print(record.error);
|
);
|
||||||
if (record.stackTrace != null) print(record.stackTrace);
|
if (record.error != null) print(record.error);
|
||||||
};
|
if (record.stackTrace != null) print(record.stackTrace);
|
||||||
|
}
|
||||||
|
|
||||||
///
|
/// Default logger for the [StreamChatClient].
|
||||||
Logger detachedLogger(String name) => Logger.detached(name)
|
Logger detachedLogger(String name) => Logger.detached(name)
|
||||||
..level = logLevel
|
..level = logLevel
|
||||||
..onRecord.listen(logHandlerFunction);
|
..onRecord.listen(logHandlerFunction);
|
||||||
|
|||||||
@@ -5,37 +5,36 @@ export 'package:dio/src/dio_error.dart';
|
|||||||
export 'package:dio/src/multipart_file.dart';
|
export 'package:dio/src/multipart_file.dart';
|
||||||
export 'package:dio/src/options.dart';
|
export 'package:dio/src/options.dart';
|
||||||
export 'package:dio/src/options.dart' show ProgressCallback;
|
export 'package:dio/src/options.dart' show ProgressCallback;
|
||||||
export 'package:logging/logging.dart' show Logger, Level;
|
export 'package:logging/logging.dart' show Logger, Level, LogRecord;
|
||||||
export 'package:rate_limiter/rate_limiter.dart';
|
export 'package:rate_limiter/rate_limiter.dart';
|
||||||
|
|
||||||
export './src/core/api/attachment_file_uploader.dart'
|
|
||||||
show AttachmentFileUploader;
|
|
||||||
export './src/core/api/requests.dart';
|
|
||||||
export './src/core/api/requests.dart';
|
|
||||||
export './src/core/api/responses.dart';
|
|
||||||
export './src/core/api/stream_chat_api.dart' show PushProvider;
|
|
||||||
export './src/core/error/error.dart';
|
|
||||||
export './src/core/models/action.dart';
|
|
||||||
export './src/core/models/attachment.dart';
|
|
||||||
export './src/core/models/attachment_file.dart';
|
|
||||||
export './src/core/models/channel_config.dart';
|
|
||||||
export './src/core/models/channel_model.dart';
|
|
||||||
export './src/core/models/channel_state.dart';
|
|
||||||
export './src/core/models/command.dart';
|
|
||||||
export './src/core/models/device.dart';
|
|
||||||
export './src/core/models/event.dart';
|
|
||||||
export './src/core/models/filter.dart' show Filter;
|
|
||||||
export './src/core/models/member.dart';
|
|
||||||
export './src/core/models/message.dart';
|
|
||||||
export './src/core/models/mute.dart';
|
|
||||||
export './src/core/models/own_user.dart';
|
|
||||||
export './src/core/models/reaction.dart';
|
|
||||||
export './src/core/models/read.dart';
|
|
||||||
export './src/core/models/user.dart';
|
|
||||||
export './src/core/util/extension.dart';
|
|
||||||
export './src/db/chat_persistence_client.dart';
|
|
||||||
export './src/event_type.dart';
|
|
||||||
export './src/location.dart';
|
|
||||||
export './src/ws/connection_status.dart';
|
|
||||||
export 'src/client/channel.dart';
|
export 'src/client/channel.dart';
|
||||||
export 'src/client/client.dart';
|
export 'src/client/client.dart';
|
||||||
|
export 'src/core/api/attachment_file_uploader.dart' show AttachmentFileUploader;
|
||||||
|
export 'src/core/api/requests.dart';
|
||||||
|
export 'src/core/api/requests.dart';
|
||||||
|
export 'src/core/api/responses.dart';
|
||||||
|
export 'src/core/api/stream_chat_api.dart' show PushProvider;
|
||||||
|
export 'src/core/error/error.dart';
|
||||||
|
export 'src/core/models/action.dart';
|
||||||
|
export 'src/core/models/attachment.dart';
|
||||||
|
export 'src/core/models/attachment_file.dart';
|
||||||
|
export 'src/core/models/channel_config.dart';
|
||||||
|
export 'src/core/models/channel_model.dart';
|
||||||
|
export 'src/core/models/channel_state.dart';
|
||||||
|
export 'src/core/models/command.dart';
|
||||||
|
export 'src/core/models/device.dart';
|
||||||
|
export 'src/core/models/event.dart';
|
||||||
|
export 'src/core/models/filter.dart' show Filter;
|
||||||
|
export 'src/core/models/member.dart';
|
||||||
|
export 'src/core/models/message.dart';
|
||||||
|
export 'src/core/models/mute.dart';
|
||||||
|
export 'src/core/models/own_user.dart';
|
||||||
|
export 'src/core/models/reaction.dart';
|
||||||
|
export 'src/core/models/read.dart';
|
||||||
|
export 'src/core/models/user.dart';
|
||||||
|
export 'src/core/util/extension.dart';
|
||||||
|
export 'src/db/chat_persistence_client.dart';
|
||||||
|
export 'src/event_type.dart';
|
||||||
|
export 'src/location.dart';
|
||||||
|
export 'src/ws/connection_status.dart';
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
🐞 Fixed
|
🐞 Fixed
|
||||||
|
|
||||||
- [[#1067]](https://github.com/GetStream/stream-chat-flutter/issues/1067): Fix name text overflow in reaction card.
|
- [[#1067]](https://github.com/GetStream/stream-chat-flutter/issues/1067): Fix name text overflow in reaction card.
|
||||||
|
- [[#842]](https://github.com/GetStream/stream-chat-flutter/issues/842): show date divider for first message.
|
||||||
|
|
||||||
## 3.6.1
|
## 3.6.1
|
||||||
|
|
||||||
|
|||||||
@@ -559,6 +559,9 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
if (widget.reverse
|
if (widget.reverse
|
||||||
? widget.headerBuilder == null
|
? widget.headerBuilder == null
|
||||||
: widget.footerBuilder == null) {
|
: widget.footerBuilder == null) {
|
||||||
|
if (messages.isNotEmpty) {
|
||||||
|
return _buildDateDivider(messages.last);
|
||||||
|
}
|
||||||
if (_isThreadConversation) return const Offstage();
|
if (_isThreadConversation) return const Offstage();
|
||||||
return const SizedBox(height: 52);
|
return const SizedBox(height: 52);
|
||||||
}
|
}
|
||||||
@@ -583,21 +586,12 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
message = messages[i - 2];
|
message = messages[i - 2];
|
||||||
nextMessage = messages[i - 1];
|
nextMessage = messages[i - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Jiffy(message.createdAt.toLocal()).isSame(
|
if (!Jiffy(message.createdAt.toLocal()).isSame(
|
||||||
nextMessage.createdAt.toLocal(),
|
nextMessage.createdAt.toLocal(),
|
||||||
Units.DAY,
|
Units.DAY,
|
||||||
)) {
|
)) {
|
||||||
final divider = widget.dateDividerBuilder != null
|
return _buildDateDivider(nextMessage);
|
||||||
? widget.dateDividerBuilder!(
|
|
||||||
nextMessage.createdAt.toLocal(),
|
|
||||||
)
|
|
||||||
: Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
|
||||||
child: DateDivider(
|
|
||||||
dateTime: nextMessage.createdAt.toLocal(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
return divider;
|
|
||||||
}
|
}
|
||||||
final timeDiff =
|
final timeDiff =
|
||||||
Jiffy(nextMessage.createdAt.toLocal()).diff(
|
Jiffy(nextMessage.createdAt.toLocal()).diff(
|
||||||
@@ -747,6 +741,20 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildDateDivider(Message message) {
|
||||||
|
final divider = widget.dateDividerBuilder != null
|
||||||
|
? widget.dateDividerBuilder!(
|
||||||
|
message.createdAt.toLocal(),
|
||||||
|
)
|
||||||
|
: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||||
|
child: DateDivider(
|
||||||
|
dateTime: message.createdAt.toLocal(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return divider;
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildThreadSeparator() {
|
Widget _buildThreadSeparator() {
|
||||||
if (widget.threadSeparatorBuilder != null) {
|
if (widget.threadSeparatorBuilder != null) {
|
||||||
return widget.threadSeparatorBuilder!.call(context);
|
return widget.threadSeparatorBuilder!.call(context);
|
||||||
@@ -803,7 +811,11 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
index = _getBottomElementIndex(values);
|
index = _getBottomElementIndex(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index == null) return const Offstage();
|
if ((index == null) ||
|
||||||
|
(!_isThreadConversation && index == itemCount - 2) ||
|
||||||
|
(_isThreadConversation && index == itemCount - 1)) {
|
||||||
|
return const Offstage();
|
||||||
|
}
|
||||||
|
|
||||||
if (index <= 2 || index >= itemCount - 3) {
|
if (index <= 2 || index >= itemCount - 3) {
|
||||||
if (widget.reverse) {
|
if (widget.reverse) {
|
||||||
|
|||||||
Reference in New Issue
Block a user