mhesabi
mhesabi

Reputation: 1140

Execute same function on every page in Xamarin.Forms

I have a function that I need to perform to do some checks (e.g: CheckForUpdate, CheckNetworkConnection, CheckUserAuthorization, ...) on every page appearing or somehow before user request completed.
so I made a c# class and called it BasePage.cs:

public static class BasePage
{
    public static async void CheckForUpdate()
    {
        // actual codes to check for updates are not included here
        // just a sample alert
        await App.Current.MainPage.DisplayAlert("Update", "There is a new version avaiable to update, would you like to download?", "Download", "Skip");
    }
}

and used it in my pages like below:
LoginPage.cs

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class LoginPage : ContentPage
{
    public LoginPage()
    {
        InitializeComponent();
    }

    protected async override void OnAppearing()
    {
        await Task.Run(() => BasePage.CheckForUpdate());
    }
}

I don't know if this is best practice or not (I guess not) but it's not displaying alert anyhow.
so my question is what is the best way to execute functions on every page and why the code above doesn't work.

Upvotes: 0

Views: 369

Answers (1)

Arvind Chourasiya
Arvind Chourasiya

Reputation: 17422

Your code doesn't seem to run on UI thread. Just use Device.BeginInvokeOnMainThread, try like below

protected  override void OnAppearing()
{
    Device.BeginInvokeOnMainThread(() => {
        BaseClass.CheckForUpdate();
    });
}

Hope it help you.

Upvotes: 1

Related Questions