From 5ec4cf25779897519193dab8dff67dd27cc40134 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Wed, 12 Feb 2025 11:53:46 +0100 Subject: [PATCH] feat: use ChatScope for userstory screens to get service, options and userId --- packages/flutter_chat/lib/src/routes.dart | 12 ------- .../lib/src/screens/chat_profile_screen.dart | 15 ++------ .../lib/src/screens/chat_screen.dart | 30 +++++++--------- .../src/screens/creation/new_chat_screen.dart | 35 +++++++------------ .../creation/new_group_chat_overview.dart | 5 +-- .../creation/new_group_chat_screen.dart | 35 +++++++------------ 6 files changed, 42 insertions(+), 90 deletions(-) diff --git a/packages/flutter_chat/lib/src/routes.dart b/packages/flutter_chat/lib/src/routes.dart index 71e2fbf..33d21a4 100644 --- a/packages/flutter_chat/lib/src/routes.dart +++ b/packages/flutter_chat/lib/src/routes.dart @@ -38,8 +38,6 @@ class NavigatorWrapper extends StatelessWidget { /// The chat overview screen Widget chatScreen(BuildContext context) => ChatScreen( - chatService: chatService, - chatOptions: chatOptions, onExit: onExit, onPressChat: (chat) async => _routeToScreen(context, chatDetailScreen(context, chat)), @@ -105,9 +103,6 @@ class NavigatorWrapper extends StatelessWidget { ChatModel? chat, ) => ChatProfileScreen( - service: chatService, - options: chatOptions, - userId: userId, userModel: user, chatModel: chat, onExit: () => Navigator.of(context).pop(), @@ -127,9 +122,6 @@ class NavigatorWrapper extends StatelessWidget { /// The new chat screen Widget newChatScreen(BuildContext context) => NewChatScreen( - userId: userId, - chatService: chatService, - chatOptions: chatOptions, onExit: () => Navigator.of(context).pop(), onPressCreateGroupChat: () async => _routeToScreen(context, newGroupChatScreen(context)), @@ -146,9 +138,6 @@ class NavigatorWrapper extends StatelessWidget { /// The new group chat screen Widget newGroupChatScreen(BuildContext context) => NewGroupChatScreen( - userId: userId, - chatService: chatService, - chatOptions: chatOptions, onExit: () => Navigator.of(context).pop(), onContinue: (users) async => _replaceCurrentScreen( context, @@ -159,7 +148,6 @@ class NavigatorWrapper extends StatelessWidget { /// The new group chat overview screen Widget newGroupChatOverview(BuildContext context, List users) => NewGroupChatOverview( - options: chatOptions, users: users, onExit: () => Navigator.of(context).pop(), onComplete: (users, title, description, image) async { 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 600d418..eaaf7c4 100644 --- a/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart +++ b/packages/flutter_chat/lib/src/screens/chat_profile_screen.dart @@ -12,23 +12,14 @@ import "package:flutter_profile/flutter_profile.dart"; class ChatProfileScreen extends HookWidget { /// Constructs a [ChatProfileScreen] const ChatProfileScreen({ - required this.options, required this.onExit, - required this.userId, required this.userModel, - required this.service, required this.chatModel, required this.onTapUser, required this.onPressStartChat, super.key, }); - /// The chat options - final ChatOptions options; - - /// The user ID of the person currently looking at the chat - final String userId; - /// The user model of the persons profile to be viewed final UserModel? userModel; @@ -38,9 +29,6 @@ class ChatProfileScreen extends HookWidget { /// Callback function triggered when a user is tapped final Function(String)? onTapUser; - /// instance of a chat service - final ChatService service; - /// Callback function triggered when the start chat button is pressed final Function(String)? onPressStartChat; @@ -50,6 +38,9 @@ class ChatProfileScreen extends HookWidget { @override Widget build(BuildContext context) { var chatScope = ChatScope.of(context); + var options = chatScope.options; + var service = chatScope.service; + var userId = chatScope.userId; useEffect(() { chatScope.popHandler.add(onExit); diff --git a/packages/flutter_chat/lib/src/screens/chat_screen.dart b/packages/flutter_chat/lib/src/screens/chat_screen.dart index 08635f7..b01fd8e 100644 --- a/packages/flutter_chat/lib/src/screens/chat_screen.dart +++ b/packages/flutter_chat/lib/src/screens/chat_screen.dart @@ -13,8 +13,6 @@ import "package:flutter_profile/flutter_profile.dart"; class ChatScreen extends HookWidget { /// Constructs a [ChatScreen] const ChatScreen({ - required this.chatService, - required this.chatOptions, required this.onPressChat, required this.onDeleteChat, required this.onExit, @@ -22,12 +20,6 @@ class ChatScreen extends HookWidget { super.key, }); - /// The chat service - final ChatService chatService; - - /// The chat options - final ChatOptions chatOptions; - /// Callback function for starting a chat. final Function()? onPressStartChat; @@ -43,6 +35,8 @@ class ChatScreen extends HookWidget { @override Widget build(BuildContext context) { var chatScope = ChatScope.of(context); + var options = chatScope.options; + var service = chatScope.service; useEffect(() { if (onExit == null) return null; @@ -50,15 +44,15 @@ class ChatScreen extends HookWidget { return () => chatScope.popHandler.remove(onExit!); }); - if (chatOptions.builders.baseScreenBuilder == null) { + if (options.builders.baseScreenBuilder == null) { return Scaffold( appBar: _AppBar( - chatOptions: chatOptions, - chatService: chatService, + chatOptions: options, + chatService: service, ), body: _Body( - chatOptions: chatOptions, - chatService: chatService, + chatOptions: options, + chatService: service, onPressChat: onPressChat, onPressStartChat: onPressStartChat, onDeleteChat: onDeleteChat, @@ -66,16 +60,16 @@ class ChatScreen extends HookWidget { ); } - return chatOptions.builders.baseScreenBuilder!.call( + return options.builders.baseScreenBuilder!.call( context, mapScreenType, _AppBar( - chatOptions: chatOptions, - chatService: chatService, + chatOptions: options, + chatService: service, ), _Body( - chatOptions: chatOptions, - chatService: chatService, + chatOptions: options, + chatService: service, onPressChat: onPressChat, onPressStartChat: onPressStartChat, onDeleteChat: onDeleteChat, 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 53f0ec3..ea4e014 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 @@ -13,24 +13,12 @@ import "package:flutter_hooks/flutter_hooks.dart"; class NewChatScreen extends StatefulHookWidget { /// Constructs a [NewChatScreen] const NewChatScreen({ - required this.userId, required this.onExit, - required this.chatService, - required this.chatOptions, required this.onPressCreateGroupChat, required this.onPressCreateChat, super.key, }); - /// The user ID of the person currently looking at the chat - final String userId; - - /// The chat service associated with the widget. - final ChatService chatService; - - /// The chat options - final ChatOptions chatOptions; - /// Callback function triggered when the create group chat button is pressed final VoidCallback onPressCreateGroupChat; @@ -52,16 +40,19 @@ class _NewChatScreenState extends State { @override Widget build(BuildContext context) { var chatScope = ChatScope.of(context); + var options = chatScope.options; + var service = chatScope.service; + var userId = chatScope.userId; useEffect(() { chatScope.popHandler.add(widget.onExit); return () => chatScope.popHandler.remove(widget.onExit); }); - if (widget.chatOptions.builders.baseScreenBuilder == null) { + if (options.builders.baseScreenBuilder == null) { return Scaffold( appBar: _AppBar( - chatOptions: widget.chatOptions, + chatOptions: options, isSearching: _isSearching, onSearch: (query) { setState(() { @@ -82,22 +73,22 @@ class _NewChatScreenState extends State { focusNode: _textFieldFocusNode, ), body: _Body( - chatOptions: widget.chatOptions, - chatService: widget.chatService, + chatOptions: options, + chatService: service, isSearching: _isSearching, onPressCreateGroupChat: widget.onPressCreateGroupChat, onPressCreateChat: widget.onPressCreateChat, - userId: widget.userId, + userId: userId, query: query, ), ); } - return widget.chatOptions.builders.baseScreenBuilder!.call( + return options.builders.baseScreenBuilder!.call( context, widget.mapScreenType, _AppBar( - chatOptions: widget.chatOptions, + chatOptions: options, isSearching: _isSearching, onSearch: (query) { setState(() { @@ -118,12 +109,12 @@ class _NewChatScreenState extends State { focusNode: _textFieldFocusNode, ), _Body( - chatOptions: widget.chatOptions, - chatService: widget.chatService, + chatOptions: options, + chatService: service, isSearching: _isSearching, onPressCreateGroupChat: widget.onPressCreateGroupChat, onPressCreateChat: widget.onPressCreateChat, - userId: widget.userId, + userId: userId, query: query, ), ); 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 60a60d1..cfec82b 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 @@ -15,16 +15,12 @@ import "package:flutter_profile/flutter_profile.dart"; class NewGroupChatOverview extends HookWidget { /// Constructs a [NewGroupChatOverview] const NewGroupChatOverview({ - required this.options, required this.onExit, required this.users, required this.onComplete, super.key, }); - /// The chat options - final ChatOptions options; - /// The users to be added to the group chat final List users; @@ -42,6 +38,7 @@ class NewGroupChatOverview extends HookWidget { @override Widget build(BuildContext context) { var chatScope = ChatScope.of(context); + var options = chatScope.options; useEffect(() { chatScope.popHandler.add(onExit); 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 e757e4b..ab66272 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 @@ -13,23 +13,11 @@ import "package:flutter_hooks/flutter_hooks.dart"; class NewGroupChatScreen extends StatefulHookWidget { /// Constructs a [NewGroupChatScreen] const NewGroupChatScreen({ - required this.userId, required this.onExit, - required this.chatService, - required this.chatOptions, required this.onContinue, super.key, }); - /// The user ID of the person currently looking at the chat - final String userId; - - /// The chat service associated with the widget. - final ChatService chatService; - - /// The chat options - final ChatOptions chatOptions; - /// Callback for when the user wants to navigate back final VoidCallback onExit; @@ -50,15 +38,18 @@ class _NewGroupChatScreenState extends State { @override Widget build(BuildContext context) { var chatScope = ChatScope.of(context); + var chatOptions = chatScope.options; + var chatService = chatScope.service; + var userId = chatScope.userId; useEffect(() { chatScope.popHandler.add(widget.onExit); return () => chatScope.popHandler.remove(widget.onExit); }); - if (widget.chatOptions.builders.baseScreenBuilder == null) { + if (chatOptions.builders.baseScreenBuilder == null) { return Scaffold( appBar: _AppBar( - chatOptions: widget.chatOptions, + chatOptions: chatOptions, isSearching: _isSearching, onSearch: (query) { setState(() { @@ -82,20 +73,20 @@ class _NewGroupChatScreenState extends State { onSelectedUser: handleUserTap, selectedUsers: selectedUsers, onPressGroupChatOverview: widget.onContinue, - chatOptions: widget.chatOptions, - chatService: widget.chatService, + chatOptions: chatOptions, + chatService: chatService, isSearching: _isSearching, - userId: widget.userId, + userId: userId, query: query, ), ); } - return widget.chatOptions.builders.baseScreenBuilder!.call( + return chatOptions.builders.baseScreenBuilder!.call( context, widget.mapScreenType, _AppBar( - chatOptions: widget.chatOptions, + chatOptions: chatOptions, isSearching: _isSearching, onSearch: (query) { setState(() { @@ -119,10 +110,10 @@ class _NewGroupChatScreenState extends State { onSelectedUser: handleUserTap, selectedUsers: selectedUsers, onPressGroupChatOverview: widget.onContinue, - chatOptions: widget.chatOptions, - chatService: widget.chatService, + chatOptions: chatOptions, + chatService: chatService, isSearching: _isSearching, - userId: widget.userId, + userId: userId, query: query, ), );