Skip to content

Commit

Permalink
Fix: Prism InitializeAsync breadcrumb not loading (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
IeuanWalker committed May 3, 2022
1 parent be922b9 commit 3e81b41
Show file tree
Hide file tree
Showing 11 changed files with 46,543 additions and 14,140 deletions.
11 changes: 7 additions & 4 deletions DemoApp/DemoApp.Android/DemoApp.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,14 @@
<PackageReference Include="Xamarin.Android.Support.Compat">
<Version>28.0.0.3</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat.Resources">
<Version>1.1.0</Version>
<PackageReference Include="Xamarin.AndroidX.Core">
<Version>1.6.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2012" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.3.0.1" />
<PackageReference Include="Xamarin.CommunityToolkit">
<Version>2.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2291" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.4.0.2" />
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.3.0" />
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.7" />
<PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.8" />
Expand Down
29,472 changes: 20,657 additions & 8,815 deletions DemoApp/DemoApp.Android/Resources/Resource.designer.cs

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion DemoApp/DemoApp.iOS/DemoApp.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,10 @@
<Reference Include="System.Numerics.Vectors" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2012" />
<PackageReference Include="Xamarin.CommunityToolkit">
<Version>2.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2291" />
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
Expand Down
3 changes: 2 additions & 1 deletion DemoApp/DemoApp/DemoApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2012" />
<PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.2" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2291" />
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
</ItemGroup>

Expand Down
3 changes: 2 additions & 1 deletion NuGet/Xamarin.Forms.Breadcrumb.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
<icon>logo.png</icon>
<dependencies>
<group>
<dependency id="Xamarin.Forms" version="5.0.0.2012" />
<dependency id="Xamarin.Forms" version="5.0.0.2291" />
<dependency id="Xamarin.Forms.PancakeView" version="1.4.2" />
<dependency id="Xamarin.CommunityToolkit" version="2.0.2" />
</group>
</dependencies>
</metadata>
Expand Down
10 changes: 8 additions & 2 deletions Src/Breadcrumb.Android/Breadcrumb.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,16 @@
<Version>28.0.0.3</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.2.0.5" />
<PackageReference Include="Xamarin.AndroidX.Core">
<Version>1.6.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.CommunityToolkit">
<Version>2.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms">
<Version>5.0.0.2012</Version>
<Version>5.0.0.2291</Version>
</PackageReference>
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0.1" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.4.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Breadcrumb\Breadcrumb.csproj">
Expand Down
31,034 changes: 25,785 additions & 5,249 deletions Src/Breadcrumb.Android/Resources/Resource.designer.cs

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion Src/Breadcrumb.iOS/Breadcrumb.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,11 @@
<PackageReference Include="WebP.Touch">
<Version>1.0.8</Version>
</PackageReference>
<PackageReference Include="Xamarin.CommunityToolkit">
<Version>2.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms">
<Version>5.0.0.2012</Version>
<Version>5.0.0.2291</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
Expand Down
3 changes: 2 additions & 1 deletion Src/Breadcrumb/Breadcrumb.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2012" />
<PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.2" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2291" />
<PackageReference Include="Xamarin.Forms.PancakeView" Version="1.4.2" />
</ItemGroup>

Expand Down
4 changes: 4 additions & 0 deletions Src/Breadcrumb/Breadcrumb.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@
<ContentView x:Class="Breadcrumb.Breadcrumb"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
AutomationProperties.IsInAccessibleTree="False"
IsVisible="False">
<ContentView.Effects>
<xct:LifecycleEffect Loaded="LifecycleEffect_Loaded" />
</ContentView.Effects>
<ContentView.Content>
<ScrollView x:Name="BreadCrumbsScrollView"
AutomationProperties.IsInAccessibleTree="False"
Expand Down
133 changes: 68 additions & 65 deletions Src/Breadcrumb/Breadcrumb.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,71 +135,6 @@ public bool IsNavigationEnabled
public Breadcrumb()
{
InitializeComponent();

// Event fired the moment ContentView is displayed
Device.BeginInvokeOnMainThread(async () =>
{
// Get list of all pages in the NavigationStack that has a selectedPage title
List<Page> pages = Navigation.NavigationStack.Select(x => x).Where(x => !string.IsNullOrEmpty(x?.Title)).ToList();
// If any pages, make the control visible
IsVisible = pages.Count > 0;
// Loop all pages
foreach (Page page in pages)
{
if (!page.Equals(pages.LastOrDefault()))
{
// Create breadcrumb
PancakeView breadCrumb1 = BreadCrumbLabelCreator(page, false, page.Equals(pages.FirstOrDefault()));
// Add tap gesture
if (IsNavigationEnabled)
{
TapGestureRecognizer tapGesture = new()
{
CommandParameter = page,
Command = new Command<Page>(async item => await GoBack(item).ConfigureAwait(false))
};
breadCrumb1.GestureRecognizers.Add(tapGesture);
}
// Add breadcrumb and separator to BreadCrumbContainer
BreadCrumbContainer.Children.Add(breadCrumb1);
// Add separator
Image separator = new()
{
Source = Separator,
VerticalOptions = LayoutOptions.Center
};
AutomationProperties.SetIsInAccessibleTree(separator, false);
BreadCrumbContainer.Children.Add(separator);
continue;
}
// Add ChildAdded event to trigger animation
BreadCrumbContainer.ChildAdded += AnimatedStack_ChildAdded;
// Create selectedPage title label
PancakeView breadCrumb2 = BreadCrumbLabelCreator(page, true, page.Equals(pages.FirstOrDefault()));
// Move BreadCrumb of selectedPage to start the animation
breadCrumb2.TranslationX = Application.Current.MainPage.Width;
// Scroll to end of control
await Task.Delay(10);
await BreadCrumbsScrollView.ScrollToAsync(BreadCrumbContainer, ScrollToPosition.End, false);
// Add breadcrumb to container
BreadCrumbContainer.Children.Add(breadCrumb2);
// Scroll to last breadcrumb
await BreadCrumbsScrollView.ScrollToAsync(BreadCrumbContainer, ScrollToPosition.End, AnimationSpeed != 0);
}
});
}

/// <summary>
Expand Down Expand Up @@ -328,5 +263,73 @@ private async Task GoBack(Page selectedPage)
// Remove current page
await Navigation.PopAsync();
}

private void LifecycleEffect_Loaded(object sender, System.EventArgs e)
{
// Event fired the moment ContentView is displayed
Device.BeginInvokeOnMainThread(async () =>
{
// Get list of all pages in the NavigationStack that has a selectedPage title
List<Page> pages = Navigation.NavigationStack.Select(x => x).Where(x => !string.IsNullOrEmpty(x?.Title)).ToList();
// If any pages, make the control visible
IsVisible = pages.Count > 0;
// Loop all pages
foreach (Page page in pages)
{
if (!page.Equals(pages.LastOrDefault()))
{
// Create breadcrumb
PancakeView breadCrumb1 = BreadCrumbLabelCreator(page, false, page.Equals(pages.FirstOrDefault()));
// Add tap gesture
if (IsNavigationEnabled)
{
TapGestureRecognizer tapGesture = new()
{
CommandParameter = page,
Command = new Command<Page>(async item => await GoBack(item).ConfigureAwait(false))
};
breadCrumb1.GestureRecognizers.Add(tapGesture);
}
// Add breadcrumb and separator to BreadCrumbContainer
BreadCrumbContainer.Children.Add(breadCrumb1);
// Add separator
Image separator = new()
{
Source = Separator,
VerticalOptions = LayoutOptions.Center
};
AutomationProperties.SetIsInAccessibleTree(separator, false);
BreadCrumbContainer.Children.Add(separator);
continue;
}
// Add ChildAdded event to trigger animation
BreadCrumbContainer.ChildAdded += AnimatedStack_ChildAdded;
// Create selectedPage title label
PancakeView breadCrumb2 = BreadCrumbLabelCreator(page, true, page.Equals(pages.FirstOrDefault()));
// Move BreadCrumb of selectedPage to start the animation
breadCrumb2.TranslationX = Application.Current.MainPage.Width;
// Scroll to end of control
await Task.Delay(10);
await BreadCrumbsScrollView.ScrollToAsync(BreadCrumbContainer, ScrollToPosition.End, false);
// Add breadcrumb to container
BreadCrumbContainer.Children.Add(breadCrumb2);
// Scroll to last breadcrumb
await BreadCrumbsScrollView.ScrollToAsync(BreadCrumbContainer, ScrollToPosition.End, AnimationSpeed != 0);
}
});
}
}
}

0 comments on commit 3e81b41

Please sign in to comment.