Aplikasi Android simulasi news feed menggunakan Kotlin, Jetpack Compose, dan Coroutines.
- Clone repository ini
- Buka project menggunakan Android Studio
- Pastikan sudah menginstall SDK Android (min SDK 24)
- Jalankan aplikasi di emulator atau perangkat fisik via tombol Run
NewsRepository menggunakan flow {} untuk men-emit berita baru setiap 2 detik secara terus-menerus, mensimulasikan data yang datang dari server.
fun getNewsStream(): Flow<News> = flow {
while (true) {
delay(2000)
emit(News(...))
}
}Pengguna dapat memfilter berita berdasarkan kategori Tech, Sports, atau Finance. Filter diterapkan di NewsViewModel menggunakan operator filter().
list.filter { category == null || it.category == category }Sebelum ditampilkan ke UI, judul berita ditransformasi menjadi huruf kapital menggunakan operator map().
.map { news -> news.copy(title = news.title.uppercase()) }Jumlah berita yang dibaca disimpan menggunakan MutableStateFlow dan bertahan selama lifecycle ViewModel. Nilainya bertambah setiap kali pengguna mengklik berita.
private val _readCount = MutableStateFlow(0)
val readCount: StateFlow<Int> = _readCount.asStateFlow()Detail berita dimuat secara asinkron menggunakan async di Dispatchers.IO agar tidak memblokir main thread.
fun loadDetail(news: News, onResult: (News) -> Unit) {
viewModelScope.launch {
val detail = async(Dispatchers.IO) {
repository.getNewsDetail(news)
}.await()
onResult(detail)
}
}com.example.newsfeed/
├── model/ # Data class News
├── data/ # NewsRepository (sumber data)
├── viewmodel/ # NewsViewModel (state & logika)
└── ui/ # NewsScreen & NewsItem (tampilan)
- Kotlin + Coroutines & Flow
- Jetpack Compose (UI)
- ViewModel + StateFlow (state management)
- Kotlin Multiplatform (struktur project)