Метод setState в Flutter
Поле в State
можно менять в обработчике кнопки, но
интерфейс обновится только если сообщить
об этом фреймворку. Для этого в State
вызывают setState и внутри колбэка
меняют данные, от которых зависит
build.
Метод setState помечает виджет
«грязным»
и планирует новый кадр. После этого снова
выполняется build, и Text
получает уже новое значение. Один
setState меняет сразу несколько
полей, а build будет один раз
на кадр. Из build его не вызывают:
получится бесконечная пересборка.
Менять поле удобно внутри
переданной функции: правка данных и
запрос нового кадра стоят рядом:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int value = 0;
void addOne() {
setState(() {
value = value + 1;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Value: $value'),
const SizedBox(height: 16),
ElevatedButton(
onPressed: addOne,
child: const Text('+1'),
),
],
),
),
);
}
}
Храните в State строку label
со значением 'Draft'. Кнопка
ElevatedButton в setState
меняет label на 'Done'.
На экране всегда виден актуальный Text.