fix(ui): preserve mobile home route and confirm Android exit

This commit is contained in:
Levi committed 2026-09-12 18:56:52 +08:00
1 parent 8f9bac9e6b
commit ee6b073bc1
7 files changed
+307 -66

No files matched your search

+28 -15
View File
@@ -11,11 +11,6 @@ enum AppToastType { info, success, error }
/// short messages stay compact while long messages wrap before becoming wider
/// than the configured maximum. Errors and normal notices use the same layout.
void showAppToast(BuildContext context, String message, {AppToastType type = AppToastType.info}) {
final palette = AppPalette.of(context);
final borderColor = switch (type) {
AppToastType.error => palette.error.withValues(alpha: 0.55),
AppToastType.success || AppToastType.info => palette.border,
};
shad.showToast(
context: context,
location: shad.ToastLocation.topCenter,
@@ -23,16 +18,34 @@ void showAppToast(BuildContext context, String message, {AppToastType type = App
alignment: Alignment.topCenter,
widthFactor: 1,
heightFactor: 1,
child: Container(
key: const ValueKey('app-toast-content'),
padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
decoration: BoxDecoration(
color: palette.cardBg,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: borderColor),
),
child: Text(message, style: TextStyle(color: palette.textPrimary, fontSize: 13, height: 1.2)),
),
child: AppToastContent(message: message, type: type),
),
);
}
/// Shared toast surface for edge notifications and centered exit prompts.
class AppToastContent extends StatelessWidget {
const AppToastContent({super.key, required this.message, this.type = AppToastType.info});
final String message;
final AppToastType type;
@override
Widget build(BuildContext context) {
final palette = AppPalette.of(context);
final borderColor = switch (type) {
AppToastType.error => palette.error.withValues(alpha: 0.55),
AppToastType.success || AppToastType.info => palette.border,
};
return Container(
key: const ValueKey('app-toast-content'),
padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
decoration: BoxDecoration(
color: palette.cardBg,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: borderColor),
),
child: Text(message, style: TextStyle(color: palette.textPrimary, fontSize: 13, height: 1.2)),
);
}
}