[英]how to call method in a stful widget inside a another stful widget flutter
[英]How could i solve that kind of stful setState in flutter
我完全無法以書面形式解釋這個問題,所以我正在嘗試逐步解決
我有Stfl widget page
我將以下內容放入它的initState methood
中
@override
void initState(){
Future.delayed(const Duration(seconds: 10), () {
setState(() {});
print('ok i rebuilt the state successfully');
});
super.initState();
}
現在,如果我在之前的方法中注冊的Duration(seconds: 10)
之前更改了UI
中的任何內容,它將按預期成功更新 ui。
現在,出於好奇,我想知道如果我退出頁面,之前的方法是否仍然掛起並在 10 秒后執行,我做了以下操作
1-我登錄頁面在initstate中注冊initstate
2- 我在 10 秒用完之前退出了頁面
3- 好的,現在我在不同的頁面等待print('ok i rebuilt the state successfully');
打印
4- 嗯..它按預期成功打印
現在我重復相同的步驟並進行一些更改,例如以下
1-我登錄頁面在initstate中注冊initstate
2- 我在 10 秒用完之前退出了頁面
3- ii 在 10 秒完成之前再次登錄頁面
好的,現在它應該打印兩次。第一次注冊 function 一次,第二次注冊一次,是的,它按預期打印兩次,但我注意到,如果我在 10 秒之前對 ui 進行更改,那么 UI 將永遠不會更新它self by 第一個注冊的 function(雖然我在console看到這個過程是成功的)。 但它會在第二個注冊的 function 時自行更新。
現在我的問題是為什么它不通過首次注冊的 function 進行更新。我如何才能通過舊的掛起setState
方法使其更新 ui。
事實上,它發生在setState
或提供者身上。
我需要這種行為有很多原因
當您導航到該頁面時,每次都會創建一個新的 Widget 實例。 所以setState
是針對相應的小部件運行的。
假設您在同一個屏幕上有 2 個,您不希望一個更新另一個的 state。同樣的事情發生在這里。
另外,我不知道你是否正在做future.delayed
來測試這個。 如果你在你的應用程序中這樣做,我建議你在設置 state 之前檢查mounted
屬性,這樣你就可以防止在處置的 Widget 上設置 state ,這可能會導致問題和異常。
就像是
Future.delayed(const Duration(seconds: 10), () {
if (!mounted) return;
setState(() {});
print('ok i rebuilt the state successfully');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.