簡體   English   中英

初始化 Flutter Stateful Widget:為什么不鼓勵將初始值傳遞給“State”構造函數?

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

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