c# - 登录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());
}
}
}
}
解决方案
从共享场景中,我们将设置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 。