1

StatelessWidget使用しScopedModelてデータを保存する があります。ウィジェットは基本的に、チェックボックスのリストと、チェックボックスの状態を保存するためのいくつかのボタンを表示します。

ここで、ユーザーがチェックボックスを変更したかどうか、つまり、ウィジェットが表示されてからチェック/チェックを外したかどうかを追跡したいと考えています。だから私はこのようなものを追加しました:

class MyCheckboxScreen extends StatelessWidget{

    bool _hasBeenModified = false;

    void _itemCheckedChange(bool checked, MyModel model){
        _hasBeenModified = true;

        // Code to change the model here
    }


    void _onCloseButton(){
        if( _hasBeenModified ){
            // Show a warning that there are modifications that will not be be saved
        }
    }


    void _onSaveButton(Context context, MyModel model){
        model.save();
        Navigator.of(context).pop();
    }

}

これは機能しているようですが、 my StatelessWidgetnow には独自の状態が含まれています。

状態は、UI の更新や再描画には使用されません。「閉じる」ボタンを押したときにチェックボックスに変更があるかどうかを確認するためにのみ使用されます。

StatelessWidgetがこの種の内部状態を持つことは安全ですか? それとも問題になる可能性がありますか?たとえば、ウィジェットが予期せず再作成され、内部状態が失われる可能性はありますか?

ドキュメントがこれについて非常に明確であるとは思いません。

たとえば、内部クロック駆動の状態を持っているため、または一部のシステム状態に応じて、動的に変更できるコンポジションの場合は、StatefulWidget の使用を検討してください。

しかし、これは UI に影響を与え、ウィジェットの再構築が必要な状態にのみ適用されるように思えます。

4

2 に答える 2

1

ステートフル ウィジェットを使用しない理由はありますか? ステートレス ウィジェットは、そのように使用することを意図したものではありません..何の利点もなく、なぜ物事を過度に複雑にするのか理解できません..

于 2020-07-06T07:46:09.297 に答える