From 6a3a60ef192c6e30b12d35eebe23026847d83148 Mon Sep 17 00:00:00 2001 From: Arseni Date: Tue, 27 Jan 2026 18:41:14 +0300 Subject: [PATCH] Small fixes --- .../pweb/lib/pages/settings/widgets/base.dart | 9 +++-- .../lib/pages/settings/widgets/image.dart | 5 ++- frontend/pweb/lib/utils/error/snackbar.dart | 38 +++++++++++-------- frontend/pweb/lib/utils/snackbar.dart | 1 - 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/frontend/pweb/lib/pages/settings/widgets/base.dart b/frontend/pweb/lib/pages/settings/widgets/base.dart index 64381c2c..51d5c8a8 100644 --- a/frontend/pweb/lib/pages/settings/widgets/base.dart +++ b/frontend/pweb/lib/pages/settings/widgets/base.dart @@ -81,17 +81,17 @@ class _BaseEditTileBodyState extends State<_BaseEditTileBody> { return; } _stateNotifier.value = EditState.saving; - final sms = ScaffoldMessenger.of(context); + final scaffoldMessenger = ScaffoldMessenger.of(context); final locs = AppLocalizations.of(context)!; try { await widget.delegate.valueSetter(newValue); - sms.showSnackBar(SnackBar( + scaffoldMessenger.showSnackBar(SnackBar( content: Text(locs.settingsSuccessfullyUpdated), duration: const Duration(milliseconds: 1200), )); } catch (e) { - notifyUserOfErrorX( - context: context, + showErrorSnackBar( + scaffoldMessenger: scaffoldMessenger, errorSituation: widget.delegate.errorSituation, appLocalizations: locs, exception: e, @@ -123,6 +123,7 @@ class _BaseEditTileBodyState extends State<_BaseEditTileBody> { ); }, ); + if (!mounted) return; if (result != null) await _performSave(result); } diff --git a/frontend/pweb/lib/pages/settings/widgets/image.dart b/frontend/pweb/lib/pages/settings/widgets/image.dart index 9e08f5ed..139f1c86 100644 --- a/frontend/pweb/lib/pages/settings/widgets/image.dart +++ b/frontend/pweb/lib/pages/settings/widgets/image.dart @@ -41,6 +41,7 @@ class ImageTile extends AbstractSettingsTile { Future _pickImage(BuildContext context) async { final picker = ImagePicker(); + final scaffoldMessenger = ScaffoldMessenger.of(context); final locs = AppLocalizations.of(context)!; final picked = await picker.pickImage( source: ImageSource.gallery, @@ -55,8 +56,8 @@ class ImageTile extends AbstractSettingsTile { CachedNetworkImage.evictFromCache(imageUrl!); } } catch (e) { - notifyUserOfErrorX( - context: context, + showErrorSnackBar( + scaffoldMessenger: scaffoldMessenger, errorSituation: imageUpdateError ?? locs.settingsImageUpdateError, exception: e, appLocalizations: locs, diff --git a/frontend/pweb/lib/utils/error/snackbar.dart b/frontend/pweb/lib/utils/error/snackbar.dart index 52a8a925..23df4c86 100644 --- a/frontend/pweb/lib/utils/error/snackbar.dart +++ b/frontend/pweb/lib/utils/error/snackbar.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:pweb/utils/error/handler.dart'; @@ -41,6 +39,26 @@ Future notifyUserOfErrorX({ ); } +void showErrorSnackBar({ + required ScaffoldMessengerState scaffoldMessenger, + required String errorSituation, + required Object exception, + required AppLocalizations appLocalizations, + int delaySeconds = 3, +}) { + final localizedError = ErrorHandler.handleErrorLocs(appLocalizations, exception); + final technicalDetails = exception.toString(); + final snackBar = _buildMainErrorSnackBar( + errorSituation: errorSituation, + localizedError: localizedError, + technicalDetails: technicalDetails, + loc: appLocalizations, + scaffoldMessenger: scaffoldMessenger, + delaySeconds: delaySeconds, + ); + scaffoldMessenger.showSnackBar(snackBar); +} + Future notifyUserOfError({ required BuildContext context, required String errorSituation, @@ -88,26 +106,14 @@ Future postNotifyUserOfError({ required Object exception, required AppLocalizations appLocalizations, int delaySeconds = 3, -}) { - final completer = Completer(); - - WidgetsBinding.instance.addPostFrameCallback((_) async { - if (!context.mounted) { - completer.complete(); - return; - } - await notifyUserOfErrorX( +}) => + notifyUserOfErrorX( context: context, errorSituation: errorSituation, exception: exception, appLocalizations: appLocalizations, delaySeconds: delaySeconds, ); - completer.complete(); - }); - - return completer.future; -} Future postNotifyUserOfErrorX({ required BuildContext context, diff --git a/frontend/pweb/lib/utils/snackbar.dart b/frontend/pweb/lib/utils/snackbar.dart index 3d3e9384..7daa8866 100644 --- a/frontend/pweb/lib/utils/snackbar.dart +++ b/frontend/pweb/lib/utils/snackbar.dart @@ -10,7 +10,6 @@ Future notifyUserX( String message, { int delaySeconds = 3, }) async { - if (!context.mounted) return; final scaffoldMessenger = ScaffoldMessenger.maybeOf(context); if (scaffoldMessenger != null) { scaffoldMessenger.showSnackBar(