Можно ли использовать вложенные вызовы функции setState ()? (функция, косвенно вызывающая себя) - PullRequest
0 голосов
/ 08 апреля 2020

У меня на самом деле есть 2 вопроса, но я подумал, что они достаточно похожи, чтобы задавать их вместе.

Вопрос 1:

Это нормально, если внутри Callback, заданного для setState (), setState () вызывается снова, или этого следует избегать?
Например:

setState(() {
  currentTable = valueSelectedByUser;
  displayTableContents(valueSelectedByUser);     //this function also calls setState()
});

Будет ли метод сборки StatefulWidget часто вызываться СЛИШКОМ таким образом?

Вопрос 2

В моем классе State
функция build() вызывает этот метод initializeTables(),
, который в свою очередь вызывает resetTables(),
, который вызывает updateDropdownButton(),
, который вызывает setState(),
, который снова вызывает метод build().

Я вставил if () в initializeTables(), чтобы предотвратить бесконечные рекурсивные вызовы функций,
Так ли это чисто, или вы, ребята, думаете, что есть гораздо лучший способ сделать это?

class _MainScreenState extends State<MainScreen> {
  List<String> tableNames;
  //...

  Widget build(BuildContext context) {
    initializeTables();
    return Scaffold(//...;
  }

  void initializeTables() {
    if (tableNames == null) {
      resetTables();
    }
  }

  void resetTables() {
    //...
    updateDropdownButton();
  }

  Future<void> updateDropdownButton() async {
    tempTableNames = //...

    //calls build()
    setState(() {
      tableNames = tempTableNames;
    });
  }
}
...