У меня на самом деле есть 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;
});
}
}