Skip to content

Commit 00972a6

Browse files
Implemented IOS native button;
1 parent 262cdae commit 00972a6

File tree

17 files changed

+165
-59
lines changed

17 files changed

+165
-59
lines changed

composeApp/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
21
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
32

43
plugins {
@@ -10,7 +9,6 @@ plugins {
109

1110
kotlin {
1211
androidTarget {
13-
@OptIn(ExperimentalKotlinGradlePluginApi::class)
1412
compilerOptions {
1513
jvmTarget.set(JvmTarget.JVM_11)
1614
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package xyz.teamgravity.kmpsharingnativeuicomponent
2+
3+
import androidx.compose.material.Button
4+
import androidx.compose.material.Text
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.res.stringResource
8+
9+
@Composable
10+
actual fun NativeButton(
11+
onClick: () -> Unit,
12+
modifier: Modifier
13+
) {
14+
Button(
15+
onClick = onClick,
16+
modifier = modifier
17+
) {
18+
Text(
19+
text = stringResource(R.string.android_native_button)
20+
)
21+
}
22+
}

composeApp/src/androidMain/kotlin/xyz/teamgravity/kmpsharingnativeuicomponent/Platform.android.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<resources>
22
<string name="app_name">KMPSharingNativeUIComponent</string>
3+
<string name="android_native_button">Android Native button</string>
34
</resources>
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
package xyz.teamgravity.kmpsharingnativeuicomponent
22

3-
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.foundation.Image
3+
import androidx.compose.foundation.layout.Arrangement
54
import androidx.compose.foundation.layout.Column
6-
import androidx.compose.foundation.layout.fillMaxWidth
7-
import androidx.compose.material.Button
5+
import androidx.compose.foundation.layout.fillMaxSize
86
import androidx.compose.material.MaterialTheme
97
import androidx.compose.material.Text
10-
import androidx.compose.runtime.*
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.getValue
10+
import androidx.compose.runtime.mutableIntStateOf
11+
import androidx.compose.runtime.saveable.rememberSaveable
12+
import androidx.compose.runtime.setValue
1113
import androidx.compose.ui.Alignment
1214
import androidx.compose.ui.Modifier
13-
import org.jetbrains.compose.resources.painterResource
1415
import org.jetbrains.compose.ui.tooling.preview.Preview
1516

16-
import kmpsharingnativeuicomponent.composeapp.generated.resources.Res
17-
import kmpsharingnativeuicomponent.composeapp.generated.resources.compose_multiplatform
18-
1917
@Composable
2018
@Preview
2119
fun App() {
2220
MaterialTheme {
23-
var showContent by remember { mutableStateOf(false) }
24-
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
25-
Button(onClick = { showContent = !showContent }) {
26-
Text("Click me!")
27-
}
28-
AnimatedVisibility(showContent) {
29-
val greeting = remember { Greeting().greet() }
30-
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
31-
Image(painterResource(Res.drawable.compose_multiplatform), null)
32-
Text("Compose: $greeting")
21+
Column(
22+
horizontalAlignment = Alignment.CenterHorizontally,
23+
verticalArrangement = Arrangement.Center,
24+
modifier = Modifier.fillMaxSize()
25+
) {
26+
var counter by rememberSaveable { mutableIntStateOf(0) }
27+
NativeButton(
28+
onClick = {
29+
counter++
3330
}
34-
}
31+
)
32+
Text(
33+
text = "Counter: $counter"
34+
)
3535
}
3636
}
3737
}

composeApp/src/commonMain/kotlin/xyz/teamgravity/kmpsharingnativeuicomponent/Greeting.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package xyz.teamgravity.kmpsharingnativeuicomponent
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.Modifier
5+
6+
@Composable
7+
expect fun NativeButton(
8+
onClick: () -> Unit,
9+
modifier: Modifier = Modifier
10+
)

composeApp/src/commonMain/kotlin/xyz/teamgravity/kmpsharingnativeuicomponent/Platform.kt

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
package xyz.teamgravity.kmpsharingnativeuicomponent
22

3+
import androidx.compose.runtime.CompositionLocalProvider
4+
import androidx.compose.runtime.ProvidableCompositionLocal
5+
import androidx.compose.runtime.staticCompositionLocalOf
36
import androidx.compose.ui.window.ComposeUIViewController
7+
import platform.UIKit.UIViewController
48

5-
fun MainViewController() = ComposeUIViewController { App() }
9+
val LocalNativeViewFactory: ProvidableCompositionLocal<NativeViewFactory> = staticCompositionLocalOf {
10+
error("No view factory provided.")
11+
}
12+
13+
fun MainViewController(
14+
nativeViewFactory: NativeViewFactory
15+
): UIViewController = ComposeUIViewController {
16+
CompositionLocalProvider(LocalNativeViewFactory provides nativeViewFactory) {
17+
App()
18+
}
19+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package xyz.teamgravity.kmpsharingnativeuicomponent
2+
3+
import androidx.compose.foundation.layout.height
4+
import androidx.compose.foundation.layout.width
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.unit.dp
8+
import androidx.compose.ui.viewinterop.UIKitViewController
9+
10+
@Composable
11+
actual fun NativeButton(
12+
onClick: () -> Unit,
13+
modifier: Modifier
14+
) {
15+
val factory = LocalNativeViewFactory.current
16+
UIKitViewController(
17+
factory = {
18+
factory.createButtonView(
19+
label = "IOS Native button",
20+
onClick = onClick
21+
)
22+
},
23+
modifier = modifier
24+
.width(150.dp)
25+
.height(50.dp)
26+
)
27+
}

0 commit comments

Comments
 (0)