Passing data using CompositionLocal
CompositionLocal allows you to pass data between composables implicitly without passing parameters. A common use case is sharing design system attributes such as colors and type styles
Compose remember vs remember mutableStateOf
Manage state with remember mutableStateOf to cause recomposition of dependent composables when state changes
StateFlow vs SharedFlow in Compose
Discuss uses and limitations for observable data holders StateFlow and SharedFlow when building Android apps
Bottom Nav with Nav Graphs in Compose
Example of setting up BottomNavigation with multiple backstacks using Jetpack Compose Navigation library
Intercept back press in Jetpack Compose
Learn to intercept back press to perform an intermediate action in Jetpack Compose
Bottom Navigation in Jetpack Compose
A comprehensive example to get you started with using BottomNavgation in Jetpack Compose
Manage multiple Git configs
Learn how to use a single machine to work with different Gihub repositories belonging to different user accounts
Jetpack Navigation: Bottom Nav and Multiple Backstacks
Achieving multiple backstacks with Jetpack Navigation component in a view-based project
Consumable LiveData Wrapper
An alternative to using a SingleLiveEvent lifecycle-aware observable data holder to avoid duplicate view effect emissions
RecyclerView ConcatAdapter
Manage different RecyclerView view types such as header, footer, featured items declaratively with ConcatAdapter without third party library
Retrying Network Requests with Flow
Use the power of Kotlin Flow and retryWhen to retry failed network and other events. Define configurable reusable retry policies
Jetpack Cross-NavGraph Destinations
Routing between destinations from different navigation graphs using Jetpack Navigation library
ConstraintLayout Animation 101
Learn basics of animating using ConstraintLayout by example
Flow widget in ConstraintLayout
Learn to position elements dynamically using Flow helper object from ConstraintLayout
Achieving Negative Margin in ConstraintLayout
Using Space widget to achieve negative margins in view-based layouts
RecyclerView DiffUtil with Change Payload
Learn to re-bind only parts of RecyclerView item layouts using DiffUtil change payloads
Conditional Caching with Retrofit and OkHttp
Control origin vs cache API calls using HTTP Cache-control headers
Components and Scoping in Hilt
Learn Dagger Hilt component and scope annotations to control lifetime of your injected dependencies
Inject vs Provides vs Binds in Dagger and Hilt
Learn when to use Inject, Provides and Binds annotation in projects using Dagger or Hilt
Android Studio: Reformat Code Options
Take advantage of default IDE and project-specific auto-format options in Android studio