
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