refactored data providers with centralized cache resolution, unified UI using custom dialogs and bottom sheets, and enhanced network error handling for Dio and TLS errors

This commit is contained in:
2026-05-08 20:01:45 +02:00
parent c62a14645a
commit 9e139b5704
37 changed files with 595 additions and 753 deletions
@@ -5,34 +5,43 @@ import '../../../../widget/share_position_origin.dart';
enum ShareTargetType { qr }
class SelectShareTypeDialog extends StatelessWidget {
const SelectShareTypeDialog({super.key});
@override
Widget build(BuildContext context) => SimpleDialog(
children: [
ListTile(
leading: const Icon(Icons.qr_code_2_outlined),
title: const Text('Per QR-Code'),
trailing: const Icon(Icons.arrow_right),
onTap: () => Navigator.of(context).pop(ShareTargetType.qr),
),
ListTile(
leading: const Icon(Icons.link_outlined),
title: const Text('Per Link teilen'),
trailing: const Icon(Icons.arrow_right),
onTap: () {
Navigator.of(context).pop();
SharePlus.instance.share(ShareParams(
sharePositionOrigin: SharePositionOrigin.get(context),
subject: 'App Teilen',
text: 'Hol dir die für das Marianum maßgeschneiderte App:'
'\n\nAndroid: https://play.google.com/store/apps/details?id=eu.mhsl.marianum.mobile.client '
'\niOS: https://apps.apple.com/us/app/marianum-fulda/id6458789560 '
'\n\nViel Spaß!',
));
},
)
],
);
/// Bottom sheet that lets the user pick how they want to share the app.
/// Resolves with [ShareTargetType.qr] for the QR option, or `null` when the
/// sheet is dismissed (link sharing fires immediately and resolves null).
Future<ShareTargetType?> showSelectShareTypeSheet(BuildContext context) {
return showModalBottomSheet<ShareTargetType>(
context: context,
isScrollControlled: true,
showDragHandle: true,
useSafeArea: true,
builder: (sheetCtx) => SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
leading: const Icon(Icons.qr_code_2_outlined),
title: const Text('Per QR-Code'),
trailing: const Icon(Icons.arrow_right),
onTap: () => Navigator.of(sheetCtx).pop(ShareTargetType.qr),
),
ListTile(
leading: const Icon(Icons.link_outlined),
title: const Text('Per Link teilen'),
trailing: const Icon(Icons.arrow_right),
onTap: () {
Navigator.of(sheetCtx).pop();
SharePlus.instance.share(ShareParams(
sharePositionOrigin: SharePositionOrigin.get(sheetCtx),
subject: 'App Teilen',
text: 'Hol dir die für das Marianum maßgeschneiderte App:'
'\n\nAndroid: https://play.google.com/store/apps/details?id=eu.mhsl.marianum.mobile.client '
'\niOS: https://apps.apple.com/us/app/marianum-fulda/id6458789560 '
'\n\nViel Spaß!',
));
},
),
],
),
),
);
}