
State hoisting moves state up to the parent in Jetpack Compose, turning text field components stateless by passing values and on value change handlers.
Explore jetpack compose layouts by using column, row, and box to position and measure child components, with vertical and horizontal arrangements, spacing, and alignment options.
Explore remember with a key and derivedStateOf in Jetpack Compose, showing how dependencies trigger recomposition and how derivedStateOf reduces unnecessary recompositions in lazy lists.
Learn to use @Preview in Jetpack Compose to preview composables in Android Studio. Keep composables stateless and use multi-device previews with configurable name, size, locale, theme, and system interface.
Explore Jetpack Compose's scaffold with top and bottom bars, tabs, and nested components, and learn local composition, including static composition local of and composition local of for authentication state.
Explore Jetpack Compose animations, learning animated visibility, content transitions, enter and exit effects, and infinite transitions, plus practical use of animated content, size, and lazy list animations.
Jetpack Compose theming defines colors, typography, and shapes for a consistent UI in light and dark themes. Learn to customize Material three expressive tokens and override component colors at runtime.
Here's the link of the repository: https://github.com/stevdza-san/To-Do-CMP
Develop a fake repository to test the home screen, introducing a generic request state sealed class with idle, loading, success, and error, plus a fake data source for tasks.
Develop a task screen using a task view model and ui state to load, create, and update tasks with a repository, error handling, and snack bar feedback.
Learn to implement swipeable task cards in a multiplatform app with the Swipeable KMP library, enabling left dismiss for delete and right swipe to mark as completed.
Explore iOS navigation in a multiplatform Kotlin project, building a separate navigation graph for iOS using the navigation tool, with a nav host and nav controller.
Swap the fake repository for the real SQLDelight database by enabling Gradle dependencies, adding a task database, and wiring Android and iOS drivers to use generated SQLDelight APIs.
In this course, you’ll learn how to build a beautiful, production-ready To-Do mobile app for both Android and iOS, from scratch using Jetpack Compose Multiplatform and Kotlin Multiplatform.
- No XML
- No duplicated code
- No outdated practices
Just one shared codebase, written in Kotlin, powering two native mobile apps.
If you’re new to mobile development, or you’ve built Android apps before and want to step into the future this course is designed exactly for you.
Why this course is different
Mobile development has changed. Today, you don’t need separate teams or completely different codebases to build Android and iOS apps.
With Compose Multiplatform + Kotlin Multiplatform, you can:
Share UI and business logic
Build native apps for Android and iOS
Keep your code clean, scalable, and easy to maintain
And that’s exactly what we’ll do step by step.
What you’ll build
Throughout this course, we’ll build a real-world To-Do application that:
Runs natively on Android and iOS
Uses Jetpack Compose / Compose Multiplatform for UI
Stores data locally using a local database
Supports Light & Dark theme out of the box
Is fully responsive in portrait and landscape
Includes smooth animations and polished UI
Follows clean architecture with MVVM
Is scalable, maintainable, and production-ready
This is not a demo app, it’s a solid foundation you can reuse in your own projects.
What you’ll learn
By the end of the course, you will confidently understand:
How Compose Multiplatform works under the hood
How to structure a Kotlin Multiplatform project properly
How composables work, their lifecycle, and recomposition
How to build custom reusable UI components
How to manage state and logic with ViewModels (MVVM)
How to persist data locally in a multiplatform-friendly way
How to handle themes, responsiveness, and animations
How to write clean, readable, and testable code