From ab8045e6bf4f803d0ca456abdcb76b973bcfb716 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Thu, 13 Feb 2025 14:25:48 +0100 Subject: [PATCH] feat: add chatTitle to baseScreenBuilder --- CHANGELOG.md | 1 + .../lib/src/config/chat_builders.dart | 2 ++ .../chat_detail/chat_detail_screen.dart | 1 + .../lib/src/screens/chat_profile_screen.dart | 28 ++++++++----------- .../lib/src/screens/chat_screen.dart | 2 ++ .../src/screens/creation/new_chat_screen.dart | 1 + .../creation/new_group_chat_overview.dart | 1 + .../creation/new_group_chat_screen.dart | 1 + 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e18d79..40e52f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Added flutter_hooks as a dependency for easier state management - Added FlutterChatDetailNavigatorUserstory that can be used to start the userstory from the chat detail screen without having the chat overview screen - Changed the ChatDetailScreen to use the chatId instead of the ChatModel, the screen will now fetch the chat from the ChatService +- Changed baseScreenBuilder to include a chatTitle that can be used to show provide the title logic to apps that use the baseScreenBuilder ## 4.0.0 - Move to the new user story architecture diff --git a/packages/flutter_chat/lib/src/config/chat_builders.dart b/packages/flutter_chat/lib/src/config/chat_builders.dart index bba8f23..5981e62 100644 --- a/packages/flutter_chat/lib/src/config/chat_builders.dart +++ b/packages/flutter_chat/lib/src/config/chat_builders.dart @@ -101,10 +101,12 @@ typedef TextInputBuilder = Widget Function( ); /// The base screen builder +/// [title] is the title of the screen and can be null while loading typedef BaseScreenBuilder = Widget Function( BuildContext context, ScreenType screenType, PreferredSizeWidget appBar, + String? title, Widget body, ); diff --git a/packages/flutter_chat/lib/src/screens/chat_detail/chat_detail_screen.dart b/packages/flutter_chat/lib/src/screens/chat_detail/chat_detail_screen.dart index 06fefdf..dedf564 100644 --- a/packages/flutter_chat/lib/src/screens/chat_detail/chat_detail_screen.dart +++ b/packages/flutter_chat/lib/src/screens/chat_detail/chat_detail_screen.dart @@ -120,6 +120,7 @@ class ChatDetailScreen extends HookWidget { context, mapScreenType, appBar, + chatTitle.value, body, ); } diff --git a/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart b/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart index a651b82..f6b8f80 100644 --- a/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart +++ b/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart @@ -44,10 +44,13 @@ class ChatProfileScreen extends HookWidget { return () => chatScope.popHandler.remove(onExit); }); - var appBar = _AppBar( - user: userModel, - chat: chatModel, - ); + var chatTitle = userModel != null + ? "${userModel!.fullname}" + : chatModel != null + ? chatModel?.chatName ?? options.translations.groupNameEmpty + : ""; + + var appBar = _AppBar(title: chatTitle); var body = _Body( user: userModel, @@ -67,6 +70,7 @@ class ChatProfileScreen extends HookWidget { context, mapScreenType, appBar, + chatTitle, body, ); } @@ -74,27 +78,17 @@ class ChatProfileScreen extends HookWidget { class _AppBar extends StatelessWidget implements PreferredSizeWidget { const _AppBar({ - required this.user, - required this.chat, + required this.title, }); - final UserModel? user; - final ChatModel? chat; + final String title; @override Widget build(BuildContext context) { - var chatScope = ChatScope.of(context); - var options = chatScope.options; var theme = Theme.of(context); return AppBar( iconTheme: theme.appBarTheme.iconTheme, - title: Text( - user != null - ? "${user!.fullname}" - : chat != null - ? chat?.chatName ?? options.translations.groupNameEmpty - : "", - ), + title: Text(title), ); } diff --git a/packages/flutter_chat/lib/src/screens/chat_screen.dart b/packages/flutter_chat/lib/src/screens/chat_screen.dart index 1a346b0..0e75708 100644 --- a/packages/flutter_chat/lib/src/screens/chat_screen.dart +++ b/packages/flutter_chat/lib/src/screens/chat_screen.dart @@ -35,6 +35,7 @@ class ChatScreen extends HookWidget { Widget build(BuildContext context) { var chatScope = ChatScope.of(context); var options = chatScope.options; + var translations = options.translations; useEffect(() { if (onExit == null) return null; @@ -57,6 +58,7 @@ class ChatScreen extends HookWidget { context, mapScreenType, const _AppBar(), + translations.chatsTitle, _Body( onPressChat: onPressChat, onPressStartChat: onPressStartChat, diff --git a/packages/flutter_chat/lib/src/screens/creation/new_chat_screen.dart b/packages/flutter_chat/lib/src/screens/creation/new_chat_screen.dart index 3d77dcf..42bed74 100644 --- a/packages/flutter_chat/lib/src/screens/creation/new_chat_screen.dart +++ b/packages/flutter_chat/lib/src/screens/creation/new_chat_screen.dart @@ -100,6 +100,7 @@ class _NewChatScreenState extends State { }, focusNode: _textFieldFocusNode, ), + options.translations.newChatTitle, _Body( isSearching: _isSearching, onPressCreateGroupChat: widget.onPressCreateGroupChat, diff --git a/packages/flutter_chat/lib/src/screens/creation/new_group_chat_overview.dart b/packages/flutter_chat/lib/src/screens/creation/new_group_chat_overview.dart index 2203a55..90cac79 100644 --- a/packages/flutter_chat/lib/src/screens/creation/new_group_chat_overview.dart +++ b/packages/flutter_chat/lib/src/screens/creation/new_group_chat_overview.dart @@ -58,6 +58,7 @@ class NewGroupChatOverview extends HookWidget { context, mapScreenType, const _AppBar(), + options.translations.newGroupChatTitle, _Body( users: users, onComplete: onComplete, diff --git a/packages/flutter_chat/lib/src/screens/creation/new_group_chat_screen.dart b/packages/flutter_chat/lib/src/screens/creation/new_group_chat_screen.dart index 3a892e0..fc0abe0 100644 --- a/packages/flutter_chat/lib/src/screens/creation/new_group_chat_screen.dart +++ b/packages/flutter_chat/lib/src/screens/creation/new_group_chat_screen.dart @@ -98,6 +98,7 @@ class _NewGroupChatScreenState extends State { }, focusNode: _textFieldFocusNode, ), + options.translations.newGroupChatTitle, _Body( onSelectedUser: handleUserTap, selectedUsers: selectedUsers,