Я пытаюсь проверить, какая страница должна загружать мое приложение в начале, прежде всего я проверяю таблицу базы данных, если я нахожу сохраненную информацию для входа в систему, я хочу нажать на StartPage (), как только я работаю с базой данных метод включает ожидание, если нет сохраненных данных, я хочу нажать LoginPage (). Я попытался следовать этому примеру Xamarin.Forms Async Task On Startup . Мой код:
public App()
{
int result;
InitializeComponent();
ThreadHelper.Init(SynchronizationContext.Current);
ThreadHelper.RunOnUIThread(async () => {
MainPage = new ActivityIndicatorPage();
result = await InitializeAppAsync();
if (result == 0)
{
PushLoginPage();
}
else
{
PushStartPage();
}
});
}
public void PushStartPage()
{
NavigationPage nav = new NavigationPage(new StartPage());
nav.SetValue(NavigationPage.BarBackgroundColorProperty, Color.FromHex("#D60000"));
MainPage = nav;
}
public void PushLoginPage()
{
MainPage = new Login();
}
public void PushLoginPage(string email, string password)
{
MainPage = new Login(email, password);
}
private async Task<int> InitializeAppAsync()
{
if (ViewModel == null)
ViewModel = new MainViewModel(this);
return await ViewModel.LoginViewModel.PushInitialPage();
}
Но выдает следующее исключение и, как говорит автор статьи, делать это не рекомендуется.
Исключение
Еще одна попытка переопределить метод OnStart (), но тоже не работает.
protected override async void OnStart()
{
Task.Run(async ()=> { await InitializeAppAsync(); });
}
Метод PushInitialPage:
публичная асинхронная задача PushInitialPage ()
{
if (_app.Properties.ContainsKey("isLogged"))
{
var user = await UserDataBase.GetUserDataAsync();
var result = await Login(user.Email, user.Password);
if (result.StatusCode != 200)
{
return 0;
///PushLoginPage();
}
else
{
return 1;
//PushStartPage();
}
}
else
{
return 0;
}
}