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

Метод 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.

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