Skip to content

Instantly share code, notes, and snippets.

@felipebaltazar
Created June 28, 2018 13:28
Show Gist options
  • Save felipebaltazar/71c68b253606ef01afc2ddb494d0ee8d to your computer and use it in GitHub Desktop.
Save felipebaltazar/71c68b253606ef01afc2ddb494d0ee8d to your computer and use it in GitHub Desktop.
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Xamarin.Forms.Helpers
{
public static class NavigationHelper
{
private static INavigation Navigation => CurrentPage.Navigation;
public static Page CurrentPage => Application.Current.MainPage;
public static async Task PopAsync()
{
var masterDetailPage = CurrentPage as MasterDetailPage;
if (masterDetailPage != null)
await masterDetailPage.Detail.Navigation.PopAsync(true);
else
await Navigation.PopAsync(true);
}
public static async Task PopModalAsync()
{
var masterDetailPage = CurrentPage as MasterDetailPage;
if (masterDetailPage != null)
await masterDetailPage.Detail.Navigation.PopModalAsync(true);
else
await Navigation.PopModalAsync(true);
}
public static async Task PushModalAsync(Page page)
{
var masterDetailPage = CurrentPage as MasterDetailPage;
if (masterDetailPage != null)
await masterDetailPage.Detail.Navigation.PushModalAsync(page, true);
else
await Navigation.PushModalAsync(page, true);
}
public static async Task PushAsync(Page page)
{
var masterDetailPage = CurrentPage as MasterDetailPage;
if (masterDetailPage != null)
await masterDetailPage.Detail.Navigation.PushAsync(page);
else
await Navigation.PushAsync(page);
}
public static async Task PushAsync(int index)
{
var masterDetailPage = CurrentPage as MasterDetailPage;
if (masterDetailPage != null)
await masterDetailPage.Detail.Navigation.PushAsync(Navigation.NavigationStack[index]);
else
await Navigation.PushAsync(Navigation.NavigationStack[index]);
}
public static async Task PopToNewRootAsync(Page newRootPage)
{
NewRootPage(newRootPage);
await Navigation.PopToRootAsync(true);
}
public static async Task PopToRootAsync()
{
await Navigation.PopToRootAsync(true);
}
public static void InsertBeforePage(Page pageToInsert, Page before) =>
Navigation.InsertPageBefore(pageToInsert, before);
public static void InsertBeforePage(Page PageToInsert, int beforeIndex) =>
Navigation.InsertPageBefore(PageToInsert, Navigation.NavigationStack[beforeIndex]);
public static void RemoveFromNavigationStack(Page pageToRemove) =>
Navigation.RemovePage(pageToRemove);
public static void RemoveFromNavigationStack(int index) =>
Navigation.RemovePage(Navigation.NavigationStack[index]);
public static void NewRootPage(Page page)
{
Navigation.InsertPageBefore(page, Navigation.NavigationStack[0]);
}
public static void ChangeBackButtonVisibility(bool visibility)
{
var currentPage = CurrentPage;
while(currentPage is NavigationPage)
currentPage = ((NavigationPage)currentPage).CurrentPage;
NavigationPage.SetHasBackButton(currentPage, visibility);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment