Plugin.Maui.BottomSheet 0.0.3-alpha

This is a prerelease version of Plugin.Maui.BottomSheet.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Plugin.Maui.BottomSheet --version 0.0.3-alpha                
NuGet\Install-Package Plugin.Maui.BottomSheet -Version 0.0.3-alpha                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Plugin.Maui.BottomSheet" Version="0.0.3-alpha" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Plugin.Maui.BottomSheet --version 0.0.3-alpha                
#r "nuget: Plugin.Maui.BottomSheet, 0.0.3-alpha"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Plugin.Maui.BottomSheet as a Cake Addin
#addin nuget:?package=Plugin.Maui.BottomSheet&version=0.0.3-alpha&prerelease

// Install Plugin.Maui.BottomSheet as a Cake Tool
#tool nuget:?package=Plugin.Maui.BottomSheet&version=0.0.3-alpha&prerelease                

Plugin.Maui.BottomSheet

Show native BottomSheets with .NET MAUI!

This library comes with a built-in NavigationService to make navigation between BottomSheets und Pages easy!

<img src="screenshots/welcome.png?raw=true" height="400"/> <img src="screenshots/demo.gif" height="400" /> <img src="screenshots/navigation.gif" height="400" />

Samples

<strong>Check out the sample project to explore all features!</strong>.

Prerequisites

iOS at least iOS 15

Android at least API 21

Setup

Enable this plugin by calling UseBottomSheet() in your MauiProgram.cs

var builder = MauiApp.CreateBuilder();
builder
  .UseMauiApp<App>()
  .UseMauiBottomSheet()
  .ConfigureFonts(fonts =>
  {
    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
  })
  .RegisterPages()
  .RegisterViewModels()
  .PlatformServices();

#if DEBUG
builder.Logging.AddDebug();
#endif

return builder.Build();

Bottom Sheet Control

Properties

All properties expect ContentTemplate, TitleViewTemplate and Peek.PeekViewDataTemplate are BindableProperties

IsOpen Open or close the BottomSheet

ContentTemplate Content of the BottomSheet.

Peek Peek settings | Setting | Decription | | -------- | ------- | | IgnoreSafeArea | Bottom safe area will either be ignored or not | | PeekHeight | Static value for the peek height | | PeekViewDataTemplate | If set the view will be placed above the ContentTemplate and it's height will be set as peek height |

Appearance

IsDraggable Disable/Enable dragging(especially usefull if drawing gestures are made inside the bottom sheet)

HasHandle Display a drag handle at the top of the BottomSheet

ShowHeader Display a header at the top of the BottomSheet

TopLeftButtonText Text of top left button

TopRightButtonText Text of top right button

TitleText BottomSheet title

TitleViewTemplate Custom title view.

HeaderAppearance Define the look of the header | BottomSheetHeaderAppearanceMode | Decription | | -------- | ------- | | None | Do not show a button | | LeftAndRightButton | Show a button at the top lef and at the top right | | LeftButton | Show a button at the top left | | RightButton | Show a button at the top right |

States

SheetStates Allowed states of the BottomSheet | BottomSheetState | Decription | | -------- | ------- | | Unknown | BottomSheet can be all available states | | Peek | Only BottomSheet.Peek is visible. Expanding not allowed | | Medium | BottomSheet height will be half of the sceen. Expanding/collapsing not allowed | | Large | BottomSheet will be display in full screen. Expanding/collapsing not allowed | | All | BottomSheet can be all available states |

SelectedSheetState Change the current Sheet state. Sheet will be expanded/collapsed if the selected state is allowed.

Interaction

Commands

TopRightButtonCommand TopRightButtonCommandParameter

TopLeftButtonCommand TopLeftButtonCommandParameter

ClosingCommand ClosingCommandParameter

ClosedCommand ClosedCommandParameter

OpeningCommand OpeningCommandParameter

OpenedCommand OpenedCommandParameter

Events

Closing Closed Opening Opened

XAML usage

In order to make use of the sheet within XAML you can use this namespace:

'xmlns:bottomsheet="clr-namespace:Maui.BottomSheet;assembly=Maui.BottomSheet"'

The BottomSheet is a View and can be added in any layout or control which accepts View. To open/close a BottomSheet simply set the IsOpen property to true/false. You can have <strong>multiple</strong> BottomSheets on one page.

<bottomsheet:BottomSheet IsOpen="True">
    <bottomsheet:BottomSheet.ContentTemplate>
        <DataTemplate>
            <VerticalStackLayout>
                <Label Text="I'm a simple BottomSheet!/>
            </VerticalStackLayout>
        </DataTemplate>
    </bottomsheet:BottomSheet.ContentTemplate>
</bottomsheet:BottomSheet>

The IBottomSheetNavigationService is be registered automatically and can be resolved by DI.

private readonly IBottomSheetNavigationService _bottomSheetNavigationService;

public MainViewModel(IBottomSheetNavigationService bottomSheetNavigationService)
{
  _bottomSheetNavigationService = bottomSheetNavigationService;
}

To navigate to a BottomSheet you have to register the BottomSheets and ViewModels

builder.Services.AddTransient<BottomSheetVMViewModel>();
builder.Services.AddTransient<BottomSheetGoBackViewModel>();

builder.Services.AddTransient<IBottomSheet, BottomSheetNoVM>();
builder.Services.AddTransient<IBottomSheet, BottomSheetVM>();
builder.Services.AddTransient<IBottomSheet, BottomSheetGoBack>();

Navigate to a BottomSheet and wire it automatically to the specified ViewModel or navigate to a BottomSheet without a ViewModel

_bottomSheetNavigationService.NavigateTo<BottomSheetNoVM>();
_bottomSheetNavigationService.NavigateTo<BottomSheetVM, BottomSheetVMViewModel>();

To close a BottomSheet simply call GoBack or ClearBottomSheetStack(if you have multiple sheets open and want to close all of them)

You can pass parameters on each navigation(this follows the principle of shell navigation) Pass an instance of the BottomSheetNavigationParameters to the navigation and if the target ViewModel implements IQueryAttributable the parameters will be applied.

<img src="screenshots/navigation.gif" height="400" />

Product Compatible and additional computed target framework versions.
.NET net7.0-android33.0 is compatible.  net7.0-ios16.1 is compatible.  net8.0-android was computed.  net8.0-android34.0 is compatible.  net8.0-ios was computed.  net8.0-ios17.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.2 318 9/30/2024
1.0.1 100 9/29/2024
1.0.0 882 12/10/2023
0.0.4-alpha 113 12/10/2023
0.0.3-alpha 137 11/21/2023
0.0.2-alpha 108 11/19/2023
0.0.1-alpha 102 11/19/2023