From 4d22eda5e2e7657a3ee9ef094646253e195dc7ec Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sun, 3 Dec 2023 17:07:59 +0800 Subject: [PATCH] feat: add Scaffold --- .../highcapable/flexiui/component/Scaffold.kt | 56 +++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Scaffold.kt b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Scaffold.kt index d532663..d592929 100644 --- a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Scaffold.kt +++ b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/component/Scaffold.kt @@ -23,8 +23,56 @@ package com.highcapable.flexiui.component -// TODO: Scaffold, modeled after Scaffold in Material Design -// Also set the global background color to Scaffold -// Scaffold creates Surface +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.highcapable.flexiui.extension.bottom +import com.highcapable.flexiui.extension.calculateEnd +import com.highcapable.flexiui.extension.calculateStart +import com.highcapable.flexiui.extension.top -// TODO: Linkage BetterAndroid SafeArea (SystemBarsController) \ No newline at end of file +// TODO: Linkage BetterAndroid SafeArea (SystemBarsController) + +@Composable +fun Scaffold( + modifier: Modifier = Modifier, + colors: SurfaceColors = Surface.colors, + padding: PaddingValues = Surface.padding, + verticalArrangement: Arrangement.Vertical = Arrangement.Top, + horizontalAlignment: Alignment.Horizontal = Alignment.Start, + actionBar: @Composable () -> Unit = {}, + tab: @Composable () -> Unit = {}, + navigation: @Composable () -> Unit = {}, + content: @Composable () -> Unit +) { + val outBoxPadding = PaddingValues( + start = padding.calculateStart(), + end = padding.calculateEnd(), + bottom = padding.bottom + ) + val inBoxPadding = PaddingValues( + top = padding.top, + bottom = padding.bottom + ) + Surface( + modifier = modifier, + colors = colors, + padding = outBoxPadding + ) { + Column( + verticalArrangement = verticalArrangement, + horizontalAlignment = horizontalAlignment + ) { + actionBar() + tab() + Box(modifier = Modifier.fillMaxSize().padding(inBoxPadding).weight(1f)) { content() } + navigation() + } + } +} \ No newline at end of file