Tugas 9 - Membuat Aplikasi Woof

 

Nama : Muhammad Rafif Fadhil Naufal

NRP : 5025201273

Kelas : Pemrograman Perangkat Bergerak - B


Tugas 9 : Membuat Aplikasi Woof

Aplikasi Woof adalah aplikasi yang menampilkan daftar anjing dengan menggunakan Desain Material untuk menciptakan tampilan dan pengalaman aplikasi yang menarik. Aplikasi ini memanfaatkan elemen-elemen Desain Material untuk memberikan antarmuka yang intuitif dan estetis, sehingga pengguna dapat dengan mudah menelusuri berbagai informasi tentang anjing. Melalui implementasi yang baik dari Desain Material, Aplikasi Woof memastikan pengalaman pengguna yang mulus dan menyenangkan dalam mengeksplorasi daftar anjing yang tersedia.

dog.kt

package com.example.woof.data

import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.example.woof.R

/**
* A data class to represent the information presented in the dog card
*/
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)
)
mainactivity.kt

package com.example.woof

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Card
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.example.woof.data.Dog
import com.example.woof.data.dogs
import com.example.woof.ui.theme.WoofTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WoofTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize()
) {
WoofApp()
}
}
}
}
}

/**
* Composable that displays an app bar and a list of dogs.
*/
@Composable
fun WoofApp() {
Scaffold(
topBar = {
WoofTopAppBar()
}
) { it ->
LazyColumn(contentPadding = it) {
items(dogs) {
DogItem(
dog = it,
modifier = Modifier.padding(dimensionResource(R.dimen.padding_small))
)
}
}
}
}

/**
* Composable that displays a list item containing a dog icon and their information.
*
* @param dog contains the data that populates the list item
* @param modifier modifiers to set to this composable
*/
@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)
}
}
}

/**
* Composable that displays a Top Bar with an icon and text.
*
* @param modifier modifiers to set to this composable
*/
@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 = stringResource(R.string.app_name),
style = MaterialTheme.typography.displayLarge
)
}
},
modifier = modifier
)
}

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


@Preview
@Composable
fun WoofPreview() {
WoofTheme(darkTheme = false) {
WoofApp()
}
}


@Preview
@Composable
fun WoofDarkThemePreview() {
WoofTheme(darkTheme = true) {
WoofApp()
}
}




Comments

Popular posts from this blog

Tugas 10 - Membuat Dessert Clicker