Nama: Richard Ryan
NRP: 5025211141
Kelas: PPB (G)
Tema: Woof App
Link Github : Github
Penjelasan Kode
Pertama set terlebih dahulu jenis tema yang akan digunakan
@Composable fun WoofTheme( darkTheme: Boolean = isSystemInDarkTheme(), dynamicColor: Boolean = false, content: @Composable () -> Unit ) { val colorScheme = when { dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { val context = LocalContext.current if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) } darkTheme -> DarkColors else -> LightColors } val view = LocalView.current if (!view.isInEditMode) { SideEffect { val window = (view.context as Activity).window window.statusBarColor = colorScheme.primary.toArgb() WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme } } MaterialTheme( colorScheme = colorScheme, shapes = Shapes, typography = Typography, content = content ) }
Setelah itu, buat data class Dog yang menyatakan bentuk entity dan daftar entity tersebut sebagai berikut
data class Dog( @DrawableRes val imageResourceId: Int, @StringRes val name: Int, val age: Int, @StringRes val hobbies: Int ) val dogs = listOf( Dog(R.drawable.koda, R.string.dog_name_1, 2, R.string.dog_description_1), Dog(R.drawable.lola, R.string.dog_name_2, 16, R.string.dog_description_2), Dog(R.drawable.frankie, R.string.dog_name_3, 2, R.string.dog_description_3), Dog(R.drawable.nox, R.string.dog_name_4, 8, R.string.dog_description_4), Dog(R.drawable.faye, R.string.dog_name_5, 8, R.string.dog_description_5), Dog(R.drawable.bella, R.string.dog_name_6, 14, R.string.dog_description_6), Dog(R.drawable.moana, R.string.dog_name_7, 2, R.string.dog_description_7), Dog(R.drawable.tzeitel, R.string.dog_name_8, 7, R.string.dog_description_8), Dog(R.drawable.leroy, R.string.dog_name_9, 4, R.string.dog_description_9) )
Kemudian set halaman utama sebagai berikut. Digunakan Scaffold sebab diperlukan top bar dan floating action button untuk mengubah light mode menjadi dark mode dan sebaliknya. Setelah itu, setiap item akan dimasukkan kedalam LazyColumn agar bisa discroll
@Composable fun WoofApp() { var isDarkTheme by remember { mutableStateOf(false) } WoofTheme(darkTheme = isDarkTheme) { Scaffold( topBar = { WoofTopAppBar() }, floatingActionButton = { FloatingActionButton(onClick = { isDarkTheme = !isDarkTheme }) { Icon( imageVector = Icons.Default.Brightness6, contentDescription = "Toggle Theme" ) } } ) { it -> LazyColumn(contentPadding = it) { items(dogs) { DogItem( dog = it, modifier = Modifier.padding(dimensionResource(R.dimen.padding_small)) ) } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun WoofTopAppBar(modifier: Modifier = Modifier) { CenterAlignedTopAppBar( title = { Row( verticalAlignment = Alignment.CenterVertically ) { Image( modifier = Modifier .size(dimensionResource(R.dimen.image_size)) .padding(dimensionResource(R.dimen.padding_small)), painter = painterResource(R.drawable.ic_woof_logo), contentDescription = null ) Text( text = "Woof App - Richard", style = MaterialTheme.typography.displayLarge ) } }, modifier = modifier ) }
Setiap item akan dimasukkan ke konfigurasi Card sebagai berikut
@Composable fun DogItem( dog: Dog, modifier: Modifier = Modifier ) { Card( modifier = modifier ) { Row( modifier = Modifier .fillMaxWidth() .padding(dimensionResource(R.dimen.padding_small)) ) { DogIcon(dog.imageResourceId) DogInformation(dog.name, dog.age) } } } fun DogIcon( @DrawableRes dogIcon: Int, modifier: Modifier = Modifier ) { Image( modifier = modifier .size(dimensionResource(R.dimen.image_size)) .padding(dimensionResource(R.dimen.padding_small)) .clip(MaterialTheme.shapes.small), contentScale = ContentScale.Crop, painter = painterResource(dogIcon), contentDescription = null ) } @Composable fun DogInformation( @StringRes dogName: Int, dogAge: Int, modifier: Modifier = Modifier ) { Column(modifier = modifier) { Text( text = stringResource(dogName), style = MaterialTheme.typography.displayMedium, modifier = Modifier.padding(top = dimensionResource(R.dimen.padding_small)) ) Text( text = stringResource(R.string.years_old, dogAge), style = MaterialTheme.typography.bodyLarge ) } }
Comments
Post a Comment