From 6e869ff12fa73751224fdf06db3ecc8c7e977ade Mon Sep 17 00:00:00 2001 From: Brazol Date: Thu, 19 Mar 2026 13:57:28 +0100 Subject: [PATCH 1/5] channel list skeleton --- .../stream_channel_list_loading_view.dart | 134 ++++++++++++++++++ .../stream_channel_list_view.dart | 7 +- 2 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart new file mode 100644 index 000000000..516a605f9 --- /dev/null +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart @@ -0,0 +1,134 @@ +import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +/// A shimmer loading placeholder for the channel list view. +/// +/// Displays a skeleton UI with shimmer animation +class StreamChannelListLoadingView extends StatelessWidget { + /// Creates a new instance of [StreamChannelListLoadingView]. + const StreamChannelListLoadingView({ + super.key, + this.itemCount = 6, + }); + + /// The number of skeleton items to display. + final int itemCount; + + @override + Widget build(BuildContext context) { + final colorTheme = context.streamColorScheme; + + return Shimmer.fromColors( + baseColor: colorTheme.skeletonLoadingBase, + highlightColor: colorTheme.skeletonLoadingHighlight, + child: ListView.separated( + physics: const NeverScrollableScrollPhysics(), + itemCount: itemCount, + separatorBuilder: (context, index) => const SizedBox(height: 1), + itemBuilder: (context, index) => const _ChannelListItemSkeleton(), + ), + ); + } +} + +class _ChannelListItemSkeleton extends StatelessWidget { + const _ChannelListItemSkeleton(); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(context.streamSpacing.sm), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const _SkeletonBox( + width: 48, + height: 48, + shape: BoxShape.circle, + ), + SizedBox(width: context.streamSpacing.sm), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + const Expanded( + child: _SkeletonBox(width: double.infinity, height: 12), + ), + SizedBox(width: context.streamSpacing.sm), + _SkeletonBox( + width: 48, + height: 16, + borderRadius: BorderRadius.circular(6), + ), + ], + ), + SizedBox(height: context.streamSpacing.xs), + Row( + children: [ + const Expanded( + child: _SkeletonBox(width: double.infinity, height: 20), + ), + SizedBox(width: context.streamSpacing.sm), + const SizedBox(width: 48), + ], + ), + SizedBox(height: context.streamSpacing.xs), + Row( + children: [ + const _SkeletonBox( + width: 24, + height: 24, + shape: BoxShape.circle, + ), + SizedBox(width: context.streamSpacing.xs), + _SkeletonBox( + width: 64, + height: 12, + borderRadius: BorderRadius.circular(6), + ), + SizedBox(width: context.streamSpacing.xs), + _SkeletonBox( + width: 64, + height: 12, + borderRadius: BorderRadius.circular(6), + ), + ], + ), + ], + ), + ), + ], + ), + ); + } +} + +class _SkeletonBox extends StatelessWidget { + const _SkeletonBox({ + required this.width, + required this.height, + this.shape = BoxShape.rectangle, + this.borderRadius, + }); + + final double width; + final double height; + final BoxShape shape; + final BorderRadius? borderRadius; + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: height, + decoration: BoxDecoration( + color: Colors.white, + shape: shape, + borderRadius: shape == BoxShape.rectangle ? (borderRadius ?? BorderRadius.circular(8)) : null, + ), + ); + } +} diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart index 1d697dfd6..0e51b898d 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart @@ -1,5 +1,6 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_error_widget.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_error.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_indicator.dart'; @@ -347,11 +348,7 @@ class StreamChannelListView extends StatelessWidget { child: StreamScrollViewLoadMoreIndicator(), ), ), - loadingBuilder: (context) => - loadingBuilder?.call(context) ?? - const Center( - child: StreamScrollViewLoadingWidget(), - ), + loadingBuilder: (context) => loadingBuilder?.call(context) ?? const StreamChannelListLoadingView(), errorBuilder: (context, error) => errorBuilder?.call(context, error) ?? Center( From 08ca7edc880e1cc9fed92b859604f2d03f936126 Mon Sep 17 00:00:00 2001 From: Brazol Date: Thu, 19 Mar 2026 14:00:23 +0100 Subject: [PATCH 2/5] fix --- .../channel_scroll_view/stream_channel_list_view.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart index 0e51b898d..e23e68544 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart @@ -4,7 +4,6 @@ import 'package:stream_chat_flutter/src/scroll_view/channel_scroll_view/stream_c import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_error_widget.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_error.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_indicator.dart'; -import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_loading_widget.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Default separator builder for [StreamChannelListView]. From 3135f918c86c073a224a71f38fccf63908255fbb Mon Sep 17 00:00:00 2001 From: Brazol Date: Fri, 20 Mar 2026 08:14:50 +0100 Subject: [PATCH 3/5] skeletons --- melos.yaml | 2 +- .../message_list_view/message_list_view.dart | 6 +- .../stream_message_list_skeleton_loading.dart | 117 +++++++++++++++ .../stream_channel_list_loading_view.dart | 134 ------------------ .../stream_channel_list_skeleton_loading.dart | 90 ++++++++++++ .../stream_channel_list_view.dart | 4 +- .../stream_thread_list_skeleton_loading.dart | 107 ++++++++++++++ .../stream_thread_list_view.dart | 4 +- packages/stream_chat_flutter/pubspec.yaml | 2 +- 9 files changed, 321 insertions(+), 145 deletions(-) create mode 100644 packages/stream_chat_flutter/lib/src/message_list_view/stream_message_list_skeleton_loading.dart delete mode 100644 packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart create mode 100644 packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart create mode 100644 packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_skeleton_loading.dart diff --git a/melos.yaml b/melos.yaml index 7dc48f120..e5c734784 100644 --- a/melos.yaml +++ b/melos.yaml @@ -95,7 +95,7 @@ command: stream_core_flutter: git: url: https://github.com/GetStream/stream-core-flutter.git - ref: 8057a775c2ed764dbd5cbabd2dd60d3cd68d2f08 + ref: 226389ad533276d8daf2e03b90ed4cb3bfeecde3 path: packages/stream_core_flutter synchronized: ^3.1.0+1 thumblr: ^0.0.4 diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart index fdf1717e3..2dc03a561 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart @@ -563,11 +563,7 @@ class _StreamMessageListViewState extends State { child: MessageListCore( paginationLimit: widget.paginationLimit, messageFilter: widget.messageFilter, - loadingBuilder: - widget.loadingBuilder ?? - (context) => const Center( - child: CircularProgressIndicator.adaptive(), - ), + loadingBuilder: widget.loadingBuilder ?? (context) => const StreamMessageListSkeletonLoading(), emptyBuilder: widget.emptyBuilder ?? (context) => Center( diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/stream_message_list_skeleton_loading.dart b/packages/stream_chat_flutter/lib/src/message_list_view/stream_message_list_skeleton_loading.dart new file mode 100644 index 000000000..7a1c7f378 --- /dev/null +++ b/packages/stream_chat_flutter/lib/src/message_list_view/stream_message_list_skeleton_loading.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import 'package:stream_core_flutter/stream_core_flutter.dart'; + +/// A shimmer loading placeholder for the message list view. +/// +/// Displays a skeleton UI with shimmer animation that mimics a chat +/// conversation with incoming (left-aligned) and outgoing (right-aligned) +/// message bubbles using [StreamSkeletonLoading] and [StreamSkeletonBox]. +class StreamMessageListSkeletonLoading extends StatelessWidget { + /// Creates a new instance of [StreamMessageListSkeletonLoading]. + const StreamMessageListSkeletonLoading({super.key}); + + @override + Widget build(BuildContext context) { + final spacing = context.streamSpacing; + + return StreamSkeletonLoading( + child: LayoutBuilder( + builder: (context, constraints) { + return Padding( + padding: EdgeInsets.all(spacing.md), + child: Column( + children: [ + _IncomingBubble(), + SizedBox(height: spacing.lg), + _OutgoingBubble(), + SizedBox(height: spacing.lg), + _IncomingBubble(), + SizedBox(height: spacing.lg), + _OutgoingBubble(), + SizedBox(height: spacing.lg), + _IncomingBubble(), + SizedBox(height: spacing.md), + ], + ), + ); + }, + ), + ); + } +} + +class _IncomingBubble extends StatelessWidget { + @override + Widget build(BuildContext context) { + final spacing = context.streamSpacing; + + return Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + const StreamSkeletonBox.circular(radius: 16), + SizedBox(width: spacing.xs), + Expanded( + flex: 3, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + StreamSkeletonBox( + height: 56, + borderRadius: BorderRadius.only( + topRight: context.streamRadius.xl, + bottomRight: context.streamRadius.xl, + topLeft: context.streamRadius.xl, + ), + ), + SizedBox(height: spacing.xs), + StreamSkeletonBox( + width: 56, + height: 12, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + SizedBox(height: spacing.xs), + ], + ), + ), + const Spacer( + flex: 1, + ), + ], + ); + } +} + +class _OutgoingBubble extends StatelessWidget { + @override + Widget build(BuildContext context) { + final spacing = context.streamSpacing; + + return Row( + children: [ + const Spacer( + flex: 1, + ), + Expanded( + flex: 2, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + StreamSkeletonBox( + height: 56, + borderRadius: BorderRadius.all( + context.streamRadius.xl, + ), + ), + SizedBox(height: spacing.xs), + StreamSkeletonBox( + width: 56, + height: 12, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ], + ), + ), + ], + ); + } +} diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart deleted file mode 100644 index 516a605f9..000000000 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart +++ /dev/null @@ -1,134 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:shimmer/shimmer.dart'; -import 'package:stream_chat_flutter/stream_chat_flutter.dart'; - -/// A shimmer loading placeholder for the channel list view. -/// -/// Displays a skeleton UI with shimmer animation -class StreamChannelListLoadingView extends StatelessWidget { - /// Creates a new instance of [StreamChannelListLoadingView]. - const StreamChannelListLoadingView({ - super.key, - this.itemCount = 6, - }); - - /// The number of skeleton items to display. - final int itemCount; - - @override - Widget build(BuildContext context) { - final colorTheme = context.streamColorScheme; - - return Shimmer.fromColors( - baseColor: colorTheme.skeletonLoadingBase, - highlightColor: colorTheme.skeletonLoadingHighlight, - child: ListView.separated( - physics: const NeverScrollableScrollPhysics(), - itemCount: itemCount, - separatorBuilder: (context, index) => const SizedBox(height: 1), - itemBuilder: (context, index) => const _ChannelListItemSkeleton(), - ), - ); - } -} - -class _ChannelListItemSkeleton extends StatelessWidget { - const _ChannelListItemSkeleton(); - - @override - Widget build(BuildContext context) { - return Padding( - padding: EdgeInsets.all(context.streamSpacing.sm), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const _SkeletonBox( - width: 48, - height: 48, - shape: BoxShape.circle, - ), - SizedBox(width: context.streamSpacing.sm), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - const Expanded( - child: _SkeletonBox(width: double.infinity, height: 12), - ), - SizedBox(width: context.streamSpacing.sm), - _SkeletonBox( - width: 48, - height: 16, - borderRadius: BorderRadius.circular(6), - ), - ], - ), - SizedBox(height: context.streamSpacing.xs), - Row( - children: [ - const Expanded( - child: _SkeletonBox(width: double.infinity, height: 20), - ), - SizedBox(width: context.streamSpacing.sm), - const SizedBox(width: 48), - ], - ), - SizedBox(height: context.streamSpacing.xs), - Row( - children: [ - const _SkeletonBox( - width: 24, - height: 24, - shape: BoxShape.circle, - ), - SizedBox(width: context.streamSpacing.xs), - _SkeletonBox( - width: 64, - height: 12, - borderRadius: BorderRadius.circular(6), - ), - SizedBox(width: context.streamSpacing.xs), - _SkeletonBox( - width: 64, - height: 12, - borderRadius: BorderRadius.circular(6), - ), - ], - ), - ], - ), - ), - ], - ), - ); - } -} - -class _SkeletonBox extends StatelessWidget { - const _SkeletonBox({ - required this.width, - required this.height, - this.shape = BoxShape.rectangle, - this.borderRadius, - }); - - final double width; - final double height; - final BoxShape shape; - final BorderRadius? borderRadius; - - @override - Widget build(BuildContext context) { - return Container( - width: width, - height: height, - decoration: BoxDecoration( - color: Colors.white, - shape: shape, - borderRadius: shape == BoxShape.rectangle ? (borderRadius ?? BorderRadius.circular(8)) : null, - ), - ); - } -} diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart new file mode 100644 index 000000000..abc6271aa --- /dev/null +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:stream_core_flutter/stream_core_flutter.dart'; + +/// A shimmer loading placeholder for the channel list view. +/// +/// Displays a skeleton UI with shimmer animation using +/// [StreamSkeletonLoading] and [StreamSkeletonBox] from the core package. +class StreamChannelListSkeletonLoading extends StatelessWidget { + /// Creates a new instance of [StreamChannelListSkeletonLoading]. + const StreamChannelListSkeletonLoading({ + super.key, + this.itemCount = 7, + }); + + /// The number of skeleton items to display. + final int itemCount; + + @override + Widget build(BuildContext context) { + return StreamSkeletonLoading( + child: ListView.separated( + physics: const NeverScrollableScrollPhysics(), + itemCount: itemCount, + separatorBuilder: (context, index) => const SizedBox(height: 1), + itemBuilder: (context, index) => const _StreamChannelListItemSkeleton(), + ), + ); + } +} + +class _StreamChannelListItemSkeleton extends StatelessWidget { + const _StreamChannelListItemSkeleton(); + + @override + Widget build(BuildContext context) { + final spacing = context.streamSpacing; + + return Padding( + padding: EdgeInsets.all(spacing.md), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + spacing: spacing.md, + children: [ + const StreamSkeletonBox.circular(radius: 24), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: spacing.xs, + children: [ + Row( + children: [ + Expanded( + child: StreamSkeletonBox( + width: double.infinity, + height: 16, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ), + SizedBox(width: spacing.md), + StreamSkeletonBox( + width: 48, + height: 16, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ], + ), + Row( + children: [ + Expanded( + flex: 3, + child: StreamSkeletonBox( + width: double.infinity, + height: 16, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ), + const Spacer( + flex: 2, + ), + ], + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart index e23e68544..06af4ca41 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dart @@ -1,6 +1,6 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/scroll_view/channel_scroll_view/stream_channel_list_loading_view.dart'; +import 'package:stream_chat_flutter/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_error_widget.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_error.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_indicator.dart'; @@ -347,7 +347,7 @@ class StreamChannelListView extends StatelessWidget { child: StreamScrollViewLoadMoreIndicator(), ), ), - loadingBuilder: (context) => loadingBuilder?.call(context) ?? const StreamChannelListLoadingView(), + loadingBuilder: (context) => loadingBuilder?.call(context) ?? const StreamChannelListSkeletonLoading(), errorBuilder: (context, error) => errorBuilder?.call(context, error) ?? Center( diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_skeleton_loading.dart b/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_skeleton_loading.dart new file mode 100644 index 000000000..6a92bc91e --- /dev/null +++ b/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_skeleton_loading.dart @@ -0,0 +1,107 @@ +import 'package:flutter/material.dart'; +import 'package:stream_core_flutter/stream_core_flutter.dart'; + +/// A shimmer loading placeholder for the thread list view. +/// +/// Displays a skeleton UI with shimmer animation using +/// [StreamSkeletonLoading] and [StreamSkeletonBox] from the core package. +class StreamThreadListSkeletonLoading extends StatelessWidget { + /// Creates a new instance of [StreamThreadListSkeletonLoading]. + const StreamThreadListSkeletonLoading({ + super.key, + this.itemCount = 6, + }); + + /// The number of skeleton items to display. + final int itemCount; + + @override + Widget build(BuildContext context) { + return StreamSkeletonLoading( + child: ListView.separated( + physics: const NeverScrollableScrollPhysics(), + itemCount: itemCount, + separatorBuilder: (context, index) => const SizedBox(height: 1), + itemBuilder: (context, index) => const _StreamThreadListItemSkeleton(), + ), + ); + } +} + +class _StreamThreadListItemSkeleton extends StatelessWidget { + const _StreamThreadListItemSkeleton(); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(context.streamSpacing.sm), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const StreamSkeletonBox.circular(radius: 24), + SizedBox(width: context.streamSpacing.sm), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + flex: 2, + child: StreamSkeletonBox( + width: double.infinity, + height: 12, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ), + SizedBox(width: context.streamSpacing.sm), + const Spacer( + flex: 2, + ), + StreamSkeletonBox( + width: 48, + height: 16, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ], + ), + SizedBox(height: context.streamSpacing.xs), + Row( + children: [ + Expanded( + child: StreamSkeletonBox( + width: double.infinity, + height: 20, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ), + SizedBox(width: context.streamSpacing.sm), + const SizedBox(width: 48), + ], + ), + SizedBox(height: context.streamSpacing.xs), + Row( + children: [ + const StreamSkeletonBox.circular(radius: 12), + SizedBox(width: context.streamSpacing.xs), + StreamSkeletonBox( + width: 64, + height: 12, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + SizedBox(width: context.streamSpacing.xs), + StreamSkeletonBox( + width: 64, + height: 12, + borderRadius: BorderRadius.all(context.streamRadius.max), + ), + ], + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_view.dart b/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_view.dart index 6fc1fea02..62bf3521d 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_view.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_error_widget.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_error.dart'; import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_load_more_indicator.dart'; -import 'package:stream_chat_flutter/src/scroll_view/stream_scroll_view_loading_widget.dart'; +import 'package:stream_chat_flutter/src/scroll_view/thread_scroll_view/stream_thread_list_skeleton_loading.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Default separator builder for [StreamThreadListView]. @@ -342,7 +342,7 @@ class StreamThreadListView extends StatelessWidget { loadingBuilder: (context) => loadingBuilder?.call(context) ?? const Center( - child: StreamScrollViewLoadingWidget(), + child: StreamThreadListSkeletonLoading(), ), errorBuilder: (context, error) => errorBuilder?.call(context, error) ?? diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 779f8109e..5aa2ca6de 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -62,7 +62,7 @@ dependencies: stream_core_flutter: git: url: https://github.com/GetStream/stream-core-flutter.git - ref: 8057a775c2ed764dbd5cbabd2dd60d3cd68d2f08 + ref: 226389ad533276d8daf2e03b90ed4cb3bfeecde3 path: packages/stream_core_flutter svg_icon_widget: ^0.0.1 synchronized: ^3.1.0+1 From ad5e843b17226f65c3d53aff249ec5cd4a8c96a0 Mon Sep 17 00:00:00 2001 From: Brazol Date: Fri, 20 Mar 2026 08:18:13 +0100 Subject: [PATCH 4/5] fix --- .../stream_channel_list_skeleton_loading.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart index abc6271aa..005f4d3fe 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_skeleton_loading.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_core_flutter/stream_core_flutter.dart'; /// A shimmer loading placeholder for the channel list view. From b5b58757af898c48c27a1824007236f3f1765851 Mon Sep 17 00:00:00 2001 From: Brazol Date: Fri, 20 Mar 2026 08:51:58 +0100 Subject: [PATCH 5/5] fix --- .../lib/src/message_list_view/message_list_view.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart index 2dc03a561..c5ff97c05 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart @@ -8,6 +8,7 @@ import 'package:stream_chat_flutter/scrollable_positioned_list/scrollable_positi import 'package:stream_chat_flutter/src/message_list_view/floating_date_divider.dart'; import 'package:stream_chat_flutter/src/message_list_view/loading_indicator.dart'; import 'package:stream_chat_flutter/src/message_list_view/mlv_utils.dart'; +import 'package:stream_chat_flutter/src/message_list_view/stream_message_list_skeleton_loading.dart'; import 'package:stream_chat_flutter/src/message_list_view/thread_separator.dart'; import 'package:stream_chat_flutter/src/message_list_view/unread_messages_separator.dart'; import 'package:stream_chat_flutter/src/message_widget/ephemeral_message.dart';