@@ -5,6 +5,7 @@ import 'package:gap/gap.dart';
55import 'package:go_router/go_router.dart' ;
66import 'package:logging/logging.dart' ;
77import 'package:whitenoise/config/providers/create_group_provider.dart' ;
8+ import 'package:whitenoise/config/states/create_group_state.dart' ;
89import 'package:whitenoise/domain/models/contact_model.dart' ;
910import 'package:whitenoise/routing/routes.dart' ;
1011import 'package:whitenoise/src/rust/api/groups.dart' ;
@@ -53,7 +54,7 @@ class GroupChatDetailsSheet extends ConsumerStatefulWidget {
5354class _GroupChatDetailsSheetState extends ConsumerState <GroupChatDetailsSheet > with SafeToastMixin {
5455 final TextEditingController _groupNameController = TextEditingController ();
5556 final TextEditingController _groupDescriptionController = TextEditingController ();
56-
57+ Group ? createdGroup;
5758 @override
5859 void initState () {
5960 super .initState ();
@@ -82,59 +83,70 @@ class _GroupChatDetailsSheetState extends ConsumerState<GroupChatDetailsSheet> w
8283 .createGroup (
8384 onGroupCreated: (createdGroup) {
8485 if (createdGroup != null && mounted) {
86+ this .createdGroup = createdGroup;
8587 context.pop ();
86- WidgetsBinding .instance.addPostFrameCallback (
87- (_) async {
88- if (mounted) {
89- Routes .goToChat (context, createdGroup.mlsGroupId);
90- }
91- },
92- );
9388 }
9489 },
9590 );
9691 }
9792
93+ void _showInviteSheet (CreateGroupState state) {
94+ WidgetsBinding .instance.addPostFrameCallback ((_) async {
95+ if (mounted) {
96+ try {
97+ await ShareInviteBottomSheet .show (
98+ context: context,
99+ contacts: state.contactsWithoutKeyPackage,
100+ );
101+ } catch (e, st) {
102+ Logger ('GroupChatDetailsSheet' ).severe ('Error showing invite sheet' , e, st);
103+ safeShowErrorToast ('errors.errorOccurredTryAgain' .tr ());
104+ } finally {
105+ ref.read (createGroupProvider.notifier).dismissInviteSheet ();
106+ }
107+ }
108+ });
109+ }
110+
111+ void _goToChat () {
112+ if (createdGroup != null ) {
113+ WidgetsBinding .instance.addPostFrameCallback (
114+ (_) async {
115+ if (mounted) {
116+ Routes .goToChat (context, createdGroup! .mlsGroupId);
117+ }
118+ },
119+ );
120+ }
121+ }
122+
98123 @override
99124 void dispose () {
100125 _groupNameController.removeListener (_onGroupNameChanged);
126+ _groupDescriptionController.removeListener (_onGroupDescriptionChanged);
127+ _groupDescriptionController.dispose ();
101128 _groupNameController.dispose ();
102129 super .dispose ();
103130 }
104131
105132 @override
106133 Widget build (BuildContext context) {
107- final state = ref.watch (createGroupProvider);
108-
109134 ref.listen (createGroupProvider, (previous, next) {
110135 if (next.error != null ) {
111136 safeShowErrorToast (next.error! );
112137 ref.read (createGroupProvider.notifier).clearError ();
113138 }
114-
115139 if (next.shouldShowInviteSheet && next.contactsWithoutKeyPackage.isNotEmpty) {
116- WidgetsBinding .instance.addPostFrameCallback ((_) async {
117- if (mounted) {
118- try {
119- await ShareInviteBottomSheet .show (
120- context: context,
121- contacts: next.contactsWithoutKeyPackage,
122- );
123- } catch (e, st) {
124- Logger ('GroupChatDetailsSheet' ).severe ('Error showing invite sheet' , e, st);
125- safeShowErrorToast ('An error occurred, please try again.' );
126- } finally {
127- ref.read (createGroupProvider.notifier).dismissInviteSheet ();
128- }
129- }
130- });
140+ _showInviteSheet (next);
131141 }
132142 });
133143
144+ final state = ref.watch (createGroupProvider);
134145 return PopScope (
135- onPopInvokedWithResult: (didPop, result ) {
146+ onPopInvokedWithResult: (didPop, _ ) {
136147 if (didPop) {
137148 ref.read (createGroupProvider.notifier).discardChanges ();
149+ _goToChat ();
138150 }
139151 },
140152 child: Column (
0 commit comments