Подъём состояния в Flutter
Когда несколько потомков должны показывать
одно и то же число или один флаг, данные
не дублируют в каждом State.
Состояние «поднимают» к общему предку:
поле живёт в State родителя, а
потомок получает только текущее значение
через конструктор - как
обычные параметры виджета.
Потомок StatelessWidget
не хранит count сам: при каждом
setState у родителя заново вызывается
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 score = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ScoreLabel(value: score),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
setState(() {
score++;
});
},
child: const Text('Point'),
),
],
),
),
);
}
}
class ScoreLabel extends StatelessWidget {
const ScoreLabel({super.key, required this.value});
final int value;
@override
Widget build(BuildContext context) {
return Text('Score: $value', style: const TextStyle(fontSize: 32));
}
}
Вынесите отображение счёта в StatelessWidget
PointsView с полем points.
Родитель хранит points и передаёт
его в PointsView. Кнопка по-прежнему
увеличивает число через setState
у родителя.