簡體   English   中英

避免在Flutter中保存對StatefulWidget的State的引用時出現no_logic_in_create_state警告

[英]Avoid no_logic_in_create_state warning when saving reference to State of StatefulWidget in Flutter

使用 Flutter,我在應用程序中顯示元素列表。

我有一個StatefulWidget ( ObjectList ),它在其State ( ObjectListState ) 中包含一個項目列表。

state 有一個方法 ( _populateList ) 來更新項目列表。

我希望在小部件上調用方法 ( updateList ) 時更新列表。

為此,我在小部件中保存了對 state 的引用 ( _state )。 該值在createState中設置。 然后可以從小部件本身調用 state 上的方法。


class ObjectList extends StatefulWidget {
  const ObjectList({super.key});

  static late ObjectListState _state;

  @override
  State<ObjectList> createState() {
    _state = ObjectListState();
    return _state;
  }

  void updateList() {
    _state._populateList();
  }
}


class ObjectListState extends State<ObjectList> {
  List<Object>? objects;

  void _populateList() {
    setState(() {
      // objects = API().getObjects();
    });
  }

  // ... return ListView in build
}

問題是這會引發no_logic_in_create_state警告。 由於我沒有“ 將數據傳遞給 State 對象”,我認為這很好,但我仍然想避免警告。

有沒有辦法做到這些?

  1. 在不違反no_logic_in_create_state的情況下保存對 state 的引用。
  2. 從小部件訪問 state,而不保存引用。
  3. 從外部調用 state 的方法而不通過小部件。

updateList()方法放在小部件中是沒有意義的。 無論如何你都不能調用它。 小部件是小部件樹的一部分,您不存儲或使用對它們的引用(與其他框架不同,例如 Qt)。

要更新小部件中的信息,請使用StreamBuilder小部件並在構建 function 中創建要更新的小部件,將更新后的列表作為參數傳遞給小部件。

然后,將列表存儲在小部件中。 可能這可以作為無狀態小部件實現。

暫無
暫無

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

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