Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

改变global state之后,“看不到”或者“被销毁”页面也会执行build #404

Open
CoolBerry opened this issue Jul 18, 2019 · 7 comments
Labels
help wanted Extra attention is needed

Comments

@CoolBerry
Copy link

CoolBerry commented Jul 18, 2019

官方的Example,发现在edit page执行change global state之后,主页面也执行了一次build。这个应该还可以理解。

但我发现,我把主页跳转到edit page的方法改成popAndPushName之后,也就是说在跳转之后,主页应该就不存在了,这时候change一下global state,主页仍然会执行一次build(view里面print会有打印,我理解就是build了一次)。

这个恐怕是一个bug。

V0.2.4
flutter:1.7.0 stable

@CoolBerry CoolBerry changed the title 改变global state之后,“看不到”或者 改变global state之后,“看不到”或者“被销毁”页面也会执行build Jul 18, 2019
@cornsauce
Copy link
Contributor

Flutter: beta-1.7
Fish-Redux: 0.2.4

然而,同樣的問題在我身上也發生了。
今天早上我更新flutter到1.7之後,我發現似乎dispatch執行後會無腦rebuild整棵樹。這個行爲跟我原來的邏輯完全不符,按理來説,Lifecycle.initState應該只在組件被創建時執行一次,我看源碼中實現Component似乎也是用了一個StatefulWidget。但是奇怪的事情發生了,我現在有一個需求,就是儅組件被初始化(initState)之後,從服務器獲取一些數據然後dispatch到reducer中去更新狀態,但是這個dispatch發出之後,狀態更新了是沒錯,但是整顆組件樹也被rebuild了。這樣一來,就陷入了rebuild() -> initState() -> rebuild() -> initState() -> rebuild() ... 這個循環中。我認爲我問題發生的起因跟issuer的起因應該是一樣的,所以我決定在這裏把我的issue寫下來,希望官方能夠快點解決這個問題。現在我用fish-redux 0.2.2 和 flutter 1.5,我上述的問題就不存在。也就是更新了之後才存在的,麻煩官方解決一下。

@zjuwjf zjuwjf added the bug Something isn't working label Jul 19, 2019
@zjuwjf
Copy link
Contributor

zjuwjf commented Jul 19, 2019

非常感谢反馈,会尽快跟进。

@cornsauce 能在Flutter: 1.7下,比较Fish-Redux: 0.2.4和Fish-Redux: 0.2.2 么

@zjuwjf
Copy link
Contributor

zjuwjf commented Jul 19, 2019

在0.2.4 版本,example中,验证并没有问题。
@cornsauce 能提供复现的demo么?

@CoolBerry
Copy link
Author

CoolBerry commented Jul 19, 2019

在0.2.4 版本,example中,验证并没有问题。
@cornsauce 能提供复现的demo么?

example里,todo_component/effect,将跳转到todo edit page的方法临时改成popAndPush,todo list page的view里面随便加一个print用来观测。
会发现在todo edit page做出的global state dispatch行为(修改theme)也会导致 todo list page的view里面print,但其实todo list page应该已经不存在了。

不知道是不是会导致@cornsauce同样的问题。

@zjuwjf
Copy link
Contributor

zjuwjf commented Jul 19, 2019

example里,todo_component/effect,将跳转到todo edit page的方法临时改成popAndPush,todo list page的view里面随便加一个print用来观测。

不确定是不是1.7的问题, home-widget 并没有随着pop,执行dispose。似乎是一个和fish-redux无关的问题。

能否使用非fish-redux的demo验证?

@CoolBerry
Copy link
Author

不确定是不是1.7的问题, home-widget 并没有随着pop,执行dispose。似乎是一个和fish-redux无关的问题。

能否使用非fish-redux的demo验证?

更新到了最新的flutter 1.7.8 stable,依然有这个问题。不知道是不是新版flutter把pop给重新定义过。。

@zjuwjf zjuwjf added help wanted Extra attention is needed and removed bug Something isn't working labels Jul 20, 2019
@saplf
Copy link

saplf commented Jul 29, 2019

我试着手动 pop & pushName 了一下,第一个 pop 返回的是 false,表示并没有 pop 成功,考虑到这是整个 stack 的第一个页面,这是不是和 flutter 处理这种极端情况的策略有关?

而且,单纯 pop 第一个页面之后整个 app 虽然黑屏,但通过 Flutter Inspector 可以查看到这个页面仍然存在,其他页面并没有这个问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants