flutter_hooks icon indicating copy to clipboard operation
flutter_hooks copied to clipboard

Custom hook calling dispose in reverse mode

Open antonio-nicolau opened this issue 3 years ago • 3 comments
trafficstars

Custom hook is calling dispose in reverse mode

I'm using custom hook on my project to initialise and configure ChewieController and I was getting the error chewieController used after being disposed because of that I decided investigate wtf 🤬 is going on and I realised that my custom hook is calling dispose in reverse order, I mean, after put logs on initHook and dispose I saw that it calls dispose after initHook.

When does it happen ?

I have a video page which receive a videoId as param, I call my custom hook here. When I click on button to call this page again passing a different param (videoId), Flutter remove this page from widget tree and call it again with different videoId. While it happen you can see on logs dispose being called after initHook causing that if I initialise something on initHook it will be disposed and will throw an error when I try to access it later

NOTE it doesn't happen just with beamer package but even doing it with Navigator.pop and Navigator.push

To Reproduce

I created a reproduced code, you can find here

https://user-images.githubusercontent.com/67912928/180266819-19d2dff8-af40-4eb7-bc13-0a126d6eb5e2.mov

Please pay attention on logs and you'll see dispose being called after initHook

Expected behavior When close video_page and call it again should call dispose and after that initHook

antonio-nicolau avatar Jul 21 '22 16:07 antonio-nicolau

Your example is in fact unrelated to flutter_hooks.

It's not hooks that are disposed in reverse order. It's the pages themselves.

It's either Flutter or your navigator here that decides to dispose pages in this order. flutter_hooks only disposes of the hooks when the associated widget is disposed.

rrousselGit avatar Jul 21 '22 16:07 rrousselGit

I see 🤔 so does anyone knows how to bypass this situation ?

antonio-nicolau avatar Jul 21 '22 21:07 antonio-nicolau

I see 🤔 so does anyone knows how to bypass this situation ?

I can see in the video attached that after all of the navigations when navigating back, you're directly going to the initial page when you go back.

In my guess, you're using directly replacing the routes for navigation and therefore the previous page is getting disposed of. And according to @rrousselGit "flutter_hooks only disposes of the hooks when the associated widget is disposed" so the hooks are disposing with it too!

iamsahilsonawane avatar Aug 01 '22 06:08 iamsahilsonawane