Skip to content

MFlisar/ComposeDialogs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

225 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Maven Central API Kotlin Kotlin Multiplatform

ComposeDialogs

Platforms Android iOS Windows WebAssembly

This library offers you an easily extendible compose framework for modal dialogs and allows to show them as a dialog, bottom sheet or even as full screen dialog.

Note

All features are splitted into separate modules, just include the modules you want to use!

Table of Contents

πŸ“· Screenshots

color

demo_color1 demo_color2 demo_color3
demo_color4

date

demo_calendar1 demo_calendar2 demo_calendar3

frequency

demo_frequency1 demo_frequency2 demo_frequency3
demo_frequency4

info

demo_info1 demo_info2 demo_info3
demo_info4

input

demo_input1 demo_input2

list

demo_list1 demo_list2 demo_list3
demo_list4 demo_list5 demo_list6
demo_list7

menu

demo_menu1

number

demo_number1 demo_number2 demo_number3

progress

demo_progress1 demo_progress2

time

demo_time1 demo_time2

πŸ’» Supported Platforms

Module android iOS windows wasm
core βœ… βœ… βœ… βœ…
dialog-color βœ… βœ… βœ… βœ…
dialog-date βœ… βœ… βœ… βœ…
dialog-info βœ… βœ… βœ… βœ…
dialog-input βœ… βœ… βœ… βœ…
dialog-list βœ… βœ… βœ… βœ…
dialog-menu βœ… βœ… βœ… βœ…
dialog-number βœ… βœ… βœ… βœ…
dialog-progress βœ… βœ… βœ… βœ…
dialog-time βœ… βœ… βœ… βœ…
dialog-frequency βœ… βœ… βœ… βœ…

➑️ Versions

Dependency Version
Kotlin 2.3.20
Jetbrains Compose 1.10.3
Jetbrains Compose Material3 1.9.0

⚠️ Following experimental annotations are used:

  • OptIn
    • androidx.compose.material3.ExperimentalMaterial3Api (3x)
    • androidx.compose.ui.ExperimentalComposeUiApi (3x)

I try to use as less experimental features as possible, but in this case the ones above are needed!

πŸ”§ Setup

Using Version Catalogs

Define the dependencies inside your libs.versions.toml file.

[versions]

composedialogs = "<LATEST-VERSION>"

[libraries]

composedialogs-core = { module = "io.github.mflisar.composedialogs:core", version.ref = "composedialogs" }
composedialogs-dialog-color = { module = "io.github.mflisar.composedialogs:dialog-color", version.ref = "composedialogs" }
composedialogs-dialog-date = { module = "io.github.mflisar.composedialogs:dialog-date", version.ref = "composedialogs" }
composedialogs-dialog-info = { module = "io.github.mflisar.composedialogs:dialog-info", version.ref = "composedialogs" }
composedialogs-dialog-input = { module = "io.github.mflisar.composedialogs:dialog-input", version.ref = "composedialogs" }
composedialogs-dialog-list = { module = "io.github.mflisar.composedialogs:dialog-list", version.ref = "composedialogs" }
composedialogs-dialog-menu = { module = "io.github.mflisar.composedialogs:dialog-menu", version.ref = "composedialogs" }
composedialogs-dialog-number = { module = "io.github.mflisar.composedialogs:dialog-number", version.ref = "composedialogs" }
composedialogs-dialog-progress = { module = "io.github.mflisar.composedialogs:dialog-progress", version.ref = "composedialogs" }
composedialogs-dialog-time = { module = "io.github.mflisar.composedialogs:dialog-time", version.ref = "composedialogs" }
composedialogs-dialog-frequency = { module = "io.github.mflisar.composedialogs:dialog-frequency", version.ref = "composedialogs" }

And then use the definitions in your projects build.gradle.kts file like following:

implementation(libs.composedialogs.core)
implementation(libs.composedialogs.dialog.color)
implementation(libs.composedialogs.dialog.date)
implementation(libs.composedialogs.dialog.info)
implementation(libs.composedialogs.dialog.input)
implementation(libs.composedialogs.dialog.list)
implementation(libs.composedialogs.dialog.menu)
implementation(libs.composedialogs.dialog.number)
implementation(libs.composedialogs.dialog.progress)
implementation(libs.composedialogs.dialog.time)
implementation(libs.composedialogs.dialog.frequency)
Direct Dependency Notation

Simply add the dependencies inside your build.gradle.kts file.

val composedialogs = "<LATEST-VERSION>"

implementation("io.github.mflisar.composedialogs:core:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-color:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-date:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-info:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-input:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-list:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-menu:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-number:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-progress:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-time:${composedialogs}")
implementation("io.github.mflisar.composedialogs:dialog-frequency:${composedialogs}")

πŸš€ Usage

Basic examples

// create and remember a state
val state = rememberDialogState()

// Create a dialog composable
if (state.visible) {
    DialogInfo(
        state = state,
        info = "Some "
    )
}

// show the dialog inside a button press event or similar
Button(onClick = { state.show() }) {
    Text("Show Dialog")
}

Alternatively you can hold any saveable state inside dialog state. If the dialog state holds any data, it will consider itself as visible.

// create and remember a state (e.g. selected list index as in this example)
val state = rememberDialogState<Int>(data = null)

// show a dialog if necessary
if (state.showing)
{
    val data = state.requireData() // in this example the data is the list index
    DialogInfo(
        state = state,
        info = "Data = $data"
    )
}

// a list that uses the dialog
val items = 1..100
LazyColumn {
    items.forEach {
        item(key = it) {
            Button(onClick = { state.show(it) }) {
                Text("Item $it")
            }
        }
    }
}

Styling/Customisation and events

All dialog (also custom ones) do support styling like:

  • optional icon (including style like CenterTop and Begin)
  • dialog style (dialog, bottom sheet, fullscreen)
  • custom buttons (zero, one or two) with custom texts
  • a options variable to set up features like dismissOnButtonClick, dismissOnBackPress and dismissOnClickOutside
  • an event callback for the close event and button click event

Check out the advanced region on the side for more details.

Dialogs

Check out all the modules to find out more about the available implementations.

πŸ“ Modules

✨ Demo

A full demo is included inside the demo module, it shows nearly every usage with working examples.

ℹ️ More

πŸ“š API

Check out the API documentation.

πŸ’‘ Other Libraries

You can find more libraries (all multiplatform) of mine that all do work together nicely here.

About

Compose Dialogs for Android - Material3 Design (Dialog / Bottom Sheet Style / Full Screen Dialog) + easily extendible

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages