mirror of
https://github.com/BetterAndroid/FlexiUI.git
synced 2025-09-08 19:44:25 +08:00
refactor: rename ActionBar to AppBar and change the usage
This commit is contained in:
@@ -57,20 +57,20 @@ import com.highcapable.flexiui.resources.icon.ArrowNaviUp
|
|||||||
import com.highcapable.flexiui.resources.icon.FinishClose
|
import com.highcapable.flexiui.resources.icon.FinishClose
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Colors defines for action bar.
|
* Colors defines for app bar.
|
||||||
* @param titleTextColor the title text color.
|
* @param titleTextColor the title text color.
|
||||||
* @param subTextColor the sub text color.
|
* @param subTextColor the sub text color.
|
||||||
* @param actionContentColor the action content color, usually for icon tint and text color.
|
* @param actionContentColor the action content color, usually for icon tint and text color.
|
||||||
*/
|
*/
|
||||||
@Immutable
|
@Immutable
|
||||||
data class ActionBarColors(
|
data class AppBarColors(
|
||||||
val titleTextColor: Color,
|
val titleTextColor: Color,
|
||||||
val subTextColor: Color,
|
val subTextColor: Color,
|
||||||
val actionContentColor: Color
|
val actionContentColor: Color
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Style defines for action bar.
|
* Style defines for app bar.
|
||||||
* @param padding the padding of content.
|
* @param padding the padding of content.
|
||||||
* @param contentSpacing the spacing between the components of content.
|
* @param contentSpacing the spacing between the components of content.
|
||||||
* @param titleTextStyle the title text style.
|
* @param titleTextStyle the title text style.
|
||||||
@@ -80,7 +80,7 @@ data class ActionBarColors(
|
|||||||
* @param actionContentMaxWidth the max width of actions content.
|
* @param actionContentMaxWidth the max width of actions content.
|
||||||
*/
|
*/
|
||||||
@Immutable
|
@Immutable
|
||||||
data class ActionBarStyle(
|
data class AppBarStyle(
|
||||||
val padding: ComponentPadding,
|
val padding: ComponentPadding,
|
||||||
val contentSpacing: Dp,
|
val contentSpacing: Dp,
|
||||||
val titleTextStyle: TextStyle,
|
val titleTextStyle: TextStyle,
|
||||||
@@ -91,26 +91,26 @@ data class ActionBarStyle(
|
|||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flexi UI large action bar.
|
* Flexi UI primary app bar.
|
||||||
* @see ActionBarDefaults
|
* @see SecondaryAppBar
|
||||||
* @param modifier the [Modifier] to be applied to this action bar.
|
* @param modifier the [Modifier] to be applied to this app bar.
|
||||||
* @param colors the colors of this action bar, default is [ActionBarDefaults.colors].
|
* @param colors the colors of this app bar, default is [AppBarDefaults.colors].
|
||||||
* @param style the style of this action bar, default is [ActionBarDefaults.style].
|
* @param style the style of this app bar, default is [AppBarDefaults.style].
|
||||||
* @param titleText the title text of this action bar, should typically be [Text].
|
* @param titleText the title text of this app bar, should typically be [Text].
|
||||||
* @param subText the sub text of this action bar, should typically be [Text].
|
* @param subText the sub text of this app bar, should typically be [Text].
|
||||||
* @param actions the actions displayed at the end of the action bar, should typically be [ActionBarScope.ActionIconButton].
|
* @param actions the actions displayed at the end of the app bar, should typically be [AppBarScope.ActionIconButton].
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun TopActionBar(
|
fun PrimaryAppBar(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
colors: ActionBarColors? = null,
|
colors: AppBarColors? = null,
|
||||||
style: ActionBarStyle? = null,
|
style: AppBarStyle? = null,
|
||||||
titleText: @Composable () -> Unit,
|
titleText: @Composable () -> Unit,
|
||||||
subText: @Composable (() -> Unit)? = null,
|
subText: @Composable (() -> Unit)? = null,
|
||||||
actions: @Composable (ActionBarScope.() -> Unit)? = null
|
actions: @Composable (AppBarScope.() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
BasicActionBar(
|
BasicAppBar(
|
||||||
type = ActionBarType.LARGE,
|
type = AppBarType.Primary,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
colors = colors,
|
colors = colors,
|
||||||
style = style,
|
style = style,
|
||||||
@@ -123,30 +123,30 @@ fun TopActionBar(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flexi UI middle action bar.
|
* Flexi UI secondary app bar.
|
||||||
* @see TopActionBar
|
* @see PrimaryAppBar
|
||||||
* @param modifier the [Modifier] to be applied to this action bar.
|
* @param modifier the [Modifier] to be applied to this app bar.
|
||||||
* @param colors the colors of this action bar, default is [ActionBarDefaults.colors].
|
* @param colors the colors of this app bar, default is [AppBarDefaults.colors].
|
||||||
* @param style the style of this action bar, default is [ActionBarDefaults.style].
|
* @param style the style of this app bar, default is [AppBarDefaults.style].
|
||||||
* @param titleText the title text of this action bar, should typically be [Text].
|
* @param titleText the title text of this app bar, should typically be [Text].
|
||||||
* @param subText the sub text of this action bar, should typically be [Text].
|
* @param subText the sub text of this app bar, should typically be [Text].
|
||||||
* @param finishIcon the finish icon displayed at the start of the action bar, should typically be [ActionBarScope.FinishIconButton].
|
* @param finishIcon the finish icon displayed at the start of the app bar, should typically be [AppBarScope.FinishIconButton].
|
||||||
* @param navigationIcon the navigation icon displayed at the start of the action bar, should typically be [ActionBarScope.NavigationIconButton].
|
* @param navigationIcon the navigation icon displayed at the start of the app bar, should typically be [AppBarScope.NavigationIconButton].
|
||||||
* @param actions the actions displayed at the end of the action bar, should typically be [ActionBarScope.ActionIconButton].
|
* @param actions the actions displayed at the end of the app bar, should typically be [AppBarScope.ActionIconButton].
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun ActionBar(
|
fun SecondaryAppBar(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
colors: ActionBarColors? = null,
|
colors: AppBarColors? = null,
|
||||||
style: ActionBarStyle? = null,
|
style: AppBarStyle? = null,
|
||||||
titleText: @Composable () -> Unit,
|
titleText: @Composable () -> Unit,
|
||||||
subText: @Composable (() -> Unit)? = null,
|
subText: @Composable (() -> Unit)? = null,
|
||||||
finishIcon: @Composable (ActionBarScope.() -> Unit)? = null,
|
finishIcon: @Composable (AppBarScope.() -> Unit)? = null,
|
||||||
navigationIcon: @Composable (ActionBarScope.() -> Unit)? = null,
|
navigationIcon: @Composable (AppBarScope.() -> Unit)? = null,
|
||||||
actions: @Composable (ActionBarScope.() -> Unit)? = null
|
actions: @Composable (AppBarScope.() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
BasicActionBar(
|
BasicAppBar(
|
||||||
type = ActionBarType.MIDDLE,
|
type = AppBarType.Secondary,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
colors = colors,
|
colors = colors,
|
||||||
style = style,
|
style = style,
|
||||||
@@ -159,25 +159,25 @@ fun ActionBar(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic action bar for internal use.
|
* Basic app bar for internal use.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun BasicActionBar(
|
private fun BasicAppBar(
|
||||||
type: ActionBarType,
|
type: AppBarType,
|
||||||
modifier: Modifier,
|
modifier: Modifier,
|
||||||
colors: ActionBarColors?,
|
colors: AppBarColors?,
|
||||||
style: ActionBarStyle?,
|
style: AppBarStyle?,
|
||||||
titleText: @Composable () -> Unit,
|
titleText: @Composable () -> Unit,
|
||||||
subText: @Composable (() -> Unit)?,
|
subText: @Composable (() -> Unit)?,
|
||||||
finishIcon: @Composable (ActionBarScope.() -> Unit)?,
|
finishIcon: @Composable (AppBarScope.() -> Unit)?,
|
||||||
navigationIcon: @Composable (ActionBarScope.() -> Unit)?,
|
navigationIcon: @Composable (AppBarScope.() -> Unit)?,
|
||||||
actions: @Composable (ActionBarScope.() -> Unit)?
|
actions: @Composable (AppBarScope.() -> Unit)?
|
||||||
) {
|
) {
|
||||||
CompositionLocalProvider(LocalActionBarType provides type) {
|
CompositionLocalProvider(LocalAppBarType provides type) {
|
||||||
val currentColors = colors ?: ActionBarDefaults.colors
|
val currentColors = colors ?: AppBarDefaults.colors
|
||||||
val currentStyle = style ?: ActionBarDefaults.style
|
val currentStyle = style ?: AppBarDefaults.style
|
||||||
Box(modifier = modifier.padding(currentStyle.padding)) {
|
Box(modifier = modifier.padding(currentStyle.padding)) {
|
||||||
ActionBarImpl(
|
AppBarImpl(
|
||||||
type = type,
|
type = type,
|
||||||
colors = currentColors,
|
colors = currentColors,
|
||||||
style = currentStyle,
|
style = currentStyle,
|
||||||
@@ -192,13 +192,13 @@ private fun BasicActionBar(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A scope for action bar.
|
* A scope for app bar.
|
||||||
*/
|
*/
|
||||||
@Stable
|
@Stable
|
||||||
interface ActionBarScope {
|
interface AppBarScope {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action bar's finish icon button.
|
* app bar's finish icon button.
|
||||||
* @param onClick the callback when the icon button is clicked.
|
* @param onClick the callback when the icon button is clicked.
|
||||||
* @param modifier the [Modifier] to be applied to this icon button.
|
* @param modifier the [Modifier] to be applied to this icon button.
|
||||||
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
||||||
@@ -226,7 +226,7 @@ interface ActionBarScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action bar's navigation icon button.
|
* app bar's navigation icon button.
|
||||||
* @param onClick the callback when the icon button is clicked.
|
* @param onClick the callback when the icon button is clicked.
|
||||||
* @param modifier the [Modifier] to be applied to this icon button.
|
* @param modifier the [Modifier] to be applied to this icon button.
|
||||||
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
||||||
@@ -254,7 +254,7 @@ interface ActionBarScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action bar's action icon button.
|
* app bar's action icon button.
|
||||||
* @param onClick the callback when the icon button is clicked.
|
* @param onClick the callback when the icon button is clicked.
|
||||||
* @param modifier the [Modifier] to be applied to this icon button.
|
* @param modifier the [Modifier] to be applied to this icon button.
|
||||||
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
* @param colors the colors of this icon button, default is [IconButtonDefaults.colors].
|
||||||
@@ -287,21 +287,21 @@ interface ActionBarScope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action bar's implementation.
|
* App bar's implementation.
|
||||||
*/
|
*/
|
||||||
@Immutable
|
@Immutable
|
||||||
private class ActionBarImpl(
|
private class AppBarImpl(
|
||||||
val type: ActionBarType,
|
val type: AppBarType,
|
||||||
val colors: ActionBarColors,
|
val colors: AppBarColors,
|
||||||
val style: ActionBarStyle,
|
val style: AppBarStyle,
|
||||||
val titleText: @Composable () -> Unit,
|
val titleText: @Composable () -> Unit,
|
||||||
val subText: @Composable (() -> Unit)?,
|
val subText: @Composable (() -> Unit)?,
|
||||||
val finishIcon: @Composable (ActionBarScope.() -> Unit)?,
|
val finishIcon: @Composable (AppBarScope.() -> Unit)?,
|
||||||
val navigationIcon: @Composable (ActionBarScope.() -> Unit)?,
|
val navigationIcon: @Composable (AppBarScope.() -> Unit)?,
|
||||||
val actions: @Composable (ActionBarScope.() -> Unit)?
|
val actions: @Composable (AppBarScope.() -> Unit)?
|
||||||
) : ActionBarScope {
|
) : AppBarScope {
|
||||||
|
|
||||||
/** Build action bar's content. */
|
/** Build app bar's content. */
|
||||||
@Composable
|
@Composable
|
||||||
fun Content() {
|
fun Content() {
|
||||||
BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
|
BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
|
||||||
@@ -326,10 +326,10 @@ private class ActionBarImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build action bar's start content. */
|
/** Build app bar's start content. */
|
||||||
@Composable
|
@Composable
|
||||||
private fun StartContent() {
|
private fun StartContent() {
|
||||||
if (type == ActionBarType.MIDDLE && (finishIcon != null || navigationIcon != null))
|
if (type == AppBarType.Secondary && (finishIcon != null || navigationIcon != null))
|
||||||
Row(
|
Row(
|
||||||
horizontalArrangement = Arrangement.spacedBy(style.contentSpacing),
|
horizontalArrangement = Arrangement.spacedBy(style.contentSpacing),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
@@ -341,7 +341,7 @@ private class ActionBarImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build action bar's center content. */
|
/** Build app bar's center content. */
|
||||||
@Composable
|
@Composable
|
||||||
private fun CenterContent() {
|
private fun CenterContent() {
|
||||||
Column(
|
Column(
|
||||||
@@ -363,7 +363,7 @@ private class ActionBarImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build action bar's end content. */
|
/** Build app bar's end content. */
|
||||||
@Composable
|
@Composable
|
||||||
private fun EndContent() {
|
private fun EndContent() {
|
||||||
actions?.also { content ->
|
actions?.also { content ->
|
||||||
@@ -376,7 +376,7 @@ private class ActionBarImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provided the style for action bar's content. */
|
/** Provided the style for app bar's content. */
|
||||||
@Composable
|
@Composable
|
||||||
private fun ContentStyle(
|
private fun ContentStyle(
|
||||||
color: Color,
|
color: Color,
|
||||||
@@ -392,30 +392,30 @@ private class ActionBarImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
private val ActionBarScope.impl get() = this as? ActionBarImpl? ?: error("Could not got ActionBarScope's impl.")
|
private val AppBarScope.impl get() = this as? AppBarImpl? ?: error("Could not got AppBarScope's impl.")
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
private enum class ActionBarType { LARGE, MIDDLE }
|
private enum class AppBarType { Primary, Secondary }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defaults of action bar.
|
* Defaults of app bar.
|
||||||
*/
|
*/
|
||||||
object ActionBarDefaults {
|
object AppBarDefaults {
|
||||||
val colors: ActionBarColors
|
val colors: AppBarColors
|
||||||
@Composable
|
@Composable
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
get() = defaultActionBarColors()
|
get() = defaultAppBarColors()
|
||||||
val style: ActionBarStyle
|
val style: AppBarStyle
|
||||||
@Composable
|
@Composable
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
get() = defaultActionBarStyle()
|
get() = defaultAppBarStyle()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val LocalActionBarType = compositionLocalOf { ActionBarType.LARGE }
|
private val LocalAppBarType = compositionLocalOf { AppBarType.Primary }
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
private fun defaultActionBarColors() = ActionBarColors(
|
private fun defaultAppBarColors() = AppBarColors(
|
||||||
titleTextColor = LocalColors.current.textPrimary,
|
titleTextColor = LocalColors.current.textPrimary,
|
||||||
subTextColor = LocalColors.current.textSecondary,
|
subTextColor = LocalColors.current.textSecondary,
|
||||||
actionContentColor = LocalColors.current.textPrimary
|
actionContentColor = LocalColors.current.textPrimary
|
||||||
@@ -423,21 +423,21 @@ private fun defaultActionBarColors() = ActionBarColors(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
private fun defaultActionBarStyle() = ActionBarStyle(
|
private fun defaultAppBarStyle() = AppBarStyle(
|
||||||
padding = when {
|
padding = when {
|
||||||
LocalInSurface.current || LocalInAreaBox.current ->
|
LocalInSurface.current || LocalInAreaBox.current ->
|
||||||
ComponentPadding(vertical = LocalSizes.current.spacingPrimary)
|
ComponentPadding(vertical = LocalSizes.current.spacingPrimary)
|
||||||
else -> ComponentPadding(LocalSizes.current.spacingPrimary)
|
else -> ComponentPadding(LocalSizes.current.spacingPrimary)
|
||||||
},
|
},
|
||||||
contentSpacing = LocalSizes.current.spacingSecondary,
|
contentSpacing = LocalSizes.current.spacingSecondary,
|
||||||
titleTextStyle = when (LocalActionBarType.current) {
|
titleTextStyle = when (LocalAppBarType.current) {
|
||||||
ActionBarType.LARGE -> LocalTypography.current.titlePrimary
|
AppBarType.Primary -> LocalTypography.current.titlePrimary
|
||||||
ActionBarType.MIDDLE -> LocalTypography.current.titleSecondary
|
AppBarType.Secondary -> LocalTypography.current.titleSecondary
|
||||||
},
|
},
|
||||||
subTextStyle = LocalTypography.current.subtitle,
|
subTextStyle = LocalTypography.current.subtitle,
|
||||||
actionIconSize = when (LocalActionBarType.current) {
|
actionIconSize = when (LocalAppBarType.current) {
|
||||||
ActionBarType.LARGE -> LocalSizes.current.iconSizePrimary
|
AppBarType.Primary -> LocalSizes.current.iconSizePrimary
|
||||||
ActionBarType.MIDDLE -> LocalSizes.current.iconSizeSecondary
|
AppBarType.Secondary -> LocalSizes.current.iconSizeSecondary
|
||||||
},
|
},
|
||||||
actionIconPadding = LocalSizes.current.spacingTertiary,
|
actionIconPadding = LocalSizes.current.spacingTertiary,
|
||||||
actionContentMaxWidth = DefaultActionContentMaxWidth
|
actionContentMaxWidth = DefaultActionContentMaxWidth
|
@@ -39,9 +39,9 @@ import com.highcapable.betterandroid.compose.extension.ui.ComponentPadding
|
|||||||
/**
|
/**
|
||||||
* Scaffold implements the basic Flexi UI visual layout structure.
|
* Scaffold implements the basic Flexi UI visual layout structure.
|
||||||
*
|
*
|
||||||
* You can add your own components into [actionBar], [tab], [navigationBar].
|
* You can add your own components into [appBar], [tab], [navigationBar].
|
||||||
* @see TopActionBar
|
* @see PrimaryAppBar
|
||||||
* @see ActionBar
|
* @see SecondaryAppBar
|
||||||
* @see TabRow
|
* @see TabRow
|
||||||
* @see NavigationBarRow
|
* @see NavigationBarRow
|
||||||
* @see NavigationBarColumn
|
* @see NavigationBarColumn
|
||||||
@@ -50,9 +50,9 @@ import com.highcapable.betterandroid.compose.extension.ui.ComponentPadding
|
|||||||
* @param padding the padding of content, default is [SurfaceDefaults.padding].
|
* @param padding the padding of content, default is [SurfaceDefaults.padding].
|
||||||
* @param verticalArrangement the vertical arrangement of content, default is [Arrangement.Top].
|
* @param verticalArrangement the vertical arrangement of content, default is [Arrangement.Top].
|
||||||
* @param horizontalAlignment the horizontal alignment of content, default is [Alignment.Start].
|
* @param horizontalAlignment the horizontal alignment of content, default is [Alignment.Start].
|
||||||
* @param actionBar the action bar, should typically be [TopActionBar] or [ActionBar].
|
* @param appBar the app bar on top of the screen, should typically be [PrimaryAppBar] or [SecondaryAppBar].
|
||||||
* @param tab the tab, should typically be [TabRow].
|
* @param tab the tab below the app bar, should typically be [TabRow].
|
||||||
* @param navigationBar the navigation bar, should typically be [NavigationBarRow] or [NavigationBarColumn].
|
* @param navigationBar the navigation bar on bottom of the screen, should typically be [NavigationBarRow] or [NavigationBarColumn].
|
||||||
* @param content the content of the screen.
|
* @param content the content of the screen.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
@@ -62,7 +62,7 @@ fun Scaffold(
|
|||||||
padding: ComponentPadding = SurfaceDefaults.padding,
|
padding: ComponentPadding = SurfaceDefaults.padding,
|
||||||
verticalArrangement: Arrangement.Vertical = Arrangement.Top,
|
verticalArrangement: Arrangement.Vertical = Arrangement.Top,
|
||||||
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
|
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
|
||||||
actionBar: @Composable () -> Unit = {},
|
appBar: @Composable () -> Unit = {},
|
||||||
tab: @Composable () -> Unit = {},
|
tab: @Composable () -> Unit = {},
|
||||||
navigationBar: @Composable () -> Unit = {},
|
navigationBar: @Composable () -> Unit = {},
|
||||||
content: @Composable () -> Unit
|
content: @Composable () -> Unit
|
||||||
@@ -80,7 +80,7 @@ fun Scaffold(
|
|||||||
verticalArrangement = verticalArrangement,
|
verticalArrangement = verticalArrangement,
|
||||||
horizontalAlignment = horizontalAlignment
|
horizontalAlignment = horizontalAlignment
|
||||||
) {
|
) {
|
||||||
actionBar()
|
appBar()
|
||||||
tab()
|
tab()
|
||||||
Box(modifier = Modifier.fillMaxSize().padding(inBoxPadding).weight(1f)) { content() }
|
Box(modifier = Modifier.fillMaxSize().padding(inBoxPadding).weight(1f)) { content() }
|
||||||
navigationBar()
|
navigationBar()
|
||||||
|
Reference in New Issue
Block a user