From 0c2804336510d08cea7ae3f8c3eb5f938d6dbfa9 Mon Sep 17 00:00:00 2001 From: S-ecki <75510543+S-ecki@users.noreply.github.com> Date: Tue, 1 Mar 2022 17:27:03 +0100 Subject: [PATCH 01/11] add centerTitle and elevation to ChannelHeader --- .../stream_chat_flutter/lib/src/channel_header.dart | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 954aa758..df615cfd 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -61,9 +61,11 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { this.showConnectionStateTile = false, this.title, this.subtitle, + this.centerTitle, this.leading, this.actions, this.backgroundColor, + this.elevation, }) : preferredSize = const Size.fromHeight(kToolbarHeight), super(key: key); @@ -92,6 +94,9 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { /// Subtitle widget final Widget? subtitle; + // Whether the title should be centered + final bool? centerTitle; + /// Leading widget final Widget? leading; @@ -102,6 +107,9 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { /// The background color for this [ChannelHeader]. final Color? backgroundColor; + /// The elevation for this [ChannelHeader]. + final double? elevation; + @override Widget build(BuildContext context) { final channel = StreamChannel.of(context).channel; @@ -144,7 +152,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: 1, + elevation: elevation ?? 1, leading: leadingWidget, backgroundColor: backgroundColor ?? channelHeaderTheme.color, actions: actions ?? @@ -162,7 +170,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { ), ), ], - centerTitle: true, + centerTitle: centerTitle ?? true, title: InkWell( onTap: onTitleTap, child: SizedBox( From 6ffaca6699d55b41d00b9530c3f47249232bb273 Mon Sep 17 00:00:00 2001 From: S-ecki <75510543+S-ecki@users.noreply.github.com> Date: Tue, 1 Mar 2022 17:28:28 +0100 Subject: [PATCH 02/11] Update CHANGELOG.md --- packages/stream_chat_flutter/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 4bc77514..b798b839 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -6,6 +6,11 @@ - [[#805]](https://github.com/GetStream/stream-chat-flutter/issues/805) Updated chewie dependency version to 1.3.0 - Fix `showScrollToBottom` in `MessageListView` not respecting false value. +✅ Added + +- `centerTitle` and `elevation` properties to `ChannelHeader`. + + ## 3.4.0 - Updated `stream_chat_flutter_core` dependency to [`3.4.0`](https://pub.dev/packages/stream_chat_flutter_core/changelog). From 43d50a6b94d6a016869dc69a3d60811b49c1b488 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 7 Mar 2022 10:55:36 +0100 Subject: [PATCH 03/11] fix analysis --- packages/stream_chat_flutter/lib/src/channel_header.dart | 2 +- packages/stream_chat_flutter/lib/src/message_list_view.dart | 1 + .../lib/src/stream_chat_localizations.dart | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index df615cfd..e15e7c62 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -94,7 +94,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { /// Subtitle widget final Widget? subtitle; - // Whether the title should be centered + /// Whether the title should be centered final bool? centerTitle; /// Leading widget diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index c6e269b9..02b258db 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -529,6 +529,7 @@ class _MessageListViewState extends State { return ((index + 2) * 2) - 1; } } + return null; }, // Item Count -> 8 (1 parent, 2 header+footer, 2 top+bottom, 3 messages) diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart index 0c7ce68e..16838cf5 100644 --- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart +++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations.dart @@ -74,6 +74,8 @@ GlobalStreamChatLocalizations? getStreamChatTranslation(Locale locale) { return const StreamChatLocalizationsKo(); case 'pt': return const StreamChatLocalizationsPt(); + default: + return null; } } From b8307503c7c8a5449dab8ded20a3ec11a9b1c2a7 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 7 Mar 2022 11:09:20 +0100 Subject: [PATCH 04/11] chore(ui): update changelog --- packages/stream_chat_flutter/CHANGELOG.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 8adeab5f..0a76ca1e 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,9 @@ +## Upcoming + +✅ Added + +- `centerTitle` and `elevation` properties to `ChannelHeader`. + ## 3.5.0 🐞 Fixed @@ -7,11 +13,6 @@ - Fix `showScrollToBottom` in `MessageListView` not respecting false value. - Fix default `Channel` route not opening from `ChannelListView` when `ChannelAvatar` is tapped -✅ Added - -- `centerTitle` and `elevation` properties to `ChannelHeader`. - - ## 3.4.0 - Updated `stream_chat_flutter_core` dependency to [`3.4.0`](https://pub.dev/packages/stream_chat_flutter_core/changelog). From 00d29489300ca3fbdb9f3c1128a8e4662d7069f7 Mon Sep 17 00:00:00 2001 From: S-ecki <75510543+S-ecki@users.noreply.github.com> Date: Wed, 9 Mar 2022 17:10:49 +0100 Subject: [PATCH 05/11] feat: align channel_header center title with AppBar --- .../lib/src/channel_header.dart | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index e15e7c62..6cb26434 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -170,7 +170,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { ), ), ], - centerTitle: centerTitle ?? true, + centerTitle: _getEffectiveCenterTitle(theme), title: InkWell( onTap: onTitleTap, child: SizedBox( @@ -202,4 +202,24 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; + + /// Returns the effective center title for the current theme and platform. + /// + /// This code is aligned with the [AppBar]'s [AppBar.centerTitle]. + bool _getEffectiveCenterTitle(ThemeData theme) { + if (centerTitle != null) return centerTitle!; + if (theme.appBarTheme.centerTitle != null) { + return theme.appBarTheme.centerTitle!; + } + switch (theme.platform) { + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return actions == null || actions!.length < 2; + } + } } From a7eaee29d66fdb75ade8d7e1fe6a8611be2eb60b Mon Sep 17 00:00:00 2001 From: S-ecki <75510543+S-ecki@users.noreply.github.com> Date: Wed, 9 Mar 2022 17:18:09 +0100 Subject: [PATCH 06/11] feat: add elevation and centerTitle to ThreadHeader and ChannelListHeader --- .../lib/src/channel_header.dart | 22 +------------------ .../lib/src/channel_list_header.dart | 12 ++++++++-- .../lib/src/thread_header.dart | 12 ++++++++-- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 6cb26434..0731a933 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -170,7 +170,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { ), ), ], - centerTitle: _getEffectiveCenterTitle(theme), + centerTitle: centerTitle, title: InkWell( onTap: onTitleTap, child: SizedBox( @@ -202,24 +202,4 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; - - /// Returns the effective center title for the current theme and platform. - /// - /// This code is aligned with the [AppBar]'s [AppBar.centerTitle]. - bool _getEffectiveCenterTitle(ThemeData theme) { - if (centerTitle != null) return centerTitle!; - if (theme.appBarTheme.centerTitle != null) { - return theme.appBarTheme.centerTitle!; - } - switch (theme.platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - case TargetPlatform.linux: - case TargetPlatform.windows: - return false; - case TargetPlatform.iOS: - case TargetPlatform.macOS: - return actions == null || actions!.length < 2; - } - } } diff --git a/packages/stream_chat_flutter/lib/src/channel_list_header.dart b/packages/stream_chat_flutter/lib/src/channel_list_header.dart index 6c54ad89..ba31fc16 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_header.dart @@ -56,9 +56,11 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { this.showConnectionStateTile = false, this.preNavigationCallback, this.subtitle, + this.centerTitle, this.leading, this.actions, this.backgroundColor, + this.elevation, }) : super(key: key); /// Pass this if you don't have a [StreamChatClient] in your widget tree. @@ -83,6 +85,9 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { /// Subtitle widget final Widget? subtitle; + /// Whether the title should be centered + final bool? centerTitle; + /// Leading widget /// By default it shows the logged in user avatar final Widget? leading; @@ -94,6 +99,9 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { /// The background color for this [ChannelListHeader]. final Color? backgroundColor; + /// The elevation for this [ChannelListHeader]. + final double? elevation; + @override Widget build(BuildContext context) { final _client = client ?? StreamChat.of(context).client; @@ -128,10 +136,10 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: 1, + elevation: elevation ?? 1, backgroundColor: backgroundColor ?? channelListHeaderThemeData.color, - centerTitle: true, + centerTitle: centerTitle, leading: leading ?? Center( child: user != null diff --git a/packages/stream_chat_flutter/lib/src/thread_header.dart b/packages/stream_chat_flutter/lib/src/thread_header.dart index aae1d8f9..d92c9305 100644 --- a/packages/stream_chat_flutter/lib/src/thread_header.dart +++ b/packages/stream_chat_flutter/lib/src/thread_header.dart @@ -65,11 +65,13 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { this.onBackPressed, this.title, this.subtitle, + this.centerTitle, this.leading, this.actions, this.onTitleTap, this.showTypingIndicator = true, this.backgroundColor, + this.elevation, }) : preferredSize = const Size.fromHeight(kToolbarHeight), super(key: key); @@ -92,6 +94,9 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { /// Subtitle widget final Widget? subtitle; + /// Whether the title should be centered + final bool? centerTitle; + /// Leading widget final Widget? leading; @@ -105,6 +110,9 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { /// The background color of this [ThreadHeader]. final Color? backgroundColor; + /// The elevation for this [ThreadHeader]. + final double? elevation; + @override Widget build(BuildContext context) { final channelHeaderTheme = ChannelHeaderTheme.of(context); @@ -134,7 +142,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: 1, + elevation: elevation ?? 1, leading: leading ?? (showBackButton ? StreamBackButton( @@ -144,7 +152,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { ) : const SizedBox()), backgroundColor: backgroundColor ?? channelHeaderTheme.color, - centerTitle: true, + centerTitle: centerTitle, actions: actions, title: InkWell( onTap: onTitleTap, From 9c2c494797cf2503f22da5d28e0806b258344eb8 Mon Sep 17 00:00:00 2001 From: S-ecki <75510543+S-ecki@users.noreply.github.com> Date: Wed, 9 Mar 2022 17:20:19 +0100 Subject: [PATCH 07/11] chore: edit changelog --- packages/stream_chat_flutter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 0a76ca1e..7d978867 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -2,7 +2,7 @@ ✅ Added -- `centerTitle` and `elevation` properties to `ChannelHeader`. +- `centerTitle` and `elevation` properties to `ChannelHeader`, `ThreadHeader` and `ChannelListHeader`. ## 3.5.0 From cfad4bfc87399ff57cbb7c41990ac2888ba7b7f0 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 27 Apr 2022 10:44:43 +0200 Subject: [PATCH 08/11] fix(ui): fix centerTitle for ChannelHeader --- .../lib/src/channel_header.dart | 22 ++++++++++++++++++- .../lib/src/typing_indicator.dart | 6 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 0731a933..d4558fd6 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -112,6 +112,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { + final effectiveCenterTitle = _getEffectiveCenterTitle(Theme.of(context)); final channel = StreamChannel.of(context).channel; final channelHeaderTheme = ChannelHeaderTheme.of(context); @@ -175,9 +176,11 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { onTap: onTitleTap, child: SizedBox( height: preferredSize.height, - width: preferredSize.width, child: Column( mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: effectiveCenterTitle + ? CrossAxisAlignment.center + : CrossAxisAlignment.stretch, children: [ title ?? ChannelName( @@ -202,4 +205,21 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; + + bool _getEffectiveCenterTitle(ThemeData theme) { + if (centerTitle != null) return centerTitle!; + if (theme.appBarTheme.centerTitle != null) { + return theme.appBarTheme.centerTitle!; + } + switch (theme.platform) { + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return actions == null || actions!.length < 2; + } + } } diff --git a/packages/stream_chat_flutter/lib/src/typing_indicator.dart b/packages/stream_chat_flutter/lib/src/typing_indicator.dart index d961a8ff..5bf7358a 100644 --- a/packages/stream_chat_flutter/lib/src/typing_indicator.dart +++ b/packages/stream_chat_flutter/lib/src/typing_indicator.dart @@ -47,6 +47,12 @@ class TypingIndicator extends StatelessWidget { .where((element) => element.value.parentId == parentId) .map((e) => e.key)), builder: (context, data) => AnimatedSwitcher( + layoutBuilder: (currentChild, previousChildren) => Stack( + children: [ + ...previousChildren, + if (currentChild != null) currentChild, + ], + ), duration: const Duration(milliseconds: 300), child: data.isNotEmpty ? Padding( From 681cee09f5a8a11afce0213f35ce5996db4e63a2 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 27 Apr 2022 10:51:00 +0200 Subject: [PATCH 09/11] fix(ui): fix centerTitle for ThreadHeader --- .../lib/src/thread_header.dart | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/stream_chat_flutter/lib/src/thread_header.dart b/packages/stream_chat_flutter/lib/src/thread_header.dart index d92c9305..fd6138fe 100644 --- a/packages/stream_chat_flutter/lib/src/thread_header.dart +++ b/packages/stream_chat_flutter/lib/src/thread_header.dart @@ -115,6 +115,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { + final effectiveCenterTitle = _getEffectiveCenterTitle(Theme.of(context)); final channelHeaderTheme = ChannelHeaderTheme.of(context); final defaultSubtitle = subtitle ?? @@ -161,6 +162,9 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { width: 250, child: Column( mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: effectiveCenterTitle + ? CrossAxisAlignment.center + : CrossAxisAlignment.stretch, children: [ title ?? Text( @@ -187,4 +191,21 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; + + bool _getEffectiveCenterTitle(ThemeData theme) { + if (centerTitle != null) return centerTitle!; + if (theme.appBarTheme.centerTitle != null) { + return theme.appBarTheme.centerTitle!; + } + switch (theme.platform) { + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return actions == null || actions!.length < 2; + } + } } From 81c4207b047fd70a67387029db9819fcca0bf0e7 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 27 Apr 2022 11:15:51 +0200 Subject: [PATCH 10/11] fix elevation --- packages/stream_chat_flutter/lib/src/channel_header.dart | 6 +++--- .../stream_chat_flutter/lib/src/channel_list_header.dart | 6 +++--- packages/stream_chat_flutter/lib/src/thread_header.dart | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index d4558fd6..05799fdf 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -65,7 +65,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { this.leading, this.actions, this.backgroundColor, - this.elevation, + this.elevation = 1, }) : preferredSize = const Size.fromHeight(kToolbarHeight), super(key: key); @@ -108,7 +108,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { final Color? backgroundColor; /// The elevation for this [ChannelHeader]. - final double? elevation; + final double elevation; @override Widget build(BuildContext context) { @@ -153,7 +153,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: elevation ?? 1, + elevation: elevation, leading: leadingWidget, backgroundColor: backgroundColor ?? channelHeaderTheme.color, actions: actions ?? diff --git a/packages/stream_chat_flutter/lib/src/channel_list_header.dart b/packages/stream_chat_flutter/lib/src/channel_list_header.dart index ba31fc16..fbe71ff7 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_header.dart @@ -60,7 +60,7 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { this.leading, this.actions, this.backgroundColor, - this.elevation, + this.elevation = 1, }) : super(key: key); /// Pass this if you don't have a [StreamChatClient] in your widget tree. @@ -100,7 +100,7 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { final Color? backgroundColor; /// The elevation for this [ChannelListHeader]. - final double? elevation; + final double elevation; @override Widget build(BuildContext context) { @@ -136,7 +136,7 @@ class ChannelListHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: elevation ?? 1, + elevation: elevation, backgroundColor: backgroundColor ?? channelListHeaderThemeData.color, centerTitle: centerTitle, diff --git a/packages/stream_chat_flutter/lib/src/thread_header.dart b/packages/stream_chat_flutter/lib/src/thread_header.dart index fd6138fe..53aaa37e 100644 --- a/packages/stream_chat_flutter/lib/src/thread_header.dart +++ b/packages/stream_chat_flutter/lib/src/thread_header.dart @@ -71,7 +71,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { this.onTitleTap, this.showTypingIndicator = true, this.backgroundColor, - this.elevation, + this.elevation = 1, }) : preferredSize = const Size.fromHeight(kToolbarHeight), super(key: key); @@ -111,7 +111,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { final Color? backgroundColor; /// The elevation for this [ThreadHeader]. - final double? elevation; + final double elevation; @override Widget build(BuildContext context) { @@ -143,7 +143,7 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { systemOverlayStyle: theme.brightness == Brightness.dark ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark, - elevation: elevation ?? 1, + elevation: elevation, leading: leading ?? (showBackButton ? StreamBackButton( From 622efa7ba27e2eeb25ea079fbfdf99fa01d8ce16 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 27 Apr 2022 11:52:07 +0200 Subject: [PATCH 11/11] extract getEffectiveCenterTitle --- .../lib/src/channel_header.dart | 23 ++++-------------- .../lib/src/thread_header.dart | 24 +++++-------------- .../stream_chat_flutter/lib/src/utils.dart | 22 +++++++++++++++++ 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 05799fdf..2716ea00 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -112,7 +112,11 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { - final effectiveCenterTitle = _getEffectiveCenterTitle(Theme.of(context)); + final effectiveCenterTitle = getEffectiveCenterTitle( + Theme.of(context), + actions: actions, + centerTitle: centerTitle, + ); final channel = StreamChannel.of(context).channel; final channelHeaderTheme = ChannelHeaderTheme.of(context); @@ -205,21 +209,4 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; - - bool _getEffectiveCenterTitle(ThemeData theme) { - if (centerTitle != null) return centerTitle!; - if (theme.appBarTheme.centerTitle != null) { - return theme.appBarTheme.centerTitle!; - } - switch (theme.platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - case TargetPlatform.linux: - case TargetPlatform.windows: - return false; - case TargetPlatform.iOS: - case TargetPlatform.macOS: - return actions == null || actions!.length < 2; - } - } } diff --git a/packages/stream_chat_flutter/lib/src/thread_header.dart b/packages/stream_chat_flutter/lib/src/thread_header.dart index 53aaa37e..199b8a44 100644 --- a/packages/stream_chat_flutter/lib/src/thread_header.dart +++ b/packages/stream_chat_flutter/lib/src/thread_header.dart @@ -115,7 +115,12 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { - final effectiveCenterTitle = _getEffectiveCenterTitle(Theme.of(context)); + final effectiveCenterTitle = getEffectiveCenterTitle( + Theme.of(context), + actions: actions, + centerTitle: centerTitle, + ); + final channelHeaderTheme = ChannelHeaderTheme.of(context); final defaultSubtitle = subtitle ?? @@ -191,21 +196,4 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { @override final Size preferredSize; - - bool _getEffectiveCenterTitle(ThemeData theme) { - if (centerTitle != null) return centerTitle!; - if (theme.appBarTheme.centerTitle != null) { - return theme.appBarTheme.centerTitle!; - } - switch (theme.platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - case TargetPlatform.linux: - case TargetPlatform.windows: - return false; - case TargetPlatform.iOS: - case TargetPlatform.macOS: - return actions == null || actions!.length < 2; - } - } } diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index 3825263d..3d012194 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -17,6 +17,28 @@ Future launchURL(BuildContext context, String url) async { } } +/// Get centerTitle considering a default and platform specific behaviour +bool getEffectiveCenterTitle( + ThemeData theme, { + bool? centerTitle, + List? actions, +}) { + if (centerTitle != null) return centerTitle; + if (theme.appBarTheme.centerTitle != null) { + return theme.appBarTheme.centerTitle!; + } + switch (theme.platform) { + case TargetPlatform.android: + case TargetPlatform.fuchsia: + case TargetPlatform.linux: + case TargetPlatform.windows: + return false; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + return actions == null || actions.length < 2; + } +} + /// Shows confirmation dialog Future showConfirmationDialog( BuildContext context, {