Improve Search Bar

This commit is contained in:
FirephoenixX02 2024-04-17 10:19:25 +02:00
parent 72fe8363b8
commit 6f55430a1d
4 changed files with 57 additions and 1051 deletions

View file

@ -1,3 +1,4 @@
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -13,12 +14,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.OutlinedTextField import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.TextField import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.TextFieldColors import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -55,6 +58,50 @@ class HomeScreen: Screen {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
var searchQuery by remember { mutableStateOf("") } var searchQuery by remember { mutableStateOf("") }
Box(modifier = Modifier.background(color = orange).fillMaxSize()) { Box(modifier = Modifier.background(color = orange).fillMaxSize()) {
OutlinedTextField(
value = searchQuery,
onValueChange = { newName -> searchQuery = newName },
modifier = Modifier.fillMaxWidth(0.8f)
.padding(horizontal = 16.dp)
.padding(top = 16.dp)
.background(color = Color.White),
trailingIcon = {
IconButton(
onClick = {
if (searchQuery.length >= 3 && PokemonNames.names.any { name -> name.contains(searchQuery.lowercase(
Locale.getDefault())) }) {
coroutineScope.launch {
withContext(Dispatchers.IO) {
println("Searching for pokemon, query: $searchQuery")
val names: List<String> = PokemonNames.names.filter { name -> name.contains(searchQuery.lowercase(
Locale.getDefault())) }
val newMap = arrayListOf<Pokemon>()
names.forEach { name ->
loadPokemonDataFromName(name)?.let {
newMap.add(it)
}
}
println(names)
println(newMap)
if (newMap.isNotEmpty()) {
pokemap.clear()
pokemap.addAll(newMap)
}
}
}
}
}
) {
Icon(Icons.Default.Search, contentDescription = "Search")
}
},
colors = TextFieldDefaults.outlinedTextFieldColors(
focusedBorderColor = Color(0xFFffa500), // Orange color
unfocusedBorderColor = Color(0xFFffa500), // Orange color
textColor = Color.Black
)
)
//Grid
LazyVerticalGrid( LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 256.dp), columns = GridCells.Adaptive(minSize = 256.dp),
) { ) {
@ -104,20 +151,6 @@ class HomeScreen: Screen {
} }
} }
} }
OutlinedTextField(
value = searchQuery,
onValueChange = { newName -> searchQuery = newName;
if (PokemonNames.names.contains(searchQuery.lowercase(Locale.getDefault()))) {
coroutineScope.launch {
withContext(Dispatchers.IO) {
val newMap = loadPokemonDataFromName(searchQuery);
newMap?.let { pokemap.clear(); pokemap.addAll(it) }
}
}
}
},
modifier = Modifier.background(color = Color.White),
)
} }
} }

File diff suppressed because one or more lines are too long

View file

@ -77,10 +77,6 @@ fun App() {
loadPokemonData(1, 10) loadPokemonData(1, 10)
} as ArrayList<Pokemon> } as ArrayList<Pokemon>
pokemap.forEach { pokemon ->
println(pokemon)
}
dataLoaded = true dataLoaded = true
} }
@ -90,6 +86,7 @@ fun App() {
Navigator(screen = HomeScreen()) { navigator -> Navigator(screen = HomeScreen()) { navigator ->
SlideTransition(navigator) SlideTransition(navigator)
} }
print(PokemonNames.names)
} }
} }
} }
@ -114,7 +111,8 @@ suspend fun loadPokemonData(startId: Int, endId: Int): List<Pokemon> {
return pokemap return pokemap
} }
suspend fun loadPokemonDataFromName(name: String): ArrayList<Pokemon>? { suspend fun loadPokemonDataFromName(name: String): Pokemon? {
println("fetching api, name: ${name}")
if (name.equals("")) return null if (name.equals("")) return null
var json: JSONObject = JSONObject("{}") var json: JSONObject = JSONObject("{}")
try { try {
@ -136,7 +134,7 @@ suspend fun loadPokemonDataFromName(name: String): ArrayList<Pokemon>? {
pokemap.add(pokemon) pokemap.add(pokemon)
return pokemap return pokemon
} }
fun getPokeMap(): ArrayList<Pokemon> { fun getPokeMap(): ArrayList<Pokemon> {

File diff suppressed because one or more lines are too long