Comments (6)
Oh, I think I got confused about the issue. I'll investigate. Sounds like a bug for sure.
Thanks for the report.
from riverpod.
It depends on the changes involved. But if it has to be a 3.0.0 fix, you could always stick to using your fork in the meantime
from riverpod.
All of that sounds normal to me.
A
was mounted, and A
is listening to B
. So B
is indeed listened.
Even though A
is unused, it still needs to listen to B
. After-all if B
is recomputed, A
will have to be recomputed the next time it is used.
from riverpod.
I guess I just expected both A
and B
to be disposed when I leave the page and wait. I expected the state of B
to be reset when I go back to the page the second time, but it remains. Why should a disposed resource A
keep its dependencies B
alive forever?
I find it weird that an unused auto-dispose provider leaves a listener attached to its dependency forever. This fundamentally causes a memory leak because if you:
- Navigate to
SomeScreen
- Go back
- Repeat steps 1-2 many times
In the end, you'll only have one SomeScreen
mounted, so A
will end up with one listener. B
will have 1 useful listener and many other "ghost" listeners that are never cleared. So if those steps are repeated, you end up with 1 million listeners on B
even though only one of them is for a resource that isn't disposed? There's no way that this can be expected behavior.
Why doesn't the watch method in A
check if A
is used/not disposed before adding the listener to B
?
from riverpod.
My project relies on this task being fixed urgently. If I were to make a PR and it's merged successfully, could it be a part of a minor release, or would it have to wait until 3.0?
from riverpod.
I'm not exactly sure how to fix this. If provider a
in my example is disposed since we left the screen, should it be allowed to watch anything? Or should a
wait until it has no listeners and its build is completed before disposing?
from riverpod.
Related Issues (20)
- autoDispose is not working when the widget is disposed,and the same widget is registered again after the previous widget was disposed HOT 8
- `Unhandled Exception: setState() or markNeedsBuild() called during build.` when combining overrides and async providers
- We need a pattern to flow HOT 3
- Add AsyncValue documentation HOT 5
- Add dependency injection doc HOT 2
- Add WidgetRef documentation HOT 2
- await ref.watch(streamProvider.future); resolves on the first yield HOT 3
- What is the recommended way of watching derived values of state exposed through methods ? There's no mention of this in docs HOT 1
- Alternatives to AVOID initializing providers in a widget HOT 1
- Improve error message when Consumer.ref is read after the widget is unmounted HOT 3
- ImageProvider generated as InvalidType HOT 4
- `AutoDisposeProvider` is getting disposed when watched in a `StreamProvider` using `async*` HOT 1
- Provider container loses data in widget test HOT 4
- AutoDisposeNotifierProvider causing state loss HOT 3
- Reword `The ref.watch method should not be called asynchronously`
- Add a DevTools extension for riverpod HOT 2
- Broken update HOT 3
- [riverpod 3] NotifierProvider doesn't work with a NotifierBase mixin.
- riverpod_generator does not respect import aliases HOT 1
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 riverpod.