# bottomsheet

Published articles for bottomsheet.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Building a Google Maps Style Bottom Sheet with Jetpack Compose

DevFeed: [Building a Google Maps Style Bottom Sheet with Jetpack Compose](<https://devfeed.tech/articles/building-a-google-maps-style-bottom-sheet-with-jetpack-compose-25920.md>)

Original publisher: [Read original article](<https://proandroiddev.com/building-a-google-maps-style-bottom-sheet-with-jetpack-compose-eccc1f3cf578?source=rss-9bb203a4ab2e------2>)

Author: Jaewoong Eum

Published: 2026-02-15T07:34:23Z

Content type: tutorial

Language: en

Sources: [Stories by Jaewoong Eum on Medium](<https://devfeed.tech/sources/stories-by-jaewoong-eum-on-medium.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [dialog](<https://devfeed.tech/tags/dialog.md>), [draggable](<https://devfeed.tech/tags/draggable.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how to build a Google Maps-style bottom sheet with Jetpack Compose using FlexibleBottomSheet. It covers three expansion states, non-modal interaction, state-dependent content, programmatic transitions, nested scrolling, and dynamic content sizing.

### Source excerpt

Google Maps popularized a bottom sheet pattern that most Android developers recognize immediately: a small panel peeking from the bottom of the screen, expandable to a mid height for quick details, and draggable to full screen for comprehensive information. The user interacts with the map behind the sheet at all times. This pattern looks simple on the surface, but implementing it correctly requires solving several problems: multi state anchoring, non modal interaction, dynamic content adaptation, and nested scroll coordination. Jetpack Compose's standard ModalBottomSheet only supports two states (expanded and hidden) and blocks background interaction with a scrim, making it unsuitable for this use case. In this article, you'll explore how to build a Google Maps style bottom sheet using FlexibleBottomSheet, covering how to configure three expansion states with custom height ratios, how to enable non modal mode so users can interact with the content behind the sheet, how to adapt your UI dynamically based on the sheet's current state, how to control state transitions programmatically, how to handle nested scrolling inside the sheet, and how to wrap content dynamically for variable height sheets. Why ModalBottomSheet falls short Consider the standard Material 3 bottom sheet: https://medium.com/media/8a38f40dd78c91260a666308710000ce/href This gives you two states: expanded and hidden. The sheet covers the background with a scrim, blocking all interaction behind it. For a confirmation dialog or action menu, this is fine. But for a Google Maps style experience, you need: Three visible states: A peek height showing a summary, a mid height for details, and a full height for comprehensive content. No scrim: The map behind the sheet must remain fully interactive. Dynamic content: The content should adapt based on the current expansion state. Nested scrolling: Scrollable content inside the fully expanded sheet should scroll naturally, and dragging down from the top of the scro

## Bottom sheet: Scrolling and interactions

DevFeed: [Bottom sheet: Scrolling and interactions](<https://devfeed.tech/articles/bottom-sheet-scrolling-and-interactions-38015.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/703260/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-12-06T10:44:58Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [.NET 9](<https://devfeed.tech/topics/net-9.md>)

Tags: [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [development](<https://devfeed.tech/tags/development.md>), [ios](<https://devfeed.tech/tags/ios.md>), [swift](<https://devfeed.tech/tags/swift.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

The concluding article in a series explains how to extend an iOS bottom sheet with scrolling content and swipe-to-dismiss interactions. It covers interactive transition progress, UIKit's transition driver support, and gesture tracking with a pan recognizer.

### Source excerpt

Отображать контент в виде bottom sheet -- задача со звёздочкой сама по себе, но когда контента становится больше, чем помещается на контроллере, всё становится ещё любопытней. В третьей и заключительной статье про bottom sheet мы: 1) Добавим возможность закрывать контроллеры, презентованные как bottom sheet с помощью свайпа по контенту. 2) Реализуем отображение контента, который не имеет собственных значений высоты для autoLayout (контент с прокруткой). Читать далее

## Bottom sheet: Navigation

DevFeed: [Bottom sheet: Navigation](<https://devfeed.tech/articles/bottom-sheet-navigation-38012.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/697626/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-11-28T11:11:09Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [navigation](<https://devfeed.tech/topics/navigation.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottom-sheet-behavior](<https://devfeed.tech/tags/bottom-sheet-behavior.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [ios](<https://devfeed.tech/tags/ios.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

This second article in a bottom sheet series explains how to implement full navigation within an iOS bottom sheet using Auto Layout. It presents a custom navigation controller that mirrors UINavigationController, manages child view controllers, and supports navigation transition animations and a navigation bar.

### Source excerpt

Это вторая статья из цикла про bottom sheet, в которой мы воссоздаём поведение платёжного фрагмента в Кошельке по образу и подобию Apple Pay и сталкиваемся с тем, что это не так то просто. Из материала вы узнаете, как повторить полноценную навигацию в рамках bottom sheet отображения, основанного на autolayout, а не на неудобном ручном расчёте высоты. А ещё мы вместе повторим анимации навигационных переходов и добавим navigation bar как нативный способ управления навигацией. Читать далее

## Bottom sheet: Custom transitioning

DevFeed: [Bottom sheet: Custom transitioning](<https://devfeed.tech/articles/bottom-sheet-custom-transitioning-38013.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/697962/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-11-17T14:46:51Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottom-sheet-behavior](<https://devfeed.tech/tags/bottom-sheet-behavior.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [custom](<https://devfeed.tech/tags/custom.md>), [ios](<https://devfeed.tech/tags/ios.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

This tutorial explains how to implement a custom transitioning delegate in an iOS application to present controllers as bottom sheets. It covers presentation and animation controllers, content-sized layout, and the example payment screen in the "Кошелёк" app.

### Source excerpt

Современные требования к дизайну мобильных приложений всё чаще подкидывают задачи по отображению контента со сложным поведением. Для его реализации необходимо понимание того, как работают кастомные презентация и транзишены. В этой статье я расскажу, как мы решили задачу по созданию экрана оплаты в приложении "Кошелёк" с помощью кастомной навигации между контроллерами, которые отображаются как bottom sheet. Читать далее

## How to animate BottomSheet content using Jetpack Compose

DevFeed: [How to animate BottomSheet content using Jetpack Compose](<https://devfeed.tech/articles/how-to-animate-bottomsheet-content-using-jetpack-compose-26018.md>)

Original publisher: [Read original article](<https://proandroiddev.com/how-to-animate-bottomsheet-content-using-jetpack-compose-3eab972b3bdc?source=rss-e93d234beac6------2>)

Author: Yahor Urbanovich

Published: 2021-08-09T13:10:56Z

Content type: tutorial

Language: en

Sources: [Stories by Yahor Urbanovich on Medium](<https://devfeed.tech/sources/stories-by-yahor-urbanovich-on-medium.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [animation](<https://devfeed.tech/tags/animation.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [code](<https://devfeed.tech/tags/code.md>), [experience](<https://devfeed.tech/tags/experience.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on animating BottomSheet content with Jetpack Compose. It compares existing Compose examples, explains their state and visibility handling, and introduces a simpler approach using Compose BottomSheet APIs.

### Source excerpt

Note: Everything in this post related to Compose 1.0.1 and maybe in the future Google will introduce a new API and approaches like Compose MotionLayout 🐰 Early this year I started a new pet project for listening to random radio from over the world. The UI at the beginning was very simple and clear, just a logo with the station name and necessary controls. The main functionality is integration with Android Auto, but it is a topic for a separate story (just ask in the comments if you are interested in this theme). First app iteration Using the application, it became necessary to see user liked stations, other categories separated by genre and country. The idea is to make a Home screen with a list of different information and player which can be shown and hidden on the screen. Final resultFind available solutions As a normal developer, I started to research existing compose projects to find already implemented functionality. The official and community samples contain only the UI part and don't include any interaction. For example, the Spotify UI demo application for me implies a presence player screen, but in source code, it's just a Row with content. https://github.com/Gurupreet/ComposeCookBook Another interesting repository I found is a Podcast App. According to the gif looks like what I was looking for. https://github.com/fabirt/podcast-app After inspecting the source code I understood how it works. The PodcastPlayerScreen is a Root composable for the player and it added to the composition of the main screen. By default, it's not visible for users. https://github.com/fabirt/podcast-app/blob/6b4876fd007c54e3f10160c091d3c29147b20211/android/app/src/main/java/com/fabirt/podcastapp/ui/MainActivity.kt#L57 Then if the user clicks on some podcast item it changes the showPlayerFullScreen boolean. Recomposition triggers the AnimatedVisibility logic and the player appears. https://github.com/fabirt/podcast-app/blob/6b4876fd007c54e3f10160c091d3c29147b20211/android/app/src/main

## Introducing Navigation-Material 

DevFeed: [Introducing Navigation-Material ](<https://devfeed.tech/articles/introducing-navigation-material-25967.md>)

Original publisher: [Read original article](<https://jossiwolf.medium.com/introducing-navigation-material-%EF%B8%8F-a19ed5cc33fd?source=rss-8efc0359e234------2>)

Author: Jossi Wolf

Published: 2021-08-04T19:01:30Z

Content type: release

Language: en

Sources: [Stories by Jossi Wolf on Medium](<https://devfeed.tech/sources/stories-by-jossi-wolf-on-medium.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Library](<https://devfeed.tech/topics/library.md>), [releases](<https://devfeed.tech/topics/releases.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [compose](<https://devfeed.tech/tags/compose.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [extension](<https://devfeed.tech/tags/extension.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [library](<https://devfeed.tech/tags/library.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [navigation-component](<https://devfeed.tech/tags/navigation-component.md>), [new-feature](<https://devfeed.tech/tags/new-feature.md>), [releases](<https://devfeed.tech/tags/releases.md>)

### AI overview

This article introduces Navigation Material, an Accompanist library that adds modal bottom sheet destinations to Navigation Compose. It explains the library's experimental status and provides setup steps using BottomSheetNavigator, NavController, ModalBottomSheetLayout, and the bottomSheet function.

### Source excerpt

Illustration by Ana Teresa Silva from the lovely We Are Systematic. Thank youuuuuu❤✨ Navigation-Compose (well, kinda) has an exciting new feature: Support for bottom sheet destinations! Over the past (almost) 6 months, I worked on a library in collaboration with the Navigation team that offers support for Modal Bottom Sheets in Navigation Compose. Navigation with Fragments has long supported DialogFragments, and with today's release of the Navigation Material library, we are providing the same feature for composable bottom sheets with Navigation Compose. Since modal bottom sheets are still an experimental Compose-Material API, the library will be released as part of Accompanist, a collection of extension libraries for Jetpack Compose. All AndroidX libraries, Navigation and Compose included, follow strict semantic versioning as explained on the AndroidX releases page. This means that any API that isn't experimental is set in stone once a library goes to its Release Candidate (RC) phase. It would take a major version bump (i.e., a '2.0') to make breaking API changes to these stable APIs. - Ian Lake about the versioning system of AndroidX libraries Because of the versioning requirements for AndroidX libraries, Navigation Material will be offered as part of Accompanist, just like navigation-animation. Think of it as an incubator until the bottom sheet APIs are fully grown up! Enough of the talking -- let's look at how you can use it! Getting started! Navigation Material is fresh out of the oven, built off today's release of Navigation 2.4.0-alpha06! There are a few easy steps to get started: Create a BottomSheetNavigator using the rememberBottomSheetNavigator() function Add the BottomSheetNavigator to your NavController Wrap your existing NavHost in the ModalBottomSheetLayout composable provided by Navigation Material. If you don't have a NavHost yet, we'll create one! Now you're ready to define bottom sheet destinations using the new bottomSheet function! Let's go thro

## Bottom App Bar with Menu and Swipeable Tabs in Flutter

DevFeed: [Bottom App Bar with Menu and Swipeable Tabs in Flutter](<https://devfeed.tech/articles/bottom-app-bar-with-menu-and-swipeable-tabs-in-flutter-25540.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2019/bottom-bar-swipe-flutter/>)

Author: Marco Gomiero

Published: 2019-03-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Flutter](<https://devfeed.tech/topics/flutter.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>)

Tags: [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [widget](<https://devfeed.tech/tags/widget.md>)

### AI overview

A tutorial explaining how to combine Flutter's BottomAppBar, BottomSheet, and TabBarView to create a bottom app bar with a menu and swipeable tabs. It covers the widget structure, tab control, menu navigation, and bottom-sheet implementation.

### Source excerpt

The recent revamp of the Material Design has introduced new beautiful items, for example, the Bottom App Bar. Image from Material Design Guidelines With Flutter is super easy to implement like shown in the official documentation. However, for me, the tricky part is to combine it with swipeable tabs so, in this article, I'll explain all the steps that I've followed to obtain it. Here's a spoiler of the final result: