< Summary - ZhEaIsNsAaBn.Libraries coverage (affected: 23 packages)

Information
Line coverage
94%
Covered lines: 16
Uncovered lines: 1
Coverable lines: 17
Total lines: 75
Line coverage: 94.1%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
get_NavigationParameters()100%11100%
set_NavigationParameters(...)100%11100%
LoadViewAsync()100%11100%
CreateView()50%2266.66%
OnNavigationParametersChanged(...)100%11100%
InitializeViewModel()87.5%88100%

File(s)

/home/runner/work/ZhEaIsNsAaBn.Libraries.V1/ZhEaIsNsAaBn.Libraries.V1/src/UtilitiesPackages/ZhEaIsNsAaBn.Xamarin/LazyView/PrismLazyView.cs

#LineLine coverage
 1using Prism;
 2using Prism.Navigation;
 3using Xamarin.CommunityToolkit.UI.Views;
 4using Xamarin.Forms;
 5
 6namespace ZhEaIsNsAaBn.Xamarin;
 7
 8/// <summary>
 9/// A Xamarin.CommunityToolkit lazy view that resolves <typeparamref name="TView"/> through Prism, so the view gets its 
 10/// Prism view model (and regions work), then passes <see cref="NavigationParameters"/> to that view model.
 11/// </summary>
 12/// <typeparam name="TView">The view to load lazily.</typeparam>
 13public class PrismLazyView< TView > : BaseLazyView
 14    where TView : View, new()
 15{
 16    /// <summary>Bindable property for <see cref="NavigationParameters"/> (Xamarin.Forms convention: public static field
 317    public static readonly BindableProperty NavigationParametersProperty = BindableProperty.Create( nameof( NavigationPa
 318                                                                                                     typeof( INavigation
 319                                                                                                     typeof( PrismLazyVi
 320                                                                                                     propertyChanged: On
 21
 22
 23    /// <summary>
 24    /// Parameters for the view model (<see cref="IPrismLazyViewModel.LazyLoadInitialize"/>). Passed after the view load
 25    /// again on every change, including changes through a binding. Default: none (an empty set is passed).
 26    /// </summary>
 27    public INavigationParameters? NavigationParameters
 28    {
 1229        get => (INavigationParameters?)GetValue( NavigationParametersProperty );
 330        set => SetValue( NavigationParametersProperty, value );
 31    }
 32
 33
 34    /// <summary>
 35    /// Creates the view with <see cref="CreateView"/>, shows it, marks the view as loaded, then calls
 36    /// <see cref="IPrismLazyViewModel.LazyLoadInitialize"/> if the view's binding context implements it.
 37    /// </summary>
 38    /// <returns>A completed task.</returns>
 39    /// <exception cref="InvalidOperationException">The app is not a Prism application (see <see cref="CreateView"/>).</
 40    public override ValueTask LoadViewAsync()
 41    {
 1542        Content = CreateView();
 43
 1244        SetIsLoaded( true );
 1245        InitializeViewModel();
 46
 1247        return default;
 48    }
 49
 50    /// <summary>Creates the view. Default: resolves <typeparamref name="TView"/> from the Prism container.</summary>
 51    /// <returns>The view to show.</returns>
 52    /// <exception cref="InvalidOperationException"><see cref="Application.Current"/> is not a <see cref="PrismApplicati
 53    protected virtual TView CreateView()
 54    {
 355        if ( Application.Current is not PrismApplicationBase application )
 56        {
 357            throw new InvalidOperationException( "PrismLazyView needs a Prism application: Application.Current must deri
 58        }
 59
 60
 061        return (TView)application.Container.Resolve( typeof( TView ) );
 62    }
 63
 64
 65    private static void OnNavigationParametersChanged( BindableObject bindable, object? oldValue, object? newValue )
 666        => ( (PrismLazyView<TView>)bindable ).InitializeViewModel();
 67
 68    private void InitializeViewModel()
 69    {
 1870        if ( IsLoaded && Content?.BindingContext is IPrismLazyViewModel viewModel )
 71        {
 1272            viewModel.LazyLoadInitialize( NavigationParameters ?? new NavigationParameters() );
 73        }
 1874    }
 75}