Browse Source

Merge pull request #193 from dotnet-architecture/xamarin

Fixed app crash when switching from mock to real services.
pull/223/head
David Britch 7 years ago
committed by GitHub
parent
commit
1564873356
4 changed files with 39 additions and 9 deletions
  1. +2
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs
  2. +10
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
  3. +26
    -8
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
  4. +1
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml

+ 2
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/INavigationService.cs View File

@ -5,6 +5,8 @@ namespace eShopOnContainers.Services
{
public interface INavigationService
{
ViewModelBase PreviousPageViewModel { get; }
Task InitializeAsync();
Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase;


+ 10
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs View File

@ -12,6 +12,16 @@ namespace eShopOnContainers.Services
{
public class NavigationService : INavigationService
{
public ViewModelBase PreviousPageViewModel
{
get
{
var mainPage = Application.Current.MainPage as CustomNavigationView;
var viewModel = mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 2].BindingContext;
return viewModel as ViewModelBase;
}
}
public Task InitializeAsync()
{
if(string.IsNullOrEmpty(Settings.AuthAccessToken))


+ 26
- 8
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs View File

@ -3,6 +3,7 @@ using System.Windows.Input;
using Xamarin.Forms;
using System.Threading.Tasks;
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Models.User;
namespace eShopOnContainers.Core.ViewModels
{
@ -67,13 +68,7 @@ namespace eShopOnContainers.Core.ViewModels
}
}
public ICommand MockServicesCommand => new Command(MockServices);
private void MockServices()
{
ViewModelLocator.RegisterDependencies(!UseAzureServices);
UpdateInfo();
}
public ICommand ToggleMockServicesCommand => new Command(async () => await ToggleMockServicesAsync());
public override Task InitializeAsync(object navigationData)
{
@ -82,7 +77,30 @@ namespace eShopOnContainers.Core.ViewModels
return base.InitializeAsync(navigationData);
}
private void UpdateInfo()
private async Task ToggleMockServicesAsync()
{
ViewModelLocator.RegisterDependencies(!UseAzureServices);
UpdateInfo();
var previousPageViewModel = NavigationService.PreviousPageViewModel;
if (previousPageViewModel != null)
{
if (previousPageViewModel is MainViewModel)
{
// Slight delay so that page navigation isn't instantaneous
await Task.Delay(1000);
if (UseAzureServices)
{
Settings.AuthAccessToken = string.Empty;
Settings.AuthIdToken = string.Empty;
await NavigationService.NavigateToAsync<LoginViewModel>(new LogoutParameter { Logout = true });
await NavigationService.RemoveBackStackAsync();
}
}
}
}
private void UpdateInfo()
{
if (!UseAzureServices)
{


+ 1
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml View File

@ -121,7 +121,7 @@
Grid.Row="1"
Animate="True"
Checked="{Binding UseAzureServices, Mode=TwoWay}"
Command="{Binding MockServicesCommand}"
Command="{Binding ToggleMockServicesCommand}"
Style="{StaticResource SettingsToggleButtonStyle}">
<controls:ToggleButton.CheckedImage>
<OnPlatform x:TypeArguments="ImageSource"


Loading…
Cancel
Save