feat: Add sign out confirmation dialog and success snackbar
Introduces a confirmation dialog before signing out in the client settings page and displays a snackbar upon successful sign out. Also updates a slivers list to use explicit type annotation for consistency.
This commit is contained in:
@@ -59,7 +59,7 @@ class ClientHubsPage extends StatelessWidget {
|
|||||||
body: Stack(
|
body: Stack(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
CustomScrollView(
|
CustomScrollView(
|
||||||
slivers: [
|
slivers: <Widget>[
|
||||||
_buildAppBar(context),
|
_buildAppBar(context),
|
||||||
SliverPadding(
|
SliverPadding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ class ClientSettingsPage extends StatelessWidget {
|
|||||||
child: BlocListener<ClientSettingsBloc, ClientSettingsState>(
|
child: BlocListener<ClientSettingsBloc, ClientSettingsState>(
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state is ClientSettingsSignOutSuccess) {
|
if (state is ClientSettingsSignOutSuccess) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(content: Text('Signed out successfully')),
|
||||||
|
);
|
||||||
Modular.to.navigate('/');
|
Modular.to.navigate('/');
|
||||||
}
|
}
|
||||||
if (state is ClientSettingsError) {
|
if (state is ClientSettingsError) {
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ class SettingsActions extends StatelessWidget {
|
|||||||
text: labels.log_out,
|
text: labels.log_out,
|
||||||
onPressed: state is ClientSettingsLoading
|
onPressed: state is ClientSettingsLoading
|
||||||
? null
|
? null
|
||||||
: () => BlocProvider.of<ClientSettingsBloc>(
|
: () => _showSignOutDialog(context),
|
||||||
context,
|
|
||||||
).add(const ClientSettingsSignOutRequested()),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -38,4 +36,45 @@ class SettingsActions extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Shows a confirmation dialog for signing out.
|
||||||
|
Future<void> _showSignOutDialog(BuildContext context) {
|
||||||
|
return showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) => AlertDialog(
|
||||||
|
backgroundColor: UiColors.bgPopup,
|
||||||
|
elevation: 0,
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: UiConstants.radiusLg),
|
||||||
|
title: Text(
|
||||||
|
t.client_settings.profile.log_out,
|
||||||
|
style: UiTypography.headline3m.textPrimary,
|
||||||
|
),
|
||||||
|
content: Text(
|
||||||
|
'Are you sure you want to log out?',
|
||||||
|
style: UiTypography.body2r.textSecondary,
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
child: Text(
|
||||||
|
t.common.cancel,
|
||||||
|
style: UiTypography.buttonM.textSecondary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
BlocProvider.of<ClientSettingsBloc>(
|
||||||
|
context,
|
||||||
|
).add(const ClientSettingsSignOutRequested());
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
t.client_settings.profile.log_out,
|
||||||
|
style: UiTypography.buttonM.textError,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user