This commit is contained in:
2026-04-16 10:09:06 +01:00
parent 118c75dd6e
commit ebfa360e8b
53 changed files with 1334 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
package com.example.api
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.api.ui.components.CharacterItem
import com.example.api.ui.theme.ApiTheme
import com.example.api.viewmodel.CharacterViewModel
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
ApiTheme {
CharacterScreen()
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CharacterScreen(viewModel: CharacterViewModel = viewModel()) {
val characters by viewModel.characters.collectAsState()
val isLoading by viewModel.isLoading.collectAsState()
val error by viewModel.error.collectAsState()
Scaffold(
topBar = {
TopAppBar(title = { Text("Rick and Morty Characters") })
}
) { innerPadding ->
Box(
modifier = Modifier
.fillMaxSize()
.padding(innerPadding)
) {
when {
isLoading -> {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
}
error != null -> {
Column(
modifier = Modifier.align(Alignment.Center),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = error ?: "Erro desconhecido")
Spacer(modifier = Modifier.height(8.dp))
Button(onClick = { viewModel.fetchCharacters() }) {
Text("Tentar novamente")
}
}
}
else -> {
LazyColumn {
items(characters) { character ->
CharacterItem(character = character)
}
}
}
}
}
}
}