簡體   English   中英

我怎么能解決 flutter 中的那種 stful setState

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM