using Jugenddienst_Stunden.ViewModels; using Jugenddienst_Stunden.Models; using CommunityToolkit.Maui.Core; using CommunityToolkit.Maui.Alerts; namespace Jugenddienst_Stunden.Views; /// /// Code-Behind für die Stunden-Übersicht /// public partial class StundenPage : ContentPage { /// /// CTOR (für Shell/XAML DataTemplate erforderlich) /// public StundenPage() : this( (Application.Current?.Handler?.MauiContext?.Services ?? throw new InvalidOperationException("DI container ist nicht verfügbar.")) .GetRequiredService()) { } /// /// CTOR (DI) /// public StundenPage(StundenViewModel vm) { InitializeComponent(); BindingContext = vm; vm.AlertEvent += Vm_AlertEvent; vm.InfoEvent += Vm_InfoEvent; // Navigation NICHT im CTOR ausführen (Shell/Navigation-Stack ist hier oft noch nicht ?ready?) // if (!CheckLogin()) { // NavigateToTargetPage(); // } } private void Vm_AlertEvent(object? sender, string e) { MainThread.BeginInvokeOnMainThread(async () => { await DisplayAlert("Fehler:", e, "OK"); }); } //private void Vm_InfoEvent(object? sender, string e) { // DisplayAlert("Information:", e, "OK"); //} //private void Vm_InfoEvent(object? sender, string e) { // MainThread.BeginInvokeOnMainThread(async () => { // await DisplayAlert("Information:", e, "OK"); // }); //} private void Vm_InfoEvent(object? sender, string e) { MainThread.BeginInvokeOnMainThread(async () => { CancellationTokenSource cts = new CancellationTokenSource(); ToastDuration duration = ToastDuration.Short; double fontSize = 16; var toast = Toast.Make(e, duration, fontSize); await toast.Show(cts.Token); }); } /// /// Beim Laden der Seite den Titel setzen /// protected override async void OnAppearing() { base.OnAppearing(); Title = Preferences.Default.Get("name", "Nicht") + " " + Preferences.Default.Get("surname", "eingeloggt"); if (!CheckLogin()) { try { await NavigateToTargetPage(); } catch (Exception ex) { await DisplayAlert("Fehler:", ex.Message, "OK"); } } } private bool CheckLogin() { return Preferences.Default.Get("apiKey", "") != ""; } // private async void NavigateToTargetPage() { // await Navigation.PushAsync(new LoginPage()); // } private Task NavigateToTargetPage() { // Shell-Navigation statt Navigation.PushAsync // Voraussetzung: LoginPage-Route ist in AppShell registriert (Routing.RegisterRoute(...)) return Shell.Current.GoToAsync(nameof(Views.LoginPage)); } }