 
      
      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