Slint Kit Documentation

Dialogs

Dialog Footer for Slint

KitDialogFooter · Slint Kit 0.3.0

Trailing slot for dialog actions.

Trailing slot for dialog actions.
Native app built from the example below.

Try the component

Download the complete project, extract it and run cargo run --locked in its folder. Rust 1.92+; Slint Kit 0.3.0 from crates.io. You can also copy the four files below.

Compose the dialog sections inside a panel, then archive the project through a Rust callback.

ui/app.slint

export { KitFormValidation, HtmlInputKind, NumberInputFormat, KitInputConstraints, KitValidationResult, KitValidityState } from "@kit/kit.slint";
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitDialogPanel, KitDialogHeader, KitDialogBody, KitDialogFooter, KitButton, KitTheme, KitThemes } from "@kit/kit.slint";
export component App inherits Window {
    title: "KitDialogFooter example";
    preferred-width: 520px;
    preferred-height: 300px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in property <bool> archived;
    callback archive();
    VerticalLayout {
        padding: 24px;
        spacing: 16px;
        alignment: start;
        panel := KitDialogPanel {
            theme: root.theme; accessible-name: "Archive project";
            height: content.preferred-height;
            content := VerticalLayout {
                padding: 20px; spacing: 14px;
                header := KitDialogHeader { theme: root.theme; height: self.preferred-height; Text { text: "Archive this project?"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; wrap: word-wrap; } }
                body := KitDialogBody { theme: root.theme; height: self.preferred-height; Text { text: "You can restore it from the archive."; color: root.theme.text-primary; wrap: word-wrap; } }
                footer := KitDialogFooter { theme: root.theme; height: 48px; KitButton { theme: root.theme; text: "Archive project"; disabled: root.archived; activated => { root.archive(); } } }
            }
        }
        result := Text { text: root.archived ? "Project archived" : "Project active"; color: root.theme.text-primary; }
    }

}

src/main.rs

// SPDX-License-Identifier: GPL-3.0-or-later
use slint::ComponentHandle;

mod ui { slint::include_modules!(); }
fn main() -> Result<(), slint::PlatformError> {
    let app = ui::App::new()?;
    slint_kit::init_form_validation!(ui, app);
    let weak = app.as_weak();
    app.on_archive(move || { if let Some(app) = weak.upgrade() { app.set_archived(true); } });
    app.run()
}

Cargo.toml and build.rs

Cargo.toml

[package]
name = "slint-kit-dialog-footer-example"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
license = "GPL-3.0-or-later"
publish = false

[dependencies]
slint-kit = "=0.3.0"
slint = { version = "=1.18.1", default-features = false, features = ["std", "compat-1-18", "backend-winit", "renderer-skia", "accessibility"] }

[build-dependencies]
slint-kit-build = "=0.3.0"

[workspace]

build.rs

fn main() { slint_kit_build::compile("ui/app.slint").expect("compile component example"); }

Files: Cargo.toml · build.rs · ui/app.slint · src/main.rs

Place buttons in reading order and connect their actions to the dialog controller. Use busy or disabled on actions during an operation.

The row aligns to the end with 8 px spacing and a 48 px minimum height. The footer does not automatically close the modal.

Visual composition

The file below produces the screenshot. For controller-driven components, it shows the displayed state without supplying the Rust wiring. Create a project.

Show the screenshot source
Trailing slot for dialog actions.
Native screenshot of the same example, rendered with Skia.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitButton, KitDialogFooter, KitTheme, KitThemes } from "@kit/kit.slint";

export component Example inherits Window {
    title: "KitDialogFooter example";
    preferred-width: 420px;
    preferred-height: 160px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in-out property <string> status;
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Dialog Footer"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitDialogFooter { theme: root.theme; vertical-stretch: 0; KitButton { theme: root.theme; text: "Cancel"; activated => { root.status = "Action requested"; } }KitButton { theme: root.theme; text: "Save changes"; activated => { root.status = "Action requested"; } } }
        if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; }
    }
}

Download this example

Public API

Inherits Rectangle.

Properties

Name Type Direction
theme KitTheme in

See also