簡體   English   中英

Flutter:無狀態小部件中的可變字段

[英]Flutter: Mutable fields in stateless widgets

StatelessWidget被標記為immutable 不過,我使用的scoped model ,這意味着我避免StatefulWidget和使用model來改變stateStatelessWidget 這導致我在StatelessWidgetnon-final fields ,這不會導致errors ,因為它只是一個warning 但我想知道是否有更好的方法?

無狀態小部件應該只有 final 字段,沒有例外 原因:當父widget由於某種原因(屏幕旋轉、動畫、滾動...)重建時,會調用parent的build方法,導致所有widget都被重建。

擴展StatefulWidget類必須遵循相同的規則,因為它們也是重構的。 在布局樹中小部件的生命周期中,只有State可以包含可變字段。

沒有理由避免StatefulWidget 它是 Flutter 的基本構建塊。

事實上, ScopedModelDescendant也是一個有狀態的小部件。 scoped_model 的主要好處是您可以將業務邏輯與小部件層分開。 它並沒有消除對有狀態小部件的需求。

將有狀態小部件用於:

  • 將范圍模型注入樹(構建ScopedModel小部件的小部件)。 Model實例存儲在State
  • 存儲用戶輸入( TextEditingController ,復選框狀態)
  • 需要AnimationController的動畫小部件
  • 存儲以Controller結尾的任何內容( TabControllerScrollController ,...)

使“頁面”小部件(構建Scaffold小部件,可使用Navigator訪問)有狀態通常是一個好主意。 通常這些是作用域模型的宿主。

這是你的問題:

你認為有沒有更好的方法來完成我想要的,同時保持“短類結構”來幫助我保持監督並能夠從任何地方觸發這些類的重建?

你在這里要求的 ↑ 似乎是另一種應該比 scoped model 更好的應用程序狀態管理方法

如您所知,應用程序狀態管理方法是一組技術,可讓您作為開發人員:

  • 將數據與小部件綁定

反過來,將數據與小部件綁定可以幫助您作為開發人員:

  • 在每次更改綁定數據時自動重建小部件

也許,為此,您可以使用rxdart

在這里,您會找到一些非常有用的應用狀態管理方法列表,它們可以引導您獲得更好的應用開發方式:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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