[英]Initializing Flutter Stateful Widget: Why is it discouraged to pass initial values to `State` constructor?
目前,當我希望有狀態小部件的初始值是可配置的時,我遵循的模式看起來像
class MyWidget extends StatefulWidget {
final String? initialValue;
MyWidget({ this.initialValue });
@override State createState() => MyWidgetState();
}
class MyWidgetState extends State<MyWidget> {
String statefulValue = "default initial value";
@override
void initState() {
super.initState();
if (widget.initialValue != null) { statefulValue = widget.initialValue; }
}
// ...
}
這可行,但對我來說似乎有點重量級,以實現我必須認為是一個非常常見的用例。 首先, initialValue
必須是一個字段對我來說沒有意義,因為它的用途只是初始化 state,然后就不再需要了。 其次,如果 state class 可以有一個有狀態小部件可以調用的構造函數,我認為它會避免一些樣板,所以上面看起來像:
class MyWidget extends StatefulWidget {
final String? initialValue;
MyWidget({ this.initialValue });
@override State createState() => MyWidgetState(initialValue: initialValue);
}
class MyWidgetState extends State<MyWidget> {
String statefulValue;
MyWidgetState({ String? initialValue }) : statefulValue = initialValue ?? "default initial value";
// ...
}
這並不能完全解決第一個問題,但我認為閱讀起來更容易。 然而,這會觸發"Don't put any logic in createState"
linter 錯誤。 所以我的問題是
a) 是否有一種模式可以使初始值的保留時間不必超過必要的時間?
b) 為什么將參數傳遞給State
構造函數不受歡迎?
您可以在構造函數上提供默認值
class MyWidget extends StatefulWidget {
final String initialValue;
const MyWidget({this.initialValue = "default initial value"});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late String statefulValue = widget.initialValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.