Installation and Basic Usage
This guide covers adding the Compose Remote Layout Router to your project and setting up the basic requirements.
Adding Dependencies
Add the router dependency to your project's build.gradle.kts
file:
dependencies {
// Core library (required)
implementation("io.github.utsmannn:compose-remote-layout:$version")
// Router module
implementation("io.github.utsmannn:compose-remote-layout-router:$version")
// Platform-specific implementations
implementation("io.github.utsmannn:compose-remote-layout-android:$version") // For Android
// OR
implementation("io.github.utsmannn:compose-remote-layout-jvm:$version") // For Desktop
// OR
implementation("io.github.utsmannn:compose-remote-layout-js:$version") // For Web
// OR iOS implementations
implementation("io.github.utsmannn:compose-remote-layout-iosx64:$version")
implementation("io.github.utsmannn:compose-remote-layout-iosarm64:$version")
}
Replace $version
with the latest version number. You can find the current version
on Maven Central.
Basic Setup Requirements
To use the router, you'll need:
- A CoroutineScope for asynchronous operations
- A LayoutFetcher to retrieve layouts
- A RemoteRouter instance to manage navigation
Minimal Implementation
Here's a minimal example to get started:
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import com.utsman.composeremote.DynamicLayout
import com.utsman.composeremote.router.ComposeRemoteRouter
import com.utsman.composeremote.router.KtorHttpLayoutFetcher
import com.utsman.composeremote.router.RenderEvent
import com.utsman.composeremote.router.ResultRouterFactory
import com.utsman.composeremote.router.cached
@Composable
fun RouterBasicExample() {
// Create a coroutine scope
val scope = rememberCoroutineScope()
// Create a layout fetcher with caching
val fetcher = remember {
val ktorFetcher = KtorHttpLayoutFetcher()
ktorFetcher.cached()
}
// Create the router
val router = remember {
ResultRouterFactory().createRouter(
scope = scope,
fetcher = fetcher,
baseUrl = "https://your-api.com/layouts" // Your base URL for layouts
)
}
// Implement the router UI
ComposeRemoteRouter(
initialPath = "/home", // First screen to load
router = router
) { renderEvent ->
when (renderEvent) {
is RenderEvent.Loading -> {
// Show loading UI
LoadingIndicator()
}
is RenderEvent.Failure -> {
// Show error UI
ErrorScreen(renderEvent.error)
}
is RenderEvent.RenderedLayout -> {
// Render the layout
DynamicLayout(
component = renderEvent.component,
bindValue = renderEvent.bindsValue,
onClickHandler = renderEvent.clickEvent
)
}
}
}
}
// Simple loading indicator composable
@Composable
fun LoadingIndicator() {
// Your loading UI implementation
}
// Simple error screen composable
@Composable
fun ErrorScreen(error: Throwable) {
// Your error UI implementation
}
Back Button Handling
To handle the system back button, add a back handler: