mirror of
https://gitlab.com/fabinfra/fabaccess/borepin.git
synced 2025-04-20 18:36:31 +02:00
Added: Project SetUp Classes
This commit is contained in:
parent
ff0fa63ad3
commit
2d071865e5
@ -82,30 +82,78 @@
|
|||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</ImageAsset>
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-icon 1024.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-icon 1024.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%402x.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%403x.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%402x.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%402x.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%403x.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-1.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40%402x.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneApp_60%403x.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76%402x.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadProApp_83.5%402x.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%402x.png">
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\Contents.json" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSpotlight_40%403x.png">
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x-1.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x-1.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-1.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-3.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%403x.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40%402x.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x-1.png" />
|
</ImageAsset>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40.png" />
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76.png">
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon.png" />
|
<Visible>false</Visible>
|
||||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon_20.png" />
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadApp_76%402x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadProApp_83.5%402x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\Contents.json">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%402x-1.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\LaunchIcon.imageset\AppStore%403x-1.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40-3.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%403x.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPhoneSettings_29%402x-1.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppStore_iPadSpotlight_40.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
|
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\App-Icon_20.png">
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</ImageAsset>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
using System;
|
using Borepin.Base;
|
||||||
|
using Borepin.PageModel;
|
||||||
|
using Borepin.Service.Navigation;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
using Xamarin.Forms.Xaml;
|
using Xamarin.Forms.Xaml;
|
||||||
|
|
||||||
@ -9,12 +13,17 @@ namespace Borepin
|
|||||||
public App()
|
public App()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
MainPage = new MainPage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnStart()
|
Task InitNavigation()
|
||||||
{
|
{
|
||||||
|
var navService = PageModelLocator.Resolve<INavigationService>();
|
||||||
|
return navService.NaviagteToAsync<LoginPageModel>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async void OnStart()
|
||||||
|
{
|
||||||
|
await InitNavigation();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnSleep()
|
protected override void OnSleep()
|
||||||
|
29
Borepin/Borepin/Base/PageModelBase.cs
Normal file
29
Borepin/Borepin/Base/PageModelBase.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Borepin.Base
|
||||||
|
{
|
||||||
|
public class PageModelBase : BindableObject
|
||||||
|
{
|
||||||
|
public virtual Task InitializeAsync(object naviagitionData = null)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
|
||||||
|
{
|
||||||
|
if(EqualityComparer<T>.Default.Equals(storage, value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
storage = value;
|
||||||
|
OnPropertyChanged(propertyName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
Borepin/Borepin/Base/PageModelLocator.cs
Normal file
49
Borepin/Borepin/Base/PageModelLocator.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
using Borepin.Page;
|
||||||
|
using Borepin.PageModel;
|
||||||
|
using Borepin.Service.Navigation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using TinyIoC;
|
||||||
|
|
||||||
|
namespace Borepin.Base
|
||||||
|
{
|
||||||
|
public class PageModelLocator
|
||||||
|
{
|
||||||
|
private static TinyIoCContainer _Container;
|
||||||
|
private static Dictionary<Type, Type> _ViewLookUp;
|
||||||
|
|
||||||
|
static PageModelLocator()
|
||||||
|
{
|
||||||
|
_Container = new TinyIoCContainer();
|
||||||
|
_ViewLookUp = new Dictionary<Type, Type>();
|
||||||
|
|
||||||
|
// Register Pages and PageModels
|
||||||
|
Register<DashboardPageModel, DashboardPage>();
|
||||||
|
Register<LoginPageModel, LoginPage>();
|
||||||
|
|
||||||
|
// Register Services (Services are registered by Singeltons default)
|
||||||
|
_Container.Register<INavigationService, NavigationService>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T Resolve<T>() where T : class
|
||||||
|
{
|
||||||
|
return _Container.Resolve<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Xamarin.Forms.Page CreatePage(Type pageModelType)
|
||||||
|
{
|
||||||
|
Type pageType = _ViewLookUp[pageModelType];
|
||||||
|
Xamarin.Forms.Page page = (Xamarin.Forms.Page)Activator.CreateInstance(pageType);
|
||||||
|
object pageModel = _Container.Resolve(pageModelType);
|
||||||
|
|
||||||
|
page.BindingContext = pageModel;
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Register<TPageModel, TPage>() where TPageModel : PageModelBase where TPage : Xamarin.Forms.Page
|
||||||
|
{
|
||||||
|
_ViewLookUp.Add(typeof(TPageModel), typeof(TPage));
|
||||||
|
_Container.Register<TPageModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4341
Borepin/Borepin/Base/TinyIoC.cs
Normal file
4341
Borepin/Borepin/Base/TinyIoC.cs
Normal file
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,12 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Update="Page\DashboardPage.xaml">
|
||||||
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="Page\LoginPage.xaml">
|
||||||
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="Properties\Resources.resx">
|
<EmbeddedResource Update="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
12
Borepin/Borepin/Page/DashboardPage.xaml
Normal file
12
Borepin/Borepin/Page/DashboardPage.xaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Borepin.Page.DashboardPage">
|
||||||
|
<ContentPage.Content>
|
||||||
|
<StackLayout>
|
||||||
|
<Label Text="Welcome to Xamarin.Forms!"
|
||||||
|
VerticalOptions="CenterAndExpand"
|
||||||
|
HorizontalOptions="CenterAndExpand" />
|
||||||
|
</StackLayout>
|
||||||
|
</ContentPage.Content>
|
||||||
|
</ContentPage>
|
20
Borepin/Borepin/Page/DashboardPage.xaml.cs
Normal file
20
Borepin/Borepin/Page/DashboardPage.xaml.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Xamarin.Forms.Xaml;
|
||||||
|
|
||||||
|
namespace Borepin.Page
|
||||||
|
{
|
||||||
|
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||||
|
public partial class DashboardPage : ContentPage
|
||||||
|
{
|
||||||
|
public DashboardPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
Borepin/Borepin/Page/LoginPage.xaml
Normal file
14
Borepin/Borepin/Page/LoginPage.xaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Borepin.Page.LoginPage"
|
||||||
|
Title="Login">
|
||||||
|
<ContentPage.Content>
|
||||||
|
<StackLayout>
|
||||||
|
<Label Text="LoginPage"
|
||||||
|
VerticalOptions="CenterAndExpand"
|
||||||
|
HorizontalOptions="CenterAndExpand" />
|
||||||
|
<Button Text="Sign In" Command="{Binding SignInCommand}"/>
|
||||||
|
</StackLayout>
|
||||||
|
</ContentPage.Content>
|
||||||
|
</ContentPage>
|
20
Borepin/Borepin/Page/LoginPage.xaml.cs
Normal file
20
Borepin/Borepin/Page/LoginPage.xaml.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Xamarin.Forms.Xaml;
|
||||||
|
|
||||||
|
namespace Borepin.Page
|
||||||
|
{
|
||||||
|
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||||
|
public partial class LoginPage : ContentPage
|
||||||
|
{
|
||||||
|
public LoginPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Borepin/Borepin/PageModel/DashboardPageModel.cs
Normal file
12
Borepin/Borepin/PageModel/DashboardPageModel.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using Borepin.Base;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Borepin.PageModel
|
||||||
|
{
|
||||||
|
public class DashboardPageModel : PageModelBase
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
34
Borepin/Borepin/PageModel/LoginPageModel.cs
Normal file
34
Borepin/Borepin/PageModel/LoginPageModel.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using Borepin.Base;
|
||||||
|
using Borepin.Page;
|
||||||
|
using Borepin.Service.Navigation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Borepin.PageModel
|
||||||
|
{
|
||||||
|
public class LoginPageModel : PageModelBase
|
||||||
|
{
|
||||||
|
private ICommand _signInCommand;
|
||||||
|
private INavigationService _NaviagtionService;
|
||||||
|
|
||||||
|
public ICommand SignInCommand
|
||||||
|
{
|
||||||
|
get => _signInCommand;
|
||||||
|
set => SetProperty(ref _signInCommand, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoginPageModel(INavigationService navigationService)
|
||||||
|
{
|
||||||
|
_NaviagtionService = navigationService;
|
||||||
|
SignInCommand = new Command(OnSignInAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSignInAction(object obj)
|
||||||
|
{
|
||||||
|
_NaviagtionService.NaviagteToAsync<DashboardPageModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
Borepin/Borepin/Service/Navigation/INavigationService.cs
Normal file
26
Borepin/Borepin/Service/Navigation/INavigationService.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Borepin.Service.Navigation
|
||||||
|
{
|
||||||
|
public interface INavigationService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Navigatoin method to push onto the Navigaiton Stack
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TPageModelBase"></typeparam>
|
||||||
|
/// <param name="navigationData"></param>
|
||||||
|
/// <param name="setRoot"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task NaviagteToAsync<TPageModelBase>(object navigationData = null, bool setRoot = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Nagivation method to pop of Navigation Stack
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task GoBackAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
43
Borepin/Borepin/Service/Navigation/NavigationService.cs
Normal file
43
Borepin/Borepin/Service/Navigation/NavigationService.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using Borepin.Base;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Borepin.Service.Navigation
|
||||||
|
{
|
||||||
|
public class NavigationService : INavigationService
|
||||||
|
{
|
||||||
|
public Task GoBackAsync()
|
||||||
|
{
|
||||||
|
return App.Current.MainPage.Navigation.PopAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task NaviagteToAsync<TPageModelBase>(object navigationData = null, bool setRoot = false)
|
||||||
|
{
|
||||||
|
Xamarin.Forms.Page page = PageModelLocator.CreatePage(typeof(TPageModelBase));
|
||||||
|
if(setRoot)
|
||||||
|
{
|
||||||
|
App.Current.MainPage = new NavigationPage(page);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(App.Current.MainPage is NavigationPage navPage)
|
||||||
|
{
|
||||||
|
await navPage.PushAsync(page);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App.Current.MainPage = new NavigationPage(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(page.BindingContext is PageModelBase pmBase)
|
||||||
|
{
|
||||||
|
await pmBase.InitializeAsync(navigationData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user