diff --git a/lib/view/pages/absence_report/absence_report_view.dart b/lib/view/pages/absence_report/absence_report_view.dart index 0ddb332..d3737c9 100644 --- a/lib/view/pages/absence_report/absence_report_view.dart +++ b/lib/view/pages/absence_report/absence_report_view.dart @@ -165,23 +165,28 @@ class _AbsenceReportViewState extends State { Widget _buildBody(BuildContext context) => FutureBuilder( future: _init, builder: (context, snapshot) { - if (snapshot.connectionState != ConnectionState.done) { - return const Center(child: AppProgressIndicator.large()); - } - if (snapshot.hasError) { - return PlaceholderView( - icon: Icons.error_outline, - text: errorToUserMessage(snapshot.error), - button: ElevatedButton.icon( - onPressed: () => setState(() => _init = _load()), - icon: const Icon(Icons.refresh), - label: const Text('Erneut versuchen'), - ), - ); - } - return _buildForm(context); - }, - ); + if (snapshot.connectionState != ConnectionState.done) { + return const Center(child: AppProgressIndicator.large()); + } + if (snapshot.hasError) { + return PlaceholderView( + icon: Icons.error_outline, + text: errorToUserMessage(snapshot.error), + button: ElevatedButton.icon( + onPressed: () { + final reload = _load(); + setState(() { + _init = reload; + }); + }, + icon: const Icon(Icons.refresh), + label: const Text('Erneut versuchen'), + ), + ); + } + return _buildForm(context); + }, + ); Widget _buildForm(BuildContext context) { final theme = Theme.of(context); diff --git a/lib/widget/user_avatar.dart b/lib/widget/user_avatar.dart index fdaf017..4a43e09 100644 --- a/lib/widget/user_avatar.dart +++ b/lib/widget/user_avatar.dart @@ -230,11 +230,15 @@ class _UserAvatarState extends State { final pending = _pendingAvatars.putIfAbsent(url, () { final future = _fetch(url); - future.whenComplete(() { - if (identical(_pendingAvatars[url], future)) { - _pendingAvatars.remove(url); - } - }); + // Cleanup hangs off an error-neutralised copy: whenComplete on `future` + // itself returns a second future that forwards the error unawaited. + unawaited( + future.then((_) {}, onError: (_) {}).whenComplete(() { + if (identical(_pendingAvatars[url], future)) { + _pendingAvatars.remove(url); + } + }), + ); return future; });