首页 > 解决方案 > 登录xamarin表单后如何将主页设置为永久?

问题描述

我想在登录后将我的主页设置为永久

我不知道如何设置

这是闪屏纯cs代码:

protected override async void OnAppearing()
{
    base.OnAppearing();
    await splashImage.FadeTo(0, 1000);
    await splashImage.FadeTo(1, 1000);
    await splashImage.FadeTo(0, 1000);
    await splashImage.FadeTo(1, 1000);
    await sub.RelRotateTo(360, 1000, Easing.BounceOut);
    Application.Current.MainPage = new Homemaster();
}

这是我的应用

public App(){
    InitializeComponent();
    MainPage = new Login();
}

和我的登录页面推送主页

using System;
using System.IO;
using Xamarin.Forms;

namespace sing
{
    public partial class Login : ContentPage
    {
        public Login()
        {
            NavigationPage.SetHasNavigationBar(this, false);
            var SignUp = new NavigationPage(new SignUp());
            var Homepage = new NavigationPage(new View1());
            Application.Current.MainPage = new  Homepage();
            InitializeComponent();
        }

这是上面代码的延续尝试查看我的目标是 Homepage() 的 NavigationPage

        private async void ButtonClick(object sender, EventArgs e)
        {
         
         overlay.IsVisible = true;
         TimeSpan duration = TimeSpan.FromSeconds(3);
          DateTime startTime = DateTime.Now;
          Device.StartTimer(TimeSpan.FromSeconds(0), () =>
         {
            double progress = (DateTime.Now - startTime).TotalMilliseconds /duration.TotalMilliseconds;
            progressBar.Progress = progress;
            bool continueTimer = progress < 1;
            if (!continueTimer)
            {
                overlay.IsVisible = false;
                DisplayAlert("Account", "Login Successful", "Done");
                Navigation.PushAsync(new Homepage());
            }
            return continueTimer;
         });
        }
        private async void Button2(object sender, EventArgs e)
        {
            bool answer = await DisplayAlert("Question", "Do you want to continue?" , "Yes" , "No");
            Console.WriteLine("Answer:" + answer);
            if(answer is true)
            {
                await Navigation.PushAsync(new SignUp());
            }
        }
    }
}

标签: c#authenticationxamarinxamarin.formsxamarin.android

解决方案


从共享场景中,我们将设置MainPage根页面App.xaml.cs

public App()
{
    InitializeComponent();

    MainPage = new NavigationPage(new MainPage());
}

首次启动app时,会进入MainPage判断是否需要登录。

public MainPage()
{      
    InitializeComponent();
    
    var LoginPage = new NavigationPage(new Login());
    
    var loginStatus = Preferences.Get("loginStatus", "0");
    if(loginStatus == 0)
    {
        Application.Current.MainPage = LoginPage;
    }else{
      // do nothing
    }

}

在登录页面中, Application.Current.MainPage在构造方法中删除:

public Login()
{      
    InitializeComponent();

    NavigationPage.SetHasNavigationBar(this, false);
    var SignUp = new NavigationPage(new SignUp());
    var Homepage = new NavigationPage(new View1());
}

然后在按钮点击方法修改如下:

private async void ButtonClick(object sender, EventArgs e)
{
    overlay.IsVisible = true;
    TimeSpan duration = TimeSpan.FromSeconds(3);
    DateTime startTime = DateTime.Now;
    Device.StartTimer(TimeSpan.FromSeconds(0), () =>
    {
        double progress = (DateTime.Now - startTime).TotalMilliseconds /duration.TotalMilliseconds;
        progressBar.Progress = progress;
        bool continueTimer = progress < 1;
        if (!continueTimer)
        {
            overlay.IsVisible = false;
            DisplayAlert("Account", "Login Successful", "Done");
            //Navigation.PushAsync(new Homepage());
            
            Preferences.Set("loginStatus", "1");
            // save loginStatus value
            Application.Current.MainPage = Homepage;
        }
        return continueTimer;
     });
}

然后下次启动 appp 将不会导航到 Login Page 。


推荐阅读