The ULTIMATE Guide to Sharing Data Between Screens in Jetpack Compose

Sdílet
Vložit
  • čas přidán 8. 09. 2024

Komentáře • 82

  • @mohamadkhorsandi6103
    @mohamadkhorsandi6103 Před měsícem

    man, let me say you something
    you are the hero
    as a beginner quite often i get confused
    and watching your videos is the ONLY solution

  • @Wiggy90210
    @Wiggy90210 Před rokem +4

    I like using raamcosta destinations for compose, it really makes things easy. It alow passing data between @Composable's, but after this I can initialize my ViewModel with the value.

  • @seannatv
    @seannatv Před rokem +4

    Another "con" of using navigation arg is that you need to make sure the string is URL encoded. I said con with quotes because you can handle this pretty easily, but sometimes you forget to do that and can spend significant of time to find out why something isn't working as expected.

    • @igormorozov6311
      @igormorozov6311 Před rokem

      you are right. By the way, Philipp didn't mentionate this and I am curious: is navigation arg only one way for using callBacks? thanks

  • @saeidhonardan
    @saeidhonardan Před rokem +2

    It is great that put the source code of the video. thanks

  • @inno_san
    @inno_san Před rokem +2

    I am using hilt view model with compose destinations, pretty neat

  • @tomasdias_
    @tomasdias_ Před rokem +5

    Hi Philipp. Very helpful video as always. I have a question: why are you using shared preferences instead of data store?

    • @ctcat4950
      @ctcat4950 Před rokem +11

      Because the API design of the shared preference is much more simpler than data store. So that this video can focus on the topic (instead of a lot of unnecessary unrelated code), I guess.

  • @MrCinekDBW
    @MrCinekDBW Před rokem +2

    That's exactly what I needed! Thanks a lot

  • @amrel-tahhan8588
    @amrel-tahhan8588 Před rokem +1

    I really love the way you demonstrate thing ♥
    but I think you should add the video to the compose playlist so we can find it easily

  • @MatthewSmith-mt3kz
    @MatthewSmith-mt3kz Před 6 měsíci

    Great tutorial, gave me a couple of good ideas for my own implementation. Thank you.

  • @legato0
    @legato0 Před rokem

    Thanks for sharing your knowledge 👍. As a beginner, I always used the first option to pass parameters between views. Now I can start testing different ways 😄

  • @arielapp9469
    @arielapp9469 Před rokem +4

    I wish there was a better way of writing jetpack navigation better :\
    anyway thank you for this lovely guide.
    is there a difference between @Singleton and object in kotlin?

    • @ChrisAthanas
      @ChrisAthanas Před rokem +1

      No, just one is for hilt annotation processing and the other is built into the language

  • @SiamakAshrafi
    @SiamakAshrafi Před rokem +1

    Nice. Very clear 🙂

  • @mubashirpa
    @mubashirpa Před rokem +2

    How to pass data to the previous screen
    Eg: I have two screen first screen is to show the list of some items from database and second screen is used to create an item. When I create an item from the second screen I want close that screen and show the updated list in the first screen

    • @Polite_person_
      @Polite_person_ Před rokem

      ActivityResultApi

    • @JakkeJakobsen
      @JakkeJakobsen Před rokem +2

      Viewmodel with stateflows should work for this

    • @osisuper98
      @osisuper98 Před rokem

      Save to db on the second screen and observe latest changes from the first screen by calling room again. Make sure your dao function, if dealing with a list for example, emits a flow. That makes it easy to read latest db items without any hassle.

  • @starry_shivam
    @starry_shivam Před 11 měsíci

    Helpful as always, Thanks!

  • @vengateshm2122
    @vengateshm2122 Před rokem +2

    Hi Phillip,
    Can we have shared viewmodel and individual viewmodel for on one onboarding screen composable at same time?

  • @csmuthukuda916
    @csmuthukuda916 Před rokem +2

    How can we share a value between main activity and a compose secreen in a different feature module..value is defined in main acitivity and i want to get it from the composable

  • @Flea997
    @Flea997 Před měsícem

    what if I want to use navigation arguments to navigate to a screen that used a shared view model? It looks like that the saveStateHandle is not updated with navigation argument being it associated to the root of the graph

  • @craigberry5713
    @craigberry5713 Před rokem +1

    Hi Philipp, first thank you for the great tutorials.I have a question if you have time?
    In the last (persistent storage) example, if we want to clear the session every time the application is closed / destroyed, but we want the session to persist through the lifetime of the app, where is the appropriate place to clear it? Isn't onDestroy() called sometimes during process death?
    Thank you again!

    • @igormorozov6311
      @igormorozov6311 Před rokem +1

      hi, this is not onDestroy(), look at 21:11, he is using fun clearSession(). Philipp told he call this functions when he need to log out

  • @nourmorgan6751
    @nourmorgan6751 Před rokem +2

    Hey Philipp , what about using compose destinations ?

  • @vinaykumarpatel649
    @vinaykumarpatel649 Před rokem +2

    In my current organization we use Singletons inside Repository to share users login data between different viewmodels, and they never experience any issue with that. I still don't understand why are you saying to avoid using Singleton classes to share data between. It is usuful when we need to access user's details in different pages.

    • @aroxing
      @aroxing Před 9 měsíci

      Android Studio always raises warnings about memory leaks using Singleton. I'm also curious why they suggest using Singletons but at the same time warn about memory leaks.

    • @antonhelsgaun
      @antonhelsgaun Před 9 měsíci

      ​@@aroxinghow does using a singleton leak memory? Isn't the whole point that it doesn't?

    • @aroxing
      @aroxing Před 9 měsíci

      @@antonhelsgaun Ask Android API and Android Studio creators

    • @PedroBarbosaRoman
      @PedroBarbosaRoman Před 15 dny +1

      @@antonhelsgaun I think that they mean that you might overuse singletons when they are not needed every time. If you use for example a singleton for a form, when you are in other parts of the app that singleton is still there using memory. However this can be mitigated by the use of scopes in the dependency injection framework.

  • @kevalkanpariya
    @kevalkanpariya Před rokem +1

    Please make video on Oauth2 Authentication with Webview using Jetpack compose
    How the CallBackUrl retrieved from the api and retrieve access token to make api calls.

    • @ayodelekehinde
      @ayodelekehinde Před rokem

      Well you can't use WebView for oauth due to security reasons. But you can use custom tabs.

    • @kevalkanpariya
      @kevalkanpariya Před rokem

      @@ayodelekehinde can tell me about more

    • @ayodelekehinde
      @ayodelekehinde Před rokem

      @@kevalkanpariya On how to use custom tabs??

  • @siyabulelashabalala8963
    @siyabulelashabalala8963 Před rokem +1

    Hi Philipp, love your videos. I have a question here, in your few previous videos you use raamcosta library as a navigation tool and lately I've seen you stop using it and I saw it also seems to provide an easy way to share data since it can share reference data. What disadvantage you discovered that made you stop using it?

    • @PhilippLackner
      @PhilippLackner  Před rokem +5

      I didn't stop using it, but I want my videos to be helpful for as many people as possible so I also use the official practices for such videos

    • @siyabulelashabalala8963
      @siyabulelashabalala8963 Před rokem

      ​@@PhilippLackner cool thanks, one more question. Why do you use sealed class when a sealed interface can do the job? Especially on the event rapper class where the classes inside the sealed class share no common data unlike the Resource class

  • @JohanAlbrectsen
    @JohanAlbrectsen Před rokem +2

    I'm sharing a viewModel between a regular composable and a sheet, but the UI doesn't update when I change the sharedState in the viewModel from the sheet. How can I make it recompose when the value in the viewModel is updated?

    • @JohanAlbrectsen
      @JohanAlbrectsen Před rokem +3

      Resolved, used mutableStateOf instead of MutableStateFlow, for anyone wondering 😁

    • @helloworld_sw
      @helloworld_sw Před 10 měsíci

      @@JohanAlbrectsen why MutableStateFlow didn't work

  • @khayyamaurelius912
    @khayyamaurelius912 Před 4 měsíci

    Great video

  • @suchizgames4748
    @suchizgames4748 Před 9 měsíci

    Hi, thanks for enlightening me. I am using DaggerHilt in a Jetpack Compose project with nested graph. So I chose to share a viewmodel which is graph scoped. But I am struggling to inject that sharedViewmodel into "children" viewmodels. Is there a way of doing this ? thanks

  • @user-lk4jk5ex9l
    @user-lk4jk5ex9l Před 7 měsíci

    Hey Philipp. How to pass arguments to shared viewmodel?

  • @trp4871
    @trp4871 Před rokem +1

    Hi Philipp, I have a question about docker. Do we (android dev) need to learn docker or it just nice to know

    • @Latsson2
      @Latsson2 Před rokem +2

      No you don't

    • @ChrisAthanas
      @ChrisAthanas Před rokem +1

      Not needed for android dev
      It’s a backend tech

  • @alexmercerind
    @alexmercerind Před 5 měsíci

    Does composition local work through configuration changes?

  • @androidkotlin-6234
    @androidkotlin-6234 Před rokem +1

    how can I pass nullable value? for example, I need to pass Long (as LocalDateTime), and sometime this value can be nullable. If I pass null for that value, my application is crashing, because it's an exception about wrong navigation, can't find route

    • @excalibur8147
      @excalibur8147 Před rokem +2

      At the function call who gets nullable value, make it nullable and assign a value if null with " ?: "
      fun getTime(nullableVariable: Long ?: 0)
      Or before using nullable variable, check if it is null
      if (nullableVariable != null) {
      //do if not null...
      } else {
      //do if null...
      }

  • @techug2719
    @techug2719 Před 6 měsíci

    Help:
    It has been an increasing trend to have routes stored in a sealed class as objects, i am having trouble following up using my own code base because when i call the route i find it difficult to add the parameter i am passing as i am navigating, how can I do this?

  • @eibaal-gx9os
    @eibaal-gx9os Před rokem +1

    When you try jetpack compose multiplataform ?

  • @John-qt6qk
    @John-qt6qk Před rokem

    Thanks

  • @Prakhar1701
    @Prakhar1701 Před 8 měsíci

    can any one tell me how to pass a custom model class object with navigation and what Navtype should i use, please help me

  • @emmanuelmtera5936
    @emmanuelmtera5936 Před rokem

    On the last option is using sqDelight a choice for Kotlin Multiplatform Mobile?

  • @khatteeeer_Dev
    @khatteeeer_Dev Před rokem

    How can we make favorite item to database and when colse app and run it again the fav button will be active based on database ?

  • @the_nomadic_ajith
    @the_nomadic_ajith Před rokem

    One question, why do we have to redeclare a new mutable state in viewmodel and assign it to original stateflow. Is there any issue if create a stateflow in viewmodel and directly access it from composables? As long as i make sure that i am not writing anything to the state, is it fine?
    Ref: private val val sharedState = MutableStateFlow( value: 0)
    sharedState = _sharedState.asStateFlow)

    • @JepRM
      @JepRM Před rokem +2

      That .asStateFlow() returns the stateflow as immutable. So the visible sharedState is immutable. This enforces that there is a single source of truth for that view state as only the view model can update it. This is something jetbrains said would be improved at some point in kotlin 2 🤞

  • @moisesvalera3597
    @moisesvalera3597 Před rokem

    In SharedViewModel approach, how can I reset the viewModel once I leave "personal_details" route?, it's always loading previous data onceI got back into it again.

    • @PhilippLackner
      @PhilippLackner  Před rokem

      The whole graph needs to be popped from the backstack to clear it

  • @SpaceGuideHub
    @SpaceGuideHub Před rokem

    It seems to me that data binding in xml layout projects is easy, but it more hell then compose

  • @sanky52
    @sanky52 Před rokem

    How to send parcelable object to start destination

  • @thedarkknight1865
    @thedarkknight1865 Před rokem +12

    I use bundle

  • @aviator1472
    @aviator1472 Před 6 měsíci

    14:12 why not to use Object?

  • @chelfe
    @chelfe Před rokem

    does passed intent arguments survive process death?

  • @itsjee9700
    @itsjee9700 Před rokem

    Can we share complex object data without using SharedViewModel ?

  • @AsadKhan-et9ux
    @AsadKhan-et9ux Před 9 měsíci

    how to use hilt shared viewmodel

  • @mahmoudalkateb2008
    @mahmoudalkateb2008 Před rokem +1

    🎉

  • @VictorFarkas-fp2gl
    @VictorFarkas-fp2gl Před rokem

    what about Preferences DataStore?

  • @neronguyenvn
    @neronguyenvn Před rokem

    how to properly share with activity please tell me

  • @seanknowles9985
    @seanknowles9985 Před rokem

    In what order shall we take all your courses?!

    • @PhilippLackner
      @PhilippLackner  Před rokem

      They don't depend on each other, so as you like 👍🏼

    • @seanknowles9985
      @seanknowles9985 Před rokem

      @@PhilippLackner legend will let you know when I am done! Also, would be super cool to get some discount on your monthly subs for the freelancer group for those who bought the ultimate package:) just saying..

  • @huddahhuddah517
    @huddahhuddah517 Před rokem

    Im still hard to understand navigation in compose :(

  • @tuyulghost291
    @tuyulghost291 Před rokem +5

    your english so fast, please make it slow

  • @Adam0001
    @Adam0001 Před rokem

    Hello Mr.Pilipp
    Could you make an app with multi-module and navigation, and the app consists of two types of user.
    Thanks a lot 🤍

  • @seanoh1989
    @seanoh1989 Před rokem +6

    Another "con" of using navigation arg is that you need to make sure the string is URL encoded. I said con with quotes because you can handle this pretty easily, but sometimes you forget to do that and can spend significant of time to find out why something isn't working as expected.

    • @osisuper98
      @osisuper98 Před rokem +4

      I once spent 3hrs on this little thing. Very painful experience.

    • @ChrisAthanas
      @ChrisAthanas Před rokem +2

      I got snagged on this early on
      They should have made it some kind of standard hint

  • @danilsveticov6196
    @danilsveticov6196 Před rokem

    Thanks