diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/FreshMvvmApp.Android.csproj b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/FreshMvvmApp.Android.csproj
index d59db1e..421bde3 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/FreshMvvmApp.Android.csproj
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/FreshMvvmApp.Android.csproj
@@ -54,7 +54,7 @@
- 4.6.0.772
+ 4.6.0.1180
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/Resources/Resource.designer.cs b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/Resources/Resource.designer.cs
index 36b9cba..a2c1b31 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/Resources/Resource.designer.cs
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.Android/Resources/Resource.designer.cs
@@ -2,7 +2,6 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.iOS/FreshMvvmApp.iOS.csproj b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.iOS/FreshMvvmApp.iOS.csproj
index 05df670..68a13fb 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.iOS/FreshMvvmApp.iOS.csproj
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.iOS/FreshMvvmApp.iOS.csproj
@@ -145,7 +145,7 @@
-
+
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/App.xaml.cs b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/App.xaml.cs
index 66f6ef3..6ef3f41 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/App.xaml.cs
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/App.xaml.cs
@@ -1,6 +1,7 @@
using System;
using Xamarin.Forms;
using System.Collections.Generic;
+using System.Threading.Tasks;
using FreshMvvm;
namespace FreshMvvmApp
@@ -14,9 +15,9 @@ public App()
MainPage = new NavigationPage(new LaunchPage(this));
}
- public void LoadBasicNav()
+ public async Task LoadBasicNav()
{
- var page = FreshPageModelResolver.ResolvePageModel();
+ var page = await FreshPageModelResolver.ResolvePageModel();
var basicNavContainer = new FreshNavigationContainer(page);
MainPage = basicNavContainer;
}
@@ -46,17 +47,17 @@ public void LoadFOTabbedNav()
MainPage = tabbedNavigation;
}
- public void LoadCustomNav()
+ public async Task LoadCustomNav()
{
- MainPage = new CustomImplementedNav();
+ MainPage = await CustomImplementedNav.Create();
}
- public void LoadMultipleNavigation()
+ public async Task LoadMultipleNavigation()
{
var masterDetailsMultiple = new MasterDetailPage(); //generic master detail page
//we setup the first navigation container with ContactList
- var contactListPage = FreshPageModelResolver.ResolvePageModel();
+ var contactListPage = await FreshPageModelResolver.ResolvePageModel();
contactListPage.Title = "Contact List";
//we setup the first navigation container with name MasterPageArea
var masterPageArea = new FreshNavigationContainer(contactListPage, "MasterPageArea");
@@ -65,7 +66,7 @@ public void LoadMultipleNavigation()
masterDetailsMultiple.Master = masterPageArea; //set the first navigation container to the Master
//we setup the second navigation container with the QuoteList
- var quoteListPage = FreshPageModelResolver.ResolvePageModel();
+ var quoteListPage = await FreshPageModelResolver.ResolvePageModel();
quoteListPage.Title = "Quote List";
//we setup the second navigation container with name DetailPageArea
var detailPageArea = new FreshNavigationContainer(quoteListPage, "DetailPageArea");
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.csproj b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.csproj
index 7d880e7..301b41c 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.csproj
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp.csproj
@@ -12,7 +12,7 @@
runtime; build; native; contentfiles; analyzers
-
+
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/LaunchPage.cs b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/LaunchPage.cs
index 9f5f0b9..8edaf9a 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/LaunchPage.cs
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/LaunchPage.cs
@@ -18,9 +18,9 @@ public LaunchPage (App app)
"Tabbed (FO) Navigation",
"Multiple Navigation"
};
- list.ItemTapped += (object sender, ItemTappedEventArgs e) => {
+ list.ItemTapped += async (object sender, ItemTappedEventArgs e) => {
if ((string)e.Item == "Basic Navigation")
- app.LoadBasicNav ();
+ await app.LoadBasicNav ();
else if ((string)e.Item == "Master Detail")
app.LoadMasterDetail ();
else if ((string)e.Item == "Tabbed Navigation")
@@ -28,9 +28,9 @@ public LaunchPage (App app)
else if ((string)e.Item == "Tabbed (FO) Navigation")
app.LoadFOTabbedNav ();
else if ((string)e.Item == "Custom Navigation")
- app.LoadCustomNav ();
+ await app.LoadCustomNav ();
else if ((string)e.Item == "Multiple Navigation")
- app.LoadMultipleNavigation ();
+ await app.LoadMultipleNavigation ();
};
this.Content = list;
}
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/Navigation/CustomImplementedNav.cs b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/Navigation/CustomImplementedNav.cs
index 7a8d7c5..8f92cd3 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/Navigation/CustomImplementedNav.cs
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/Navigation/CustomImplementedNav.cs
@@ -2,6 +2,7 @@
using FreshMvvm;
using Xamarin.Forms;
using System.Collections.Generic;
+using System.Dynamic;
using System.Threading.Tasks;
namespace FreshMvvmApp
@@ -14,19 +15,31 @@ public class CustomImplementedNav : Xamarin.Forms.MasterDetailPage, IFreshNaviga
FreshTabbedNavigationContainer _tabbedNavigationPage;
Page _contactsPage, _quotesPage;
- public CustomImplementedNav ()
+ private CustomImplementedNav ()
{
NavigationServiceName = "CustomImplementedNav";
- SetupTabbedPage ();
+ }
+
+ public static async Task Create()
+ {
+ var newInstance = new CustomImplementedNav();
+ return await newInstance.InitialiseAsync();
+ }
+
+ private async Task InitialiseAsync()
+ {
+ NavigationServiceName = "CustomImplementedNav";
+ await SetupTabbedPage ();
CreateMenuPage ("Menu");
RegisterNavigation ();
+ return this;
}
- void SetupTabbedPage()
+ async Task SetupTabbedPage()
{
_tabbedNavigationPage = new FreshTabbedNavigationContainer ();
- _contactsPage = _tabbedNavigationPage.AddTab ("Contacts", "contacts.png");
- _quotesPage = _tabbedNavigationPage.AddTab ("Quotes", "document.png");
+ _contactsPage = await _tabbedNavigationPage.AddTab ("Contacts", "contacts.png");
+ _quotesPage = await _tabbedNavigationPage.AddTab ("Quotes", "document.png");
this.Detail = _tabbedNavigationPage;
}
@@ -54,7 +67,7 @@ protected void CreateMenuPage(string menuPageTitle)
_tabbedNavigationPage.CurrentPage = _quotesPage;
break;
case "Modal Demo":
- var modalPage = FreshPageModelResolver.ResolvePageModel();
+ var modalPage = await FreshPageModelResolver.ResolvePageModel();
await PushPage(modalPage, null, true);
break;
default:
diff --git a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/PageModels/ContactPageModel.cs b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/PageModels/ContactPageModel.cs
index 8ac8815..f18b0c0 100644
--- a/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/PageModels/ContactPageModel.cs
+++ b/samples/FreshMvvmApp/FreshMvvmApp/FreshMvvmApp/PageModels/ContactPageModel.cs
@@ -2,6 +2,7 @@
using PropertyChanged;
using FreshMvvm;
using System;
+using System.Threading.Tasks;
namespace FreshMvvmApp
{
@@ -24,13 +25,15 @@ void HandleContactChanged(string propertyName)
public Contact Contact { get; set; }
- public override void Init (object initData)
+ public override Task InitAsync(object initData)
{
if (initData != null) {
Contact = (Contact)initData;
} else {
Contact = new Contact ();
}
+
+ return base.InitAsync(initData);
}
public Command SaveCommand {
@@ -55,7 +58,7 @@ public Command TestModalNavigationBasic {
get {
return new Command (async () => {
- var page = FreshPageModelResolver.ResolvePageModel ();
+ var page = await FreshPageModelResolver.ResolvePageModel ();
var basicNavContainer = new FreshNavigationContainer (page, Guid.NewGuid ().ToString ());
await CoreMethods.PushNewNavigationServiceModal(basicNavContainer, new FreshBasePageModel[] { page.GetModel() });
});
diff --git a/src/FreshMvvm.Tests/Fixtures/FreshPageModelResolverFixture.cs b/src/FreshMvvm.Tests/Fixtures/FreshPageModelResolverFixture.cs
index 4f5d8f7..a8ed978 100644
--- a/src/FreshMvvm.Tests/Fixtures/FreshPageModelResolverFixture.cs
+++ b/src/FreshMvvm.Tests/Fixtures/FreshPageModelResolverFixture.cs
@@ -1,4 +1,5 @@
using System;
+using System.Threading.Tasks;
using FreshMvvm.Tests.Mocks;
using NUnit.Framework;
@@ -10,16 +11,16 @@ public class FreshPageModelResolverFixture
[TestCase]
public void Test_ResolvePageModel_Not_Found()
{
- Assert.Throws(() =>
+ Assert.ThrowsAsync(async () =>
{
- FreshPageModelResolver.ResolvePageModel();
+ await FreshPageModelResolver.ResolvePageModel();
});
}
[TestCase]
- public void Test_ResolvePageModel()
+ public async Task Test_ResolvePageModel()
{
- var page = FreshPageModelResolver.ResolvePageModel();
+ var page = await FreshPageModelResolver.ResolvePageModel();
var context = page.BindingContext as MockContentPageModel;
Assert.IsNotNull(context);
@@ -28,9 +29,9 @@ public void Test_ResolvePageModel()
}
[TestCase("test data")]
- public void Test_ResolvePageModel_With_Init(object data)
+ public async Task Test_ResolvePageModel_With_Init(object data)
{
- var page = FreshPageModelResolver.ResolvePageModel(data);
+ var page = await FreshPageModelResolver.ResolvePageModel(data);
var context = page.BindingContext as MockContentPageModel;
Assert.IsNotNull(context);
diff --git a/src/FreshMvvm.Tests/Fixtures/MultipleNavigationProviderTests.cs b/src/FreshMvvm.Tests/Fixtures/MultipleNavigationProviderTests.cs
index 9708aee..ed8e0ce 100644
--- a/src/FreshMvvm.Tests/Fixtures/MultipleNavigationProviderTests.cs
+++ b/src/FreshMvvm.Tests/Fixtures/MultipleNavigationProviderTests.cs
@@ -3,6 +3,7 @@
using FreshMvvm.Tests.Mocks;
using NUnit.Framework;
using System.Linq;
+using System.Threading.Tasks;
using Xamarin.Forms;
using NSubstitute;
@@ -24,12 +25,12 @@ public MultipleNavigationProviderTests ()
/// This test ensures the first pagemodels are created with a link to the named navigation service
///
[Test]
- public void pagemodel_should_be_link_to_when_created_firsttime()
+ public async Task pagemodel_should_be_link_to_when_created_firsttime()
{
//master detail navigation
var masterDetailNavigation = new FreshMasterDetailNavigationContainer("TestingLinking");
- masterDetailNavigation.AddPage ("Page1");
- masterDetailNavigation.AddPage ("Page2");
+ await masterDetailNavigation.AddPage ("Page1");
+ await masterDetailNavigation.AddPage ("Page2");
var pageModel1 = masterDetailNavigation.Pages ["Page1"].GetPageFromNav().GetModel ();
var pageModel2 = masterDetailNavigation.Pages ["Page2"].GetPageFromNav().GetModel();
pageModel1.CurrentNavigationServiceName.Should ().Be ("TestingLinking");
@@ -40,8 +41,8 @@ public void pagemodel_should_be_link_to_when_created_firsttime()
//tabbed navigation
var tabbedNavigation = new FreshTabbedNavigationContainer("TestingLinking2");
- tabbedNavigation.AddTab ("Page1", null);
- tabbedNavigation.AddTab ("Page2", null);
+ await tabbedNavigation.AddTab ("Page1", null);
+ await tabbedNavigation.AddTab ("Page2", null);
var tabbedPageModel1 = tabbedNavigation.TabbedPages.First ().GetModel ();
var tabbedPageModel2 = tabbedNavigation.TabbedPages.Skip (1).Take (1).First ().GetModel ();
tabbedPageModel1.CurrentNavigationServiceName.Should ().Be ("TestingLinking2");
@@ -51,7 +52,7 @@ public void pagemodel_should_be_link_to_when_created_firsttime()
throw new Exception ("Should contain navigation service");
//standard navigation should set named navigation
- var page = FreshPageModelResolver.ResolvePageModel();
+ var page =await FreshPageModelResolver.ResolvePageModel();
var pageModel = page.BindingContext as MockContentPageModel;
new FreshNavigationContainer(page, "testingLinking3");
pageModel.CurrentNavigationServiceName.Should ().Be ("testingLinking3");
@@ -69,14 +70,14 @@ public void pagemodel_should_be_link_to_when_created_firsttime()
/// Each time a new PageModel is pushed, the NavigationServiceName is passed on
///
[Test]
- public void navigation_servicename_is_passed_on()
+ public async Task navigation_servicename_is_passed_on()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
var coreMethods = new PageModelCoreMethods (_page, _pageModel);
- coreMethods.PushPageModel ();
+ await coreMethods.PushPageModel ();
- _navigationMock.Received ().PushPage (Arg.Any (),
+ await _navigationMock.Received ().PushPage (Arg.Any (),
Arg.Is (o => o.CurrentNavigationServiceName == _pageModel.CurrentNavigationServiceName), false, true);
}
@@ -84,23 +85,23 @@ public void navigation_servicename_is_passed_on()
/// The correct IFreshNavigationService should always be resolved name
///
[Test]
- public void navigationservice_should_be_resolved_via_name()
+ public async Task navigationservice_should_be_resolved_via_name()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
var coreMethods = new PageModelCoreMethods (_page, _pageModel);
- coreMethods.PushPageModel ();
- coreMethods.PushPageModel ();
+ await coreMethods.PushPageModel ();
+ await coreMethods.PushPageModel ();
_navigationMock.ReceivedCalls ();
_navigationMock.ClearReceivedCalls ();
- coreMethods.PopPageModel ();
+ await coreMethods.PopPageModel ();
_navigationMock.ReceivedCalls ();
_navigationMock.ClearReceivedCalls ();
- coreMethods.PopToRoot (false);
+ await coreMethods.PopToRoot (false);
}
/// People want the ability to modal with new NavigationService, this is the case where a ModalScreen also has
@@ -108,23 +109,23 @@ public void navigationservice_should_be_resolved_via_name()
/// - needs ability to push modally with a new navigation service
[Test]
- public void push_modally_new_navigation_service()
+ public async Task push_modally_new_navigation_service()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
- PushSecondNavigationStack ();
+ await PushSecondNavigationStack ();
//navigationService has push modal with new navigation service
- _navigationMock.Received ().PushPage (_secondNavService, Arg.Any(), true);
+ await _navigationMock.Received ().PushPage (_secondNavService, Arg.Any(), true);
}
/// - when a new navigation service is pushed then models stores the previous navigationname
[Test]
- public void new_navigationservice_the_model_stores_previous_navigationname()
+ public async Task new_navigationservice_the_model_stores_previous_navigationname()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
- PushSecondNavigationStack ();
+ await PushSecondNavigationStack ();
_pageModelSecond.CurrentNavigationServiceName.Should ().Be ("secondNav");
_pageModelSecond.PreviousNavigationServiceName.Should ().Be ("firstNav");
@@ -133,13 +134,13 @@ public void new_navigationservice_the_model_stores_previous_navigationname()
/// - when model are pushed then we need to keep a reference to previous navigationname
[Test]
- public void model_pushed_store_previous_navigationname()
+ public async Task model_pushed_store_previous_navigationname()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
- PushSecondNavigationStack ();
+ await PushSecondNavigationStack ();
- _coreMethods.PushPageModel ();
+ await _coreMethods.PushPageModel ();
var pageModelLatest = _secondNavService.CurrentPage.BindingContext as FreshBasePageModel;
@@ -148,35 +149,35 @@ public void model_pushed_store_previous_navigationname()
/// - when the first new page is pop'd we pop from older navigation service
[Test]
- public void firstmodelchild_poped_popfrom_previous_navigation()
+ public async Task firstmodelchild_poped_popfrom_previous_navigation()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
- PushSecondNavigationStack ();
+ await PushSecondNavigationStack ();
- _coreMethodsSecondPage.PopPageModel (true);
+ await _coreMethodsSecondPage.PopPageModel (true);
//previousNavigation has pop modal called
- _navigationMock.Received().PopPage(true);
+ await _navigationMock.Received().PopPage(true);
}
/// - when is someone pushes a new MasterDetail or TabbedPages, how do we go back, we need like a PopModalNavigation
[Test]
- public void should_allow_popmodalnavigation()
+ public async Task should_allow_popmodalnavigation()
{
- SetupFirstNavigationAndPage ();
+ await SetupFirstNavigationAndPage ();
- PushSecondNavigationStack ();
+ await PushSecondNavigationStack ();
- _coreMethodsSecondPage.PushPageModel ();
+ await _coreMethodsSecondPage.PushPageModel ();
var pageModelLatest = _secondNavService.CurrentPage.BindingContext as FreshBasePageModel;
- pageModelLatest.CoreMethods.PopModalNavigationService ();
+ await pageModelLatest.CoreMethods.PopModalNavigationService ();
//previousNavigation has pop modal called
- _navigationMock.Received().PopPage(true);
+ await _navigationMock.Received().PopPage(true);
}
//TODO: test for this
@@ -191,14 +192,14 @@ public void should_allow_popmodalnavigation()
Page _page;
FreshBasePageModel _pageModel;
- void SetupFirstNavigationAndPage()
+ async Task SetupFirstNavigationAndPage()
{
_navigationMock = Substitute.For ();
FreshIOC.Container.Register (_navigationMock, "firstNav");
- _page = FreshPageModelResolver.ResolvePageModel();
+ _page = await FreshPageModelResolver.ResolvePageModel();
_pageModel = _page.BindingContext as MockContentPageModel;
- _pageModel.CurrentNavigationServiceName = "firstNav";
+ _pageModel.CurrentNavigationServiceName = "firstNav";
}
PageModelCoreMethods _coreMethodsSecondPage;
@@ -207,17 +208,17 @@ void SetupFirstNavigationAndPage()
FreshBasePageModel _pageModelSecond;
FreshNavigationContainer _secondNavService;
- void PushSecondNavigationStack()
+ async Task PushSecondNavigationStack()
{
_coreMethods = new PageModelCoreMethods (_page, _pageModel);
- _coreMethods.PushPageModel ();
+ await _coreMethods.PushPageModel ();
- _pageSecond = FreshPageModelResolver.ResolvePageModel();
+ _pageSecond = await FreshPageModelResolver.ResolvePageModel();
_pageModelSecond = _pageSecond.BindingContext as MockContentPageModel;
_coreMethodsSecondPage = new PageModelCoreMethods (_pageSecond, _pageModelSecond);
_secondNavService = new FreshNavigationContainer (_pageSecond, "secondNav");
- _coreMethods.PushNewNavigationServiceModal (_secondNavService, new FreshBasePageModel[] { _pageModelSecond });
+ await _coreMethods.PushNewNavigationServiceModal (_secondNavService, new FreshBasePageModel[] { _pageModelSecond });
}
}
}
diff --git a/src/FreshMvvm.Tests/Fixtures/PageModelCoreMethodsFixture.cs b/src/FreshMvvm.Tests/Fixtures/PageModelCoreMethodsFixture.cs
index fba8b61..88e3890 100644
--- a/src/FreshMvvm.Tests/Fixtures/PageModelCoreMethodsFixture.cs
+++ b/src/FreshMvvm.Tests/Fixtures/PageModelCoreMethodsFixture.cs
@@ -14,12 +14,12 @@ class PageModelCoreMethodsFixture
Page _page;
FreshBasePageModel _pageModel;
- void SetupFirstNavigationAndPage()
+ async Task SetupFirstNavigationAndPage()
{
_navigationMock = Substitute.For();
FreshIOC.Container.Register(_navigationMock, "firstNav");
- _page = FreshPageModelResolver.ResolvePageModel();
+ _page = await FreshPageModelResolver.ResolvePageModel();
_pageModel = _page.BindingContext as MockContentPageModel;
_pageModel.CurrentNavigationServiceName = "firstNav";
@@ -30,12 +30,12 @@ void SetupFirstNavigationAndPage()
[Test]
public async Task model_property_populated_by_action()
{
- SetupFirstNavigationAndPage();
+ await SetupFirstNavigationAndPage();
const string item = "asj";
await _coreMethods.PushPageModel(pm => pm.Item = item);
- _navigationMock.Received().PushPage(Arg.Any(), Arg.Is(o => o.Item == item), Arg.Any(), Arg.Any());
+ await _navigationMock.Received().PushPage(Arg.Any(), Arg.Is(o => o.Item == item), Arg.Any(), Arg.Any());
}
}
}
diff --git a/src/FreshMvvm.Tests/FreshMvvm.Tests.csproj b/src/FreshMvvm.Tests/FreshMvvm.Tests.csproj
index 9ff6f0a..38ddaa9 100644
--- a/src/FreshMvvm.Tests/FreshMvvm.Tests.csproj
+++ b/src/FreshMvvm.Tests/FreshMvvm.Tests.csproj
@@ -1,7 +1,7 @@
+
-
Debug
AnyCPU
@@ -66,14 +66,17 @@
..\packages\NSubstitute.3.1.0\lib\net45\NSubstitute.dll
-
- ..\packages\Xamarin.Forms.3.4.0.1009999\lib\netstandard2.0\Xamarin.Forms.Core.dll
+
+ ..\packages\Xamarin.Forms.4.6.0.800\lib\netstandard2.0\Xamarin.Forms.Core.dll
+ True
-
- ..\packages\Xamarin.Forms.3.4.0.1009999\lib\netstandard2.0\Xamarin.Forms.Platform.dll
+
+ ..\packages\Xamarin.Forms.4.6.0.800\lib\netstandard2.0\Xamarin.Forms.Platform.dll
+ True
-
- ..\packages\Xamarin.Forms.3.4.0.1009999\lib\netstandard2.0\Xamarin.Forms.Xaml.dll
+
+ ..\packages\Xamarin.Forms.4.6.0.800\lib\netstandard2.0\Xamarin.Forms.Xaml.dll
+ True
@@ -114,9 +117,9 @@
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
+
+
-
+
\ No newline at end of file
diff --git a/src/FreshMvvm.Tests/packages.config b/src/FreshMvvm.Tests/packages.config
index f27d7f1..0282de7 100644
--- a/src/FreshMvvm.Tests/packages.config
+++ b/src/FreshMvvm.Tests/packages.config
@@ -17,5 +17,5 @@
-
+
\ No newline at end of file
diff --git a/src/FreshMvvm/FreshBasePageModel.cs b/src/FreshMvvm/FreshBasePageModel.cs
index 889b36c..0e8355c 100644
--- a/src/FreshMvvm/FreshBasePageModel.cs
+++ b/src/FreshMvvm/FreshBasePageModel.cs
@@ -57,6 +57,15 @@ public virtual void Init (object initData)
{
}
+ ///
+ /// This method is called when the PageModel is loaded, the initData is the data that's sent from pagemodel before
+ ///
+ /// Data that's sent to this PageModel from the pusher
+ public virtual Task InitAsync (object initData)
+ {
+ return Task.CompletedTask;
+ }
+
protected void RaisePropertyChanged ([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
diff --git a/src/FreshMvvm/FreshMvvm.csproj b/src/FreshMvvm/FreshMvvm.csproj
index 0d5a52f..7877332 100644
--- a/src/FreshMvvm/FreshMvvm.csproj
+++ b/src/FreshMvvm/FreshMvvm.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/src/FreshMvvm/FreshPageModelResolver.cs b/src/FreshMvvm/FreshPageModelResolver.cs
index 74c54d3..cc42916 100644
--- a/src/FreshMvvm/FreshPageModelResolver.cs
+++ b/src/FreshMvvm/FreshPageModelResolver.cs
@@ -1,4 +1,5 @@
using System;
+using System.Threading.Tasks;
using Xamarin.Forms;
namespace FreshMvvm
@@ -7,31 +8,31 @@ public static class FreshPageModelResolver
{
public static IFreshPageModelMapper PageModelMapper { get; set; } = new FreshPageModelMapper();
- public static Page ResolvePageModel () where T : FreshBasePageModel
+ public static async Task ResolvePageModel () where T : FreshBasePageModel
{
- return ResolvePageModel (null);
+ return await ResolvePageModel (null);
}
- public static Page ResolvePageModel (object initData) where T : FreshBasePageModel
+ public static async Task ResolvePageModel (object initData) where T : FreshBasePageModel
{
var pageModel = FreshIOC.Container.Resolve ();
- return ResolvePageModel (initData, pageModel);
+ return await ResolvePageModel (initData, pageModel);
}
- public static Page ResolvePageModel (object data, T pageModel) where T : FreshBasePageModel
+ public static async Task ResolvePageModel (object data, T pageModel) where T : FreshBasePageModel
{
var type = pageModel.GetType ();
- return ResolvePageModel (type, data, pageModel);
+ return await ResolvePageModel (type, data, pageModel);
}
- public static Page ResolvePageModel (Type type, object data)
+ public static async Task ResolvePageModel (Type type, object data)
{
var pageModel = FreshIOC.Container.Resolve (type) as FreshBasePageModel;
- return ResolvePageModel (type, data, pageModel);
+ return await ResolvePageModel (type, data, pageModel);
}
- public static Page ResolvePageModel (Type type, object data, FreshBasePageModel pageModel)
+ public static async Task ResolvePageModel (Type type, object data, FreshBasePageModel pageModel)
{
var name = PageModelMapper.GetPageTypeName (type);
var pageType = Type.GetType (name);
@@ -40,17 +41,18 @@ public static Page ResolvePageModel (Type type, object data, FreshBasePageModel
var page = (Page)FreshIOC.Container.Resolve (pageType);
- BindingPageModel(data, page, pageModel);
+ await BindingPageModel(data, page, pageModel);
return page;
}
- public static Page BindingPageModel(object data, Page targetPage, FreshBasePageModel pageModel)
+ public static async Task BindingPageModel(object data, Page targetPage, FreshBasePageModel pageModel)
{
pageModel.WireEvents (targetPage);
pageModel.CurrentPage = targetPage;
pageModel.CoreMethods = new PageModelCoreMethods (targetPage, pageModel);
pageModel.Init (data);
+ await pageModel.InitAsync(data);
targetPage.BindingContext = pageModel;
return targetPage;
}
diff --git a/src/FreshMvvm/NavigationContainers/FreshMasterDetailNavigationContainer.cs b/src/FreshMvvm/NavigationContainers/FreshMasterDetailNavigationContainer.cs
index ea24df1..263ac92 100644
--- a/src/FreshMvvm/NavigationContainers/FreshMasterDetailNavigationContainer.cs
+++ b/src/FreshMvvm/NavigationContainers/FreshMasterDetailNavigationContainer.cs
@@ -39,9 +39,9 @@ protected virtual void RegisterNavigation ()
FreshIOC.Container.Register (this, NavigationServiceName);
}
- public virtual void AddPage (string title, object data = null) where T : FreshBasePageModel
+ public virtual async Task AddPage(string title, object data = null) where T : FreshBasePageModel
{
- var page = FreshPageModelResolver.ResolvePageModel (data);
+ var page = await FreshPageModelResolver.ResolvePageModel (data);
page.GetModel ().CurrentNavigationServiceName = NavigationServiceName;
_pagesInner.Add(page);
var navigationContainer = CreateContainerPage (page);
@@ -50,10 +50,10 @@ public virtual void AddPage (string title, object data = null) where T : Fres
if (_pages.Count == 1)
Detail = navigationContainer;
}
- public virtual void AddPage(string modelName, string title, object data = null)
+ public virtual async Task AddPage(string modelName, string title, object data = null)
{
var pageModelType = Type.GetType(modelName);
- var page = FreshPageModelResolver.ResolvePageModel(pageModelType, null);
+ var page = await FreshPageModelResolver.ResolvePageModel(pageModelType, null);
page.GetModel().CurrentNavigationServiceName = NavigationServiceName;
_pagesInner.Add(page);
var navigationContainer = CreateContainerPage(page);
diff --git a/src/FreshMvvm/NavigationContainers/FreshNavigationContainer.cs b/src/FreshMvvm/NavigationContainers/FreshNavigationContainer.cs
index 2d94bd8..1ea4a2c 100644
--- a/src/FreshMvvm/NavigationContainers/FreshNavigationContainer.cs
+++ b/src/FreshMvvm/NavigationContainers/FreshNavigationContainer.cs
@@ -41,14 +41,15 @@ protected virtual Page CreateContainerPage (Page page)
return new NavigationPage (page);
}
- public virtual Task PushPage (Xamarin.Forms.Page page, FreshBasePageModel model, bool modal = false, bool animate = true)
+ public virtual async Task PushPage(Xamarin.Forms.Page page, FreshBasePageModel model, bool modal = false, bool animate = true)
{
if (modal)
- return Navigation.PushModalAsync (CreateContainerPageSafe (page), animate);
- return Navigation.PushAsync (page, animate);
+ await Navigation.PushModalAsync(CreateContainerPageSafe(page), animate);
+
+ await Navigation.PushAsync(page, animate);
}
- public virtual Task PopPage (bool modal = false, bool animate = true)
+ public virtual Task PopPage (bool modal = false, bool animate = true)
{
if (modal)
return Navigation.PopModalAsync (animate);
diff --git a/src/FreshMvvm/NavigationContainers/FreshTabbedFONavigationContainer.cs b/src/FreshMvvm/NavigationContainers/FreshTabbedFONavigationContainer.cs
index cc45d07..3a1c1d0 100644
--- a/src/FreshMvvm/NavigationContainers/FreshTabbedFONavigationContainer.cs
+++ b/src/FreshMvvm/NavigationContainers/FreshTabbedFONavigationContainer.cs
@@ -33,9 +33,9 @@ protected void RegisterNavigation ()
FreshIOC.Container.Register (this, NavigationServiceName);
}
- public virtual Page AddTab (string title, string icon, object data = null) where T : FreshBasePageModel
+ public virtual async Task AddTab(string title, string icon, object data = null) where T : FreshBasePageModel
{
- var page = FreshPageModelResolver.ResolvePageModel (data);
+ var page = await FreshPageModelResolver.ResolvePageModel (data);
page.GetModel ().CurrentNavigationServiceName = NavigationServiceName;
_tabs.Add (page);
var container = CreateContainerPageSafe (page);
diff --git a/src/FreshMvvm/NavigationContainers/FreshTabbedNavigationContainer.cs b/src/FreshMvvm/NavigationContainers/FreshTabbedNavigationContainer.cs
index 610e898..5258e42 100644
--- a/src/FreshMvvm/NavigationContainers/FreshTabbedNavigationContainer.cs
+++ b/src/FreshMvvm/NavigationContainers/FreshTabbedNavigationContainer.cs
@@ -27,9 +27,9 @@ protected void RegisterNavigation ()
FreshIOC.Container.Register (this, NavigationServiceName);
}
- public virtual Page AddTab (string title, string icon, object data = null) where T : FreshBasePageModel
+ public virtual async Task AddTab(string title, string icon, object data = null) where T : FreshBasePageModel
{
- var page = FreshPageModelResolver.ResolvePageModel (data);
+ var page = await FreshPageModelResolver.ResolvePageModel (data);
page.GetModel ().CurrentNavigationServiceName = NavigationServiceName;
_tabs.Add (page);
var navigationContainer = CreateContainerPageSafe (page);
diff --git a/src/FreshMvvm/PageModelCoreMethods.cs b/src/FreshMvvm/PageModelCoreMethods.cs
index ad089de..aebb223 100644
--- a/src/FreshMvvm/PageModelCoreMethods.cs
+++ b/src/FreshMvvm/PageModelCoreMethods.cs
@@ -56,7 +56,7 @@ public async Task PushPageModel (object data, bool modal = false, bool
{
T pageModel = FreshIOC.Container.Resolve ();
TPage page = FreshIOC.Container.Resolve();
- FreshPageModelResolver.BindingPageModel(data, page, pageModel);
+ await FreshPageModelResolver.BindingPageModel(data, page, pageModel);
await PushPageModelWithPage(page, pageModel, data, modal, animate);
}
@@ -74,7 +74,7 @@ public Task PushPageModel(Type pageModelType, object data, bool modal = false, b
async Task PushPageModel(FreshBasePageModel pageModel, object data, bool modal = false, bool animate = true)
{
- var page = FreshPageModelResolver.ResolvePageModel(data, pageModel);
+ var page = await FreshPageModelResolver.ResolvePageModel(data, pageModel);
await PushPageModelWithPage(page, pageModel, data, modal, animate);
}
@@ -133,14 +133,14 @@ public async Task PopPageModel (object data, bool modal = false, bool animate =
await PopPageModel (modal, animate);
}
- public Task PushPageModel (bool animate = true) where T : FreshBasePageModel
+ public async Task PushPageModel(bool animate = true) where T : FreshBasePageModel
{
- return PushPageModel (null, false, animate);
+ await PushPageModel(null, false, animate);
}
- public Task PushPageModel (bool animate = true) where T : FreshBasePageModel where TPage : Page
+ public async Task PushPageModel(bool animate = true) where T : FreshBasePageModel where TPage : Page
{
- return PushPageModel (null, animate);
+ await PushPageModel(null, animate);
}
public Task PushNewNavigationServiceModal (FreshTabbedNavigationContainer tabbedNavigationContainer, FreshBasePageModel basePageModel = null, bool animate = true)
@@ -167,9 +167,9 @@ public Task PushNewNavigationServiceModal (FreshMasterDetailNavigationContainer
return PushNewNavigationServiceModal (masterDetailContainer, models.ToArray(), animate);
}
- public Task PushNewNavigationServiceModal (IFreshNavigationService newNavigationService, FreshBasePageModel basePageModels, bool animate = true)
+ public async Task PushNewNavigationServiceModal (IFreshNavigationService newNavigationService, FreshBasePageModel basePageModels, bool animate = true)
{
- return PushNewNavigationServiceModal (newNavigationService, new FreshBasePageModel[] { basePageModels }, animate);
+ await PushNewNavigationServiceModal (newNavigationService, new FreshBasePageModel[] { basePageModels }, animate);
}
public async Task PushNewNavigationServiceModal (IFreshNavigationService newNavigationService, FreshBasePageModel[] basePageModels, bool animate = true)
@@ -195,7 +195,7 @@ public void SwitchOutRootNavigation (string navigationServiceName)
if (!(rootNavigation is Page))
throw new Exception("Navigation service is not a page");
- Xamarin.Forms.Application.Current.MainPage = rootNavigation as Page;
+ Application.Current.MainPage = rootNavigation as Page;
}
public async Task PopModalNavigationService(bool animate = true)
@@ -238,7 +238,7 @@ public Task SwitchSelectedMaster() where T : FreshBasePag
public async Task PushPageModelWithNewNavigation (object data, bool animate = true) where T : FreshBasePageModel
{
- var page = FreshPageModelResolver.ResolvePageModel(data);
+ var page = await FreshPageModelResolver.ResolvePageModel(data);
var navigationName = Guid.NewGuid().ToString();
var naviationContainer = new FreshNavigationContainer(page, navigationName);
await PushNewNavigationServiceModal(naviationContainer, page.GetModel(), animate);