From 32309e3ab32df485453d17707c9bc60bba6a533b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 25 Feb 2021 15:36:19 +0100 Subject: [PATCH 01/17] Update issue templates --- .github/ISSUE_TEMPLATE/bug-report.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 1f722427..64713f38 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -10,6 +10,8 @@ assignees: '' **Describe the bug** A clear and concise description of what the bug is. +**What package are you using? What version?** + **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' From 273e0843a9c50b0cef00ab8f71c0d19c473ad39d Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Thu, 25 Feb 2021 21:39:37 +0530 Subject: [PATCH 02/17] Update Readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f46dfbd..6260cf24 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ **Quick Links** - [Register](https://getstream.io/chat/trial/) to get an API key for Stream Chat -- [Flutter Chat Tutorial](https://getstream.io/chat/flutter/tutorial/) +- [Flutter Chat SDK Tutorial](https://getstream.io/chat/flutter/tutorial/) - [Chat UI Kit](https://getstream.io/chat/ui-kit/) - [Sample apps](https://github.com/GetStream/flutter-samples) From 7a1c470997a9a44f4e902dd70e36fb65d4af78cf Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 26 Feb 2021 16:21:09 +0100 Subject: [PATCH 03/17] bump version --- packages/stream_chat/lib/version.dart | 2 +- packages/stream_chat/pubspec.yaml | 2 +- packages/stream_chat_flutter/example/pubspec.yaml | 3 +-- packages/stream_chat_flutter/pubspec.yaml | 4 ++-- packages/stream_chat_flutter_core/pubspec.yaml | 4 ++-- packages/stream_chat_persistence/example/pubspec.yaml | 3 +-- packages/stream_chat_persistence/pubspec.yaml | 5 ++--- 7 files changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/stream_chat/lib/version.dart b/packages/stream_chat/lib/version.dart index 6cd8c4bc..7eef0794 100644 --- a/packages/stream_chat/lib/version.dart +++ b/packages/stream_chat/lib/version.dart @@ -2,4 +2,4 @@ import 'package:stream_chat/src/client.dart'; /// Current package version /// Used in [StreamChatClient] to build the `x-stream-client` header -const PACKAGE_VERSION = '1.2.0-beta'; +const PACKAGE_VERSION = '1.3.0-beta'; diff --git a/packages/stream_chat/pubspec.yaml b/packages/stream_chat/pubspec.yaml index a625f95b..63ea95a9 100644 --- a/packages/stream_chat/pubspec.yaml +++ b/packages/stream_chat/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat homepage: https://getstream.io/ description: The official Dart client for Stream Chat, a service for building chat applications. -version: 1.2.0-beta +version: 1.3.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues diff --git a/packages/stream_chat_flutter/example/pubspec.yaml b/packages/stream_chat_flutter/example/pubspec.yaml index 7a1863b0..4d32fb58 100644 --- a/packages/stream_chat_flutter/example/pubspec.yaml +++ b/packages/stream_chat_flutter/example/pubspec.yaml @@ -25,8 +25,7 @@ dependencies: sdk: flutter stream_chat_flutter: path: ../ - stream_chat_persistence: - path: ../../stream_chat_persistence + stream_chat_persistence: ^1.3.0-beta # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 8fcf99a7..36b561da 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter. -version: 1.2.0-beta +version: 1.3.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - stream_chat_flutter_core: ^1.2.0-beta + stream_chat_flutter_core: ^1.3.0-beta flutter_app_badger: ^1.1.2 photo_view: ^0.10.3 rxdart: ^0.25.0 diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index e9ce119b..2896ece3 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -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: 1.2.0-beta +version: 1.3.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -10,7 +10,7 @@ environment: flutter: ">=1.17.0" dependencies: - stream_chat: ^1.2.0-beta + stream_chat: ^1.3.0-beta flutter: sdk: flutter rxdart: ^0.25.0 diff --git a/packages/stream_chat_persistence/example/pubspec.yaml b/packages/stream_chat_persistence/example/pubspec.yaml index 2586bea6..f70d9d93 100644 --- a/packages/stream_chat_persistence/example/pubspec.yaml +++ b/packages/stream_chat_persistence/example/pubspec.yaml @@ -11,8 +11,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.0 - stream_chat: - path: ../../stream_chat + stream_chat: ^1.3.0 stream_chat_persistence: path: ../ diff --git a/packages/stream_chat_persistence/pubspec.yaml b/packages/stream_chat_persistence/pubspec.yaml index 9551507e..bd32d8f3 100644 --- a/packages/stream_chat_persistence/pubspec.yaml +++ b/packages/stream_chat_persistence/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_persistence homepage: https://github.com/GetStream/stream-chat-flutter description: Official Stream Chat Persistence library. Build your own chat experience using Dart and Flutter. -version: 1.2.0-beta +version: 1.3.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -13,8 +13,7 @@ dependencies: path: ^1.7.0 path_provider: ^1.6.27 sqlite3_flutter_libs: ^0.4.0+1 - stream_chat: - path: ../stream_chat + stream_chat: ^1.3.0-beta dev_dependencies: test: ^1.15.7 From b8e29cd88cb11d01045a7edfd7fd8ad6e3fe53c1 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 26 Feb 2021 16:25:08 +0100 Subject: [PATCH 04/17] update changelogs --- packages/stream_chat/CHANGELOG.md | 7 +++++++ packages/stream_chat_flutter/CHANGELOG.md | 11 ++++++++++- packages/stream_chat_flutter_core/CHANGELOG.md | 5 +++++ packages/stream_chat_persistence/CHANGELOG.md | 4 ++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 676dbec4..b0d0c658 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.3.0-beta + +- Save pinned messages in offline storage +- Minor fixes +- `StreamClient.QueryChannels` now returns a Stream and fetches the channels from storage before calling the api +- Added `StreamClient.QueryChannelsOnline` and `StreamClient.QueryChannelsOffline` to fetch channels only from online or offline + ## 1.2.0-beta - 🛑 **BREAKING** Changed signature of `StreamClient.search` method diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 1e04d3cc..57cc011d 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,7 +1,16 @@ +## 1.3.0-beta + +- Added `MessageInputTheme` +- Fixed overflow in `MessageInput` animation +- Delete only image on imagegallery +- Close keyboard after sending a command +- Exposed `customAttachmentBuilders` through `MessageListView` +- Update `stream_chat_core` dependency + ## 1.2.0-beta - Minor fixes -- Update stream_chat_core dependency +- Update `stream_chat_core` dependency ## 1.1.1-beta diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index 737fe5cc..d9abfe21 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.0-beta + +* Update llc dependency +* Minor fixes + ## 1.2.0-beta * Update llc dependency diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index c214c008..fab0e874 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.0-beta + +* Update llc dependency + ## 1.2.0-beta * Update llc dependency From a65df2662607608e8429777af08ab35b95720e38 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 26 Feb 2021 17:12:03 +0100 Subject: [PATCH 05/17] fix lint --- .../platform_detector/platform_detector.dart | 31 +++++++++++++++++++ .../platform_detector_io.dart | 1 + .../platform_detector_stub.dart | 1 + .../platform_detector_web.dart | 1 + .../lib/src/channel_list_view.dart | 3 -- 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/stream_chat/lib/src/platform_detector/platform_detector.dart b/packages/stream_chat/lib/src/platform_detector/platform_detector.dart index 8f601501..32748256 100644 --- a/packages/stream_chat/lib/src/platform_detector/platform_detector.dart +++ b/packages/stream_chat/lib/src/platform_detector/platform_detector.dart @@ -2,26 +2,56 @@ import 'platform_detector_stub.dart' if (dart.library.html) 'platform_detector_web.dart' if (dart.library.io) 'platform_detector_io.dart'; +/// Possible platforms enum PlatformType { + /// Android, + + /// Ios, + + /// Web, + + /// MacOS, + + /// Windows, + + /// Linux, + + /// Fuchsia, } +/// Utility class that provides information on the current platform class CurrentPlatform { CurrentPlatform._(); + + /// True if the app is running on android static bool get isAndroid => type == PlatformType.Android; + + /// True if the app is running on ios static bool get isIos => type == PlatformType.Ios; + + /// True if the app is running on web static bool get isWeb => type == PlatformType.Web; + + /// True if the app is running on macos static bool get isMacOS => type == PlatformType.MacOS; + + /// True if the app is running on windows static bool get isWindows => type == PlatformType.Windows; + + /// True if the app is running on linux static bool get isLinux => type == PlatformType.Linux; + + /// True if the app is running on fuchsia static bool get isFuchsia => type == PlatformType.Fuchsia; + /// Returns a string version of the platform static String get name { switch (type) { case PlatformType.Android: @@ -43,5 +73,6 @@ class CurrentPlatform { } } + /// Get current platform type static PlatformType get type => currentPlatform; } diff --git a/packages/stream_chat/lib/src/platform_detector/platform_detector_io.dart b/packages/stream_chat/lib/src/platform_detector/platform_detector_io.dart index 6cca45b6..df74f5d8 100644 --- a/packages/stream_chat/lib/src/platform_detector/platform_detector_io.dart +++ b/packages/stream_chat/lib/src/platform_detector/platform_detector_io.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'platform_detector.dart'; +/// Version running on native systems PlatformType get currentPlatform { if (Platform.isWindows) return PlatformType.Windows; if (Platform.isFuchsia) return PlatformType.Fuchsia; diff --git a/packages/stream_chat/lib/src/platform_detector/platform_detector_stub.dart b/packages/stream_chat/lib/src/platform_detector/platform_detector_stub.dart index 4469fc46..f9143deb 100644 --- a/packages/stream_chat/lib/src/platform_detector/platform_detector_stub.dart +++ b/packages/stream_chat/lib/src/platform_detector/platform_detector_stub.dart @@ -1,5 +1,6 @@ import 'platform_detector.dart'; +/// Stub implementation PlatformType get currentPlatform { throw UnimplementedError(); } diff --git a/packages/stream_chat/lib/src/platform_detector/platform_detector_web.dart b/packages/stream_chat/lib/src/platform_detector/platform_detector_web.dart index b1613afb..4274bf71 100644 --- a/packages/stream_chat/lib/src/platform_detector/platform_detector_web.dart +++ b/packages/stream_chat/lib/src/platform_detector/platform_detector_web.dart @@ -1,3 +1,4 @@ import 'platform_detector.dart'; +/// Version running on web PlatformType get currentPlatform => PlatformType.Web; diff --git a/packages/stream_chat_flutter/lib/src/channel_list_view.dart b/packages/stream_chat_flutter/lib/src/channel_list_view.dart index 9edd39ff..3bab76b2 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_view.dart @@ -1,6 +1,3 @@ -import 'dart:async'; -import 'dart:convert'; - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; From 009b66826ba0a3671a13ed68ad6ac550223ead6b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 26 Feb 2021 17:17:28 +0100 Subject: [PATCH 06/17] add MessageInputTheme basic docs --- packages/stream_chat_flutter/lib/src/stream_chat_theme.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart index 338e2603..aa4f51f0 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart @@ -845,7 +845,9 @@ class ChannelHeaderTheme { } } +/// Defines the theme dedicated to the [MessageInput] widget class MessageInputTheme { + /// Duration of the [MessageInput] send button animation final Duration sendAnimationDuration; /// Background color of [MessageInput] send button @@ -863,6 +865,7 @@ class MessageInputTheme { /// Background color of [MessageInput] final Color inputBackground; + /// Returns a new [MessageInputTheme] const MessageInputTheme({ this.sendAnimationDuration, this.actionButtonColor, @@ -872,6 +875,7 @@ class MessageInputTheme { this.inputBackground, }); + /// Returns a new [MessageInputTheme] replacing some of its properties MessageInputTheme copyWith({ Duration sendAnimationDuration, Color inputBackground, @@ -891,6 +895,7 @@ class MessageInputTheme { sendButtonIdleColor: sendButtonIdleColor ?? this.sendButtonIdleColor, ); + /// Merges [this] [MessageInputTheme] with the [other] MessageInputTheme merge(MessageInputTheme other) { if (other == null) return this; return copyWith( From 75fbe69ca399d4af9c359acc322a9a1fa661b64c Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:09:42 +0100 Subject: [PATCH 07/17] fix search filter using channel.cid --- .../lib/src/channel_media_display_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index ab2e2055..968a8641 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -44,7 +44,7 @@ class _ChannelMediaDisplayScreenState extends State { messageSearchBloc.search( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid], } }, messageFilter: { From 208bdd92385b97866100e9657bf45d17215d1e69 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:11:07 +0100 Subject: [PATCH 08/17] fix search filter using channel.cid --- .../lib/src/channel_file_display_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart index a010a500..1bc32bb6 100644 --- a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart @@ -38,7 +38,7 @@ class _ChannelFileDisplayScreenState extends State { messageSearchBloc.search( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { From 3c595d98f73c50dffbb47a3944685684b098d877 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:11:58 +0100 Subject: [PATCH 09/17] fix search filter using channel.cid --- .../lib/src/channel_file_display_screen.dart | 2 +- .../lib/src/channel_media_display_screen.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart index 1bc32bb6..a6be5555 100644 --- a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart @@ -146,7 +146,7 @@ class _ChannelFileDisplayScreenState extends State { onEndOfPage: () => messageSearchBloc.loadMore( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index 968a8641..87ab2f3b 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -169,7 +169,7 @@ class _ChannelMediaDisplayScreenState extends State { onEndOfPage: () => messageSearchBloc.loadMore( filter: { 'cid': { - r'$in': ['messaging:${StreamChannel.of(context).channel.id}'] + r'$in': [StreamChannel.of(context).channel.cid] } }, messageFilter: { From 578c4efade12d83a2bb63fd5365ce535b06dcceb Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 10:12:41 +0100 Subject: [PATCH 10/17] fix ChannelState.addMessage --- packages/stream_chat/lib/src/api/channel.dart | 2 +- packages/stream_chat/lib/src/api/retry_queue.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 1f5da466..38f990b0 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -1441,7 +1441,7 @@ class ChannelClientState { final oldIndex = newMessages.indexWhere((m) => m.id == message.id); if (oldIndex != -1) { - newMessages[oldIndex] = newMessages[oldIndex].merge(message); + newMessages[oldIndex] = message; } else { newMessages.add(message); } diff --git a/packages/stream_chat/lib/src/api/retry_queue.dart b/packages/stream_chat/lib/src/api/retry_queue.dart index de3ca610..34046545 100644 --- a/packages/stream_chat/lib/src/api/retry_queue.dart +++ b/packages/stream_chat/lib/src/api/retry_queue.dart @@ -47,6 +47,7 @@ class RetryQueue { /// Add a list of messages void add(List messages) { + logger?.info('added ${messages.length} messages'); final messageList = _messageQueue.toList(); _messageQueue.addAll(messages .where((element) => !messageList.any((m) => m.id == element.id))); From ecb559f687f38f99e60226370b823be9103baa33 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:52:32 +0100 Subject: [PATCH 11/17] reduce calls to offlinestorage while uploading attachments using debounce --- packages/stream_chat/lib/src/api/channel.dart | 7 +++++- packages/stream_chat/lib/src/debounce.dart | 23 +++++++++++++++++++ packages/stream_chat_flutter/pubspec.yaml | 4 ++++ .../stream_chat_flutter_core/pubspec.yaml | 4 ++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/stream_chat/lib/src/debounce.dart diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 38f990b0..c45ec409 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -7,6 +7,7 @@ import 'package:dio/dio.dart'; import 'package:logging/logging.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/src/api/retry_queue.dart'; +import 'package:stream_chat/src/debounce.dart'; import 'package:stream_chat/src/event_type.dart'; import 'package:stream_chat/src/models/attachment_file.dart'; import 'package:stream_chat/src/models/channel_state.dart'; @@ -1685,7 +1686,11 @@ class ChannelClientState { set _channelState(ChannelState v) { _channelStateController.add(v); - _channel._client.chatPersistenceClient?.updateChannelState(v); + debounce( + timeout: Duration(milliseconds: 500), + target: _channel._client.chatPersistenceClient?.updateChannelState, + arguments: [v], + ); } /// The channel threads related to this channel diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart new file mode 100644 index 00000000..c0375cf5 --- /dev/null +++ b/packages/stream_chat/lib/src/debounce.dart @@ -0,0 +1,23 @@ +import 'dart:async'; + +import 'package:meta/meta.dart'; + +/// Map of timeouts being debounced +Map timeouts = {}; + +/// Runs a function avoiding calling it too many times in a [timeoutMS] window +void debounce({ + @required Duration timeout, + @required Function target, + @required List arguments, +}) { + if (timeouts.containsKey(target)) { + timeouts[target].cancel(); + } + + final timer = Timer(timeout, () { + Function.apply(target, arguments); + }); + + timeouts[target] = timer; +} diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 36b561da..8ad0cd12 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -48,6 +48,10 @@ dependencies: path_provider: ^1.6.27 video_thumbnail: ^0.2.5+1 +dependencies_override: + stream_chat_flutter_core: + path: ../stream_chat_flutter_core + flutter: assets: - images/ diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index 2896ece3..f9c9a650 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -15,6 +15,10 @@ dependencies: sdk: flutter rxdart: ^0.25.0 +dependencies_override: + stream_chat: + path: ../stream_chat + dev_dependencies: mockito: ^4.1.4 flutter_test: From b36c31c9920a71242bc698fc24a9384c7ce83324 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:55:37 +0100 Subject: [PATCH 12/17] debounce updateAttachment --- packages/stream_chat/lib/src/api/channel.dart | 12 +++++++++--- packages/stream_chat/lib/src/debounce.dart | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index c45ec409..90cc2f4f 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -238,9 +238,15 @@ class Channel { } void onSendProgress(int sent, int total) { - updateAttachment(it.copyWith( - uploadState: UploadState.inProgress(uploaded: sent, total: total), - )); + debounce( + timeout: Duration(seconds: 1), + target: updateAttachment, + arguments: [ + it.copyWith( + uploadState: UploadState.inProgress(uploaded: sent, total: total), + ), + ], + ); } final isImage = it.type == 'image'; diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart index c0375cf5..6bf90658 100644 --- a/packages/stream_chat/lib/src/debounce.dart +++ b/packages/stream_chat/lib/src/debounce.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:meta/meta.dart'; /// Map of timeouts being debounced -Map timeouts = {}; +Map timeouts = {}; /// Runs a function avoiding calling it too many times in a [timeoutMS] window void debounce({ From 074629a7f00b8532a3139c83847a2e9085613bbf Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 11:59:20 +0100 Subject: [PATCH 13/17] add support for named args --- packages/stream_chat/lib/src/api/channel.dart | 4 ++-- packages/stream_chat/lib/src/debounce.dart | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 90cc2f4f..97ce9a96 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -241,7 +241,7 @@ class Channel { debounce( timeout: Duration(seconds: 1), target: updateAttachment, - arguments: [ + positionalArguments: [ it.copyWith( uploadState: UploadState.inProgress(uploaded: sent, total: total), ), @@ -1695,7 +1695,7 @@ class ChannelClientState { debounce( timeout: Duration(milliseconds: 500), target: _channel._client.chatPersistenceClient?.updateChannelState, - arguments: [v], + positionalArguments: [v], ); } diff --git a/packages/stream_chat/lib/src/debounce.dart b/packages/stream_chat/lib/src/debounce.dart index 6bf90658..f1cf05a4 100644 --- a/packages/stream_chat/lib/src/debounce.dart +++ b/packages/stream_chat/lib/src/debounce.dart @@ -9,14 +9,19 @@ Map timeouts = {}; void debounce({ @required Duration timeout, @required Function target, - @required List arguments, + List positionalArguments, + Map namedArguments, }) { if (timeouts.containsKey(target)) { timeouts[target].cancel(); } final timer = Timer(timeout, () { - Function.apply(target, arguments); + Function.apply( + target, + positionalArguments, + namedArguments, + ); }); timeouts[target] = timer; From 8d307e118523993450a147cd23ddbb7cb60bab0b Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 12:01:49 +0100 Subject: [PATCH 14/17] bump version --- packages/stream_chat/lib/version.dart | 2 +- packages/stream_chat/pubspec.yaml | 2 +- packages/stream_chat_flutter/pubspec.yaml | 6 +----- packages/stream_chat_flutter_core/pubspec.yaml | 8 ++------ 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/stream_chat/lib/version.dart b/packages/stream_chat/lib/version.dart index 7eef0794..8af293af 100644 --- a/packages/stream_chat/lib/version.dart +++ b/packages/stream_chat/lib/version.dart @@ -2,4 +2,4 @@ import 'package:stream_chat/src/client.dart'; /// Current package version /// Used in [StreamChatClient] to build the `x-stream-client` header -const PACKAGE_VERSION = '1.3.0-beta'; +const PACKAGE_VERSION = '1.3.1-beta'; diff --git a/packages/stream_chat/pubspec.yaml b/packages/stream_chat/pubspec.yaml index 63ea95a9..63d41615 100644 --- a/packages/stream_chat/pubspec.yaml +++ b/packages/stream_chat/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat homepage: https://getstream.io/ description: The official Dart client for Stream Chat, a service for building chat applications. -version: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 8ad0cd12..b0192aa1 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter. -version: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -48,10 +48,6 @@ dependencies: path_provider: ^1.6.27 video_thumbnail: ^0.2.5+1 -dependencies_override: - stream_chat_flutter_core: - path: ../stream_chat_flutter_core - flutter: assets: - images/ diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index f9c9a650..bbb58a13 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -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: 1.3.0-beta +version: 1.3.1-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -10,15 +10,11 @@ environment: flutter: ">=1.17.0" dependencies: - stream_chat: ^1.3.0-beta + stream_chat: ^1.3.1-beta flutter: sdk: flutter rxdart: ^0.25.0 -dependencies_override: - stream_chat: - path: ../stream_chat - dev_dependencies: mockito: ^4.1.4 flutter_test: From b25c30d8f13ed0a4c4ace97b2f1b320137ebc14a Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 12:04:07 +0100 Subject: [PATCH 15/17] update changelogs --- packages/stream_chat/CHANGELOG.md | 4 ++++ packages/stream_chat_flutter/CHANGELOG.md | 9 +++++++-- packages/stream_chat_flutter_core/CHANGELOG.md | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index b0d0c658..30ae46f7 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.1-beta + +- Debounced frequent db calls + ## 1.3.0-beta - Save pinned messages in offline storage diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 57cc011d..967536dd 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.1-beta + +- Updated `stream_chat_core` dependency +- Fixed minor bugs + ## 1.3.0-beta - Added `MessageInputTheme` @@ -5,12 +10,12 @@ - Delete only image on imagegallery - Close keyboard after sending a command - Exposed `customAttachmentBuilders` through `MessageListView` -- Update `stream_chat_core` dependency +- Updated `stream_chat_core` dependency ## 1.2.0-beta - Minor fixes -- Update `stream_chat_core` dependency +- Updated `stream_chat_core` dependency ## 1.1.1-beta diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index d9abfe21..bbf8b9f5 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.1-beta + +* Update llc dependency + ## 1.3.0-beta * Update llc dependency From 3a51e4786e8695d12eaad41e5a142f0452e2ed10 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 1 Mar 2021 17:38:57 +0100 Subject: [PATCH 16/17] fix: fixed long system messages overflowing --- .../lib/src/system_message.dart | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/system_message.dart b/packages/stream_chat_flutter/lib/src/system_message.dart index 7b4dc243..941db18d 100644 --- a/packages/stream_chat_flutter/lib/src/system_message.dart +++ b/packages/stream_chat_flutter/lib/src/system_message.dart @@ -56,19 +56,20 @@ class SystemMessage extends StatelessWidget { onMessageTap(message); } }, - child: Container( - width: double.infinity, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - divider, - Padding( - padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + divider, + Flexible( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 2.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( message.text, + softWrap: true, style: TextStyle( fontSize: 10, color: Theme.of(context) @@ -107,9 +108,9 @@ class SystemMessage extends StatelessWidget { ], ), ), - divider, - ], - ), + ), + divider, + ], ), ); } From 4a40743857a0737d53feae57b7bed64dbbd2cf4e Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 2 Mar 2021 09:43:04 +0100 Subject: [PATCH 17/17] fix: header casing --- packages/stream_chat/lib/src/client.dart | 6 +++--- packages/stream_chat/lib/version.dart | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/client.dart b/packages/stream_chat/lib/src/client.dart index 2c36f4f6..cf68a4ca 100644 --- a/packages/stream_chat/lib/src/client.dart +++ b/packages/stream_chat/lib/src/client.dart @@ -350,7 +350,7 @@ class StreamChatClient { Map get _httpHeaders => { 'Authorization': token, 'stream-auth-type': _authType, - 'x-stream-client': _userAgent, + 'X-Stream-Client': _userAgent, 'Content-Encoding': 'gzip', }; @@ -468,9 +468,9 @@ class StreamChatClient { user: state.user, connectParams: { 'api_key': apiKey, - 'authorization': token, + 'Authorization': token, 'stream-auth-type': _authType, - 'x-stream-client': _userAgent, + 'X-Stream-Client': _userAgent, }, connectPayload: { 'user_id': state.user.id, diff --git a/packages/stream_chat/lib/version.dart b/packages/stream_chat/lib/version.dart index 8af293af..9f8f93a9 100644 --- a/packages/stream_chat/lib/version.dart +++ b/packages/stream_chat/lib/version.dart @@ -1,5 +1,5 @@ import 'package:stream_chat/src/client.dart'; /// Current package version -/// Used in [StreamChatClient] to build the `x-stream-client` header +/// Used in [StreamChatClient] to build the `X-Stream-Client` header const PACKAGE_VERSION = '1.3.1-beta';