Skip to content

Instantly share code, notes, and snippets.

@joreilly
Created May 28, 2021 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joreilly/4541a4245ca5964b391884dd2c9438a3 to your computer and use it in GitHub Desktop.
Save joreilly/4541a4245ca5964b391884dd2c9438a3 to your computer and use it in GitHub Desktop.
import androidx.compose.desktop.Window
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
data class Assignment(val craft: String, val name: String)
fun main() = Window {
var selectedPerson by remember { mutableStateOf("") }
val people = listOf(
Assignment("ISS", "Chris Cassidy"),
Assignment("ISS", "Anatoli Ivanishin")
)
MaterialTheme {
Scaffold(
topBar = {
TopAppBar(title = { Text("People In Space") })
}) {
Row(Modifier.fillMaxSize()) {
Box(Modifier.width(250.dp).fillMaxHeight().background(color = Color.LightGray)) {
PersonList(people, selectedPerson) {
selectedPerson = it.name
}
}
Spacer(modifier = Modifier.width(1.dp).fillMaxHeight())
Box(Modifier.fillMaxHeight()) {
PersonDetailsView(selectedPerson)
}
}
}
}
}
@Composable
fun PersonList(people: List<Assignment>, selectedPerson: String, personSelected : (person : Assignment) -> Unit) {
LazyColumn {
items(people) { person ->
PersonView(person, selectedPerson, personSelected)
}
}
}
@Composable
fun PersonView(person: Assignment, selectedPerson: String, personSelected : (person : Assignment) -> Unit) {
Row(
modifier = Modifier.fillMaxWidth().clickable(onClick = { personSelected(person) })
.padding(8.dp), verticalAlignment = Alignment.CenterVertically
) {
Column {
Text(person.name,
style = if (person.name == selectedPerson) MaterialTheme.typography.h6 else MaterialTheme.typography.body1
)
Text(text = person.craft, style = TextStyle(color = Color.DarkGray, fontSize = 14.sp))
}
}
}
@Composable
fun PersonDetailsView(personName: String) {
LazyColumn(
modifier = Modifier.padding(16.dp).fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
item {
Text(personName, style = MaterialTheme.typography.h4)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment