Skip to main content

Woof App - Android

 

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
        )
    }
}

Hasil







Comments

Popular posts from this blog

Starbucks Clone - Android

  Nama: Richard Ryan NRP: 5025211141 Kelas: PPB (G) Tema: Aplikasi Starbucks Link Github :  Github Hasil

Evolusi Perangkat Bergerak

Nama: Richard Ryan NRP: 5025211141 Kelas; PPB G 1. Sejarah Ponsel - Ponsel pertama kali diciptakan pada April 1973 oleh Motorola yang kemudian dinamakan DynaTAC 8000X. Ponsel ini cukup berat, mencapai 1.1 kg dan memiliki daya yang boros dimana baterinya hanya memungkinkan komunikasi selama 30 menit sebelum harus diisi ulang selama 10 jam - Ponsel mulai populer pada tahun 1990an, pada masa tersebut jumlah pengguna hanyalah sekitar 10 juta orang sedangkan 10 tahun kemudian, pada tahun 2000, angka tersebut telah naik mencapai 2.5 milyar pengguna 2. Perkembangan teknologi ponsel - 1973: Ponsel pertama diciptakan oleh Motorola - 1985: Ponsel Siemens Mobiletelefon C1 berbentuk tas dirilis - 1987: Nokia meluncurkan ponsel pertama mereka, Mobira Cityman 900. Ponsel ini memiliki berat total 800 gram. Ponsel ini tergolong sebagai ponsel dengan harga yang cukup mahal dan hanya kalangan tertentu yang bisa membelinya - 1988: Samsung merilis ponsel pertama mereka, SH-100. Ponsel ini juga menjadi pon...

Trash2Cash

  Trash2Cash Aplikasi Manajemen Bank Sampah