Comments (4)
Good questions!
Theoretically I could have registered RegisterViewModel
via ScopeKey
from the first screen (i think it's EnterProfileDataKey
), and you'd be able to see it on the second screen's Fragment via by lazy { lookup<RegistrationViewModel>() }
as well. This is what the video calls implicit parents.
But in this sample I specifically used ScopeKey.Child
(explicit parents) because it portrays how you can define a shared scope that is instantiated if any of the keys are added, and not just specifically the first step (oftentimes you have a ui flow to implement with multiple steps, and some are optional -- imagine getting a crash because the first step is no longer needed, only 2-3-4th 🤦)
It's also useful for backstack.exitScope()
and backstack.exitScopeTo()
.
Is it because the RegistrationViewModel is used by tow fragment (CreateLoginCredentials and EnterProfileData) like below?
Yes, if you can't guarantee that a given key exists but "one of multiple keys" does, then if "one of the keys" is in the history, then the scope is kept alive.
Is it the instance will cleared when the fragments who consume it with ScopeKey.Child get closed by backstack?
If there is no key that defines the scope as a parent, then it will be destroyed (and for any scoped-service such as RegistrationViewModel
is added to this scope, then onServiceUnregistered()
will be invoked on it, if it implements ScopedServices.Registered
).
One thing, ServiceProvider
extends from DefaultServiceProvider()
because the keys defining the required services is a reasonable default, however it is also customizable (this can come up in multi-module environments, I had to use multibinding for this once ~ which is also something I mention in the talk, although I wonder if it wasn't really that clear as to "why").
from simple-stack.
Ah I see, it's as simple as two fragments that implement ScopeKey.Child will try to lookup (potentially) same service by looking at it's TAG.
So, with this teory, I can pull service that I shared as many as I need it?🤔
from simple-stack.
Technically it's the key that implements ScopeKey.Child
not the fragment, but yes, you can pull the service that you shared as many as you want.
The service provider class in the sample is to show that if you define a custom scope, then you'll need to pass a more customized class than just DefaultServiceProvider
.
from simple-stack.
It clears my head. Thanks
from simple-stack.
Related Issues (20)
- Can I Use @styles/Theme.MyComposeTheme on AndroidManifests.xml? HOT 3
- What is the proper way to add a key to the top even if it already exists in the backstack? HOT 2
- Publish to MavenCentral instead of just Jitpack.io HOT 2
- Unable to start activity ComponentInfo{com.xxxxxxxxxx.yyyyyy/com.xxxxxxxxxx.yyyyyy.activities.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment q2.v1: could not find Fragment constructor HOT 7
- How to 'lookup<>()' scoped class from an Android Service HOT 2
- Lazy initialization of ScopedServices HOT 2
- KMM support? HOT 2
- Screen can get the service from wrong scope during back animation HOT 6
- Backstack is not available in a child Fragment's onCreate after process death
- DialogFragment and BottomDialogFragment as part of navigation stack, question HOT 2
- Verify that the new `setParentServices()`'s `lookupFromScope(..., EXPLICIT)` behavior is what is expected
- Updating the Compose example to Compose 1.5.0 requires AGP 8.1
- Should Simple Stack be used in new projects HOT 14
- Crash due to activity.onBackPressed() when removing fragment hosting a WebView in AndroidView {} + FADE HOT 15
- Backstack with espresso HOT 3
- The service does not exist in any accessible scopes HOT 11
- Up navigation examples are hard to find HOT 3
- Consider adding Backstack.services() method as in GlobalServices.services() HOT 4
- Extensions should support Fragment in-app predictive back animations
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from simple-stack.