The49.Maui.BottomSheet
1.0.0-alpha1
See the version list below for details.
dotnet add package The49.Maui.BottomSheet --version 1.0.0-alpha1
NuGet\Install-Package The49.Maui.BottomSheet -Version 1.0.0-alpha1
<PackageReference Include="The49.Maui.BottomSheet" Version="1.0.0-alpha1" />
paket add The49.Maui.BottomSheet --version 1.0.0-alpha1
#r "nuget: The49.Maui.BottomSheet, 1.0.0-alpha1"
// Install The49.Maui.BottomSheet as a Cake Addin #addin nuget:?package=The49.Maui.BottomSheet&version=1.0.0-alpha1&prerelease // Install The49.Maui.BottomSheet as a Cake Tool #tool nuget:?package=The49.Maui.BottomSheet&version=1.0.0-alpha1&prerelease
What is Maui.BottomSheet?
Maui.BottomSheet is a .NET MAUI library used to display pages as Bottom Sheets.
Setup
Enable this plugin by calling UseBottomSheet()
in your MauiProgram.cs
using Maui.Insets;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
// Initialise the plugin
builder
.UseMauiApp<App>()
.UseBottomSheet();
// the rest of your logic...
}
}
XAML usage
In order to make use of the plugin within XAML you can use this namespace:
xmlns:the49="https://schemas.the49.com/dotnet/2023/maui"
Quick usage
Simply create a ContentPage
. Replace the extended class with BottomSheetPage
in code-behind and in XAML:
using The49.Maui.BottomSheet;
public class MySheetPage : BottomSheetPage
{
public MySheetPage()
{
InitializeComponent();
}
}
<the49:BottomSheetPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:the49="https://schemas.the49.com/dotnet/2023/maui"
x:Class="MyApp.MySheetPage"
Title="MySheetPage">
</the49:BottomSheetPage>
The sheet can be opened by calling the Show(Window)
method of the page. It can be closed using Dismiss()
:
const page = new MySheetPage();
// Pass the window in which the sheet should show. Usually accessible from any other page of the app.
page.Show(Window);
// Call to programatically close the sheet
page.Dismiss();
API
This library offers a BottomSheetPage
, an extension of the ContentPage
with extra functionality
Properties
The following properties are available to use:
Name | Type | Default value | Description | Android | iOS |
---|---|---|---|---|---|
IsModal | bool |
false |
Displays the sheet as modal. This has no effect on whether or not the sheet can be dismissed using gestures. | ✅ | ❌* |
ShowHandle | bool |
false |
If true, display a drag handle at the top of the sheet | ✅ | ✅ |
Cancelable | bool |
true |
If true, prevents the dismissal of the sheet with user gestures | ✅ | ✅ |
Detents | DetentsCollection |
new DetentsCollection() { new ContentDetent() }) |
A collection of detents where the sheet will snap to when dragged. (See the Detents section for more info) | ✅ | ✅ |
* iOS doesn't support the property largestUndimmedDetentIdentifier
for custom detents as of right now. See iOS documentation
Detents:
Detents are snap point at which the sheet will stop when a drag gesture is released See iOS definition.
On Android only 3 detents are supported (See implemenation section for more info).
On iOS, detents are only fully supported for iOS 16 and up. On iOS 15, medium and large detents are used instead See iOS documentation.
Available detents
Name | Parameter | Description |
---|---|---|
FullscreenDetent |
Full height of the screen | |
ContentDetent |
Calculates the height of the page's content | |
AnchorDetent |
Anchor |
Anchor expects a View and will set its height to the Y position of that view. This is used to peek some content, then reveal more when the sheet is dragged up |
HeightDetent |
Height |
Use a dp value to specify the detent height |
RatioDetent |
Ratio |
Use a ratio of the full screen height |
Example:
<the49:BottomSheetPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:the49="https://schemas.the49.com/dotnet/2023/maui"
x:Class="MyApp.SheetPage"
Title="SheetPage">
<the49:BottomSheetPage.Detents>
<the49:FullscreenDetent />
<the49:ContentDetent />
<the49:HeightDetent Height="120" />
<the49:RatioDetent Height="0.45" />
<the49:AnchorDetent Anchor="{x:Reference divider}" />
</the49:BottomSheetPage.Detents>
<VerticalStackLayout Spacing="16">
<VerticalStackLayout>
</VerticalStackLayout>
<BoxView x:Name="divider" />
<VerticalStackLayout>
</VerticalStackLayout>
</VerticalStackLayout>
</the49:BottomSheetPage>
Custom detent
You can create a custom detent by extending the default Detent
class and implementing its GetHeight
abstract method
Implementation details
iOS
The bottom sheet on iOS is presented using the UIViewController
's PresentViewController
and configuring the sheet with UISheetPresentationController.
Detents are created using the custom method
Android
The Material library's bottom sheet is used.
Standard sheets attach a CoordinatorLayout
to the navigation view and insert a FrameLayout
with the com.google.android.material.bottomsheet.BottomSheetBehavior
Behavior.
Modal sheets use a BottomSheetDialogFragment
Detents are created using a combination of expandedOffset, halfExpandedRatio and peekHeight. These are the only configurable stop points for the bottom sheets, and that is why this library only supports up to 3 detents on Android.
Made within The49
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-android33.0 is compatible. net7.0-ios was computed. net7.0-ios16.1 is compatible. net7.0-maccatalyst was computed. net7.0-maccatalyst16.1 is compatible. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net7.0-windows10.0.19041 is compatible. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net7.0
- M.BindableProperty.Generator (>= 0.9.3)
-
net7.0-android33.0
- M.BindableProperty.Generator (>= 0.9.3)
-
net7.0-ios16.1
- M.BindableProperty.Generator (>= 0.9.3)
-
net7.0-maccatalyst16.1
- M.BindableProperty.Generator (>= 0.9.3)
-
net7.0-windows10.0.19041
- M.BindableProperty.Generator (>= 0.9.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on The49.Maui.BottomSheet:
Repository | Stars |
---|---|
Dreamescaper/BlazorBindings.Maui
MAUI Blazor Bindings - Build native and hybrid MAUI apps with Blazor
|
|
securefolderfs-community/SecureFolderFS
Powerful, secure, modern way to keep your files protected.
|
Version | Downloads | Last updated |
---|---|---|
8.0.3 | 75,897 | 2/13/2024 |
8.0.2 | 14,926 | 1/16/2024 |
8.0.1 | 1,280 | 1/12/2024 |
8.0.0 | 592 | 1/11/2024 |
1.0.4 | 15,876 | 10/13/2023 |
1.0.3 | 2,917 | 9/20/2023 |
1.0.2 | 1,145 | 9/13/2023 |
1.0.1 | 8,334 | 7/13/2023 |
1.0.0 | 994 | 7/10/2023 |
1.0.0-rc9 | 4,576 | 7/3/2023 |
1.0.0-rc8 | 1,103 | 6/29/2023 |
1.0.0-rc7 | 445 | 6/28/2023 |
1.0.0-rc6 | 623 | 6/27/2023 |
1.0.0-rc5 | 770 | 6/21/2023 |
1.0.0-rc4 | 613 | 6/19/2023 |
1.0.0-rc3 | 483 | 6/16/2023 |
1.0.0-rc2 | 2,007 | 5/26/2023 |
1.0.0-rc12 | 402 | 7/7/2023 |
1.0.0-rc11 | 425 | 7/6/2023 |
1.0.0-rc10 | 358 | 7/6/2023 |
1.0.0-rc1 | 785 | 5/20/2023 |
1.0.0-alpha7 | 791 | 5/9/2023 |
1.0.0-alpha6 | 1,960 | 4/25/2023 |
1.0.0-alpha5 | 424 | 4/24/2023 |
1.0.0-alpha4 | 1,038 | 2/8/2023 |
1.0.0-alpha3 | 420 | 2/8/2023 |
1.0.0-alpha2 | 427 | 2/8/2023 |
1.0.0-alpha1 | 464 | 1/17/2023 |