Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmStLf 67 of 125 menu
◀ ▶

Подъём состояния в 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 у родителя.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить