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

Метод setState

Метод setState класса State принимает колбэк, где меняют поля State. После колбэка фреймворк вызовет build для этого элемента. Вызывать setState нужно только когда State ещё смонтирован.

Синтаксис

void setState(VoidCallback fn)

Параметры

Параметр Описание
fn Функция без аргументов, где обновляют поля State перед следующим build.

Пример

Давайте переключим текст кнопкой через setState:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: ToggleCaption(), ), ), ), ); } class ToggleCaption extends StatefulWidget { const ToggleCaption({super.key}); @override State<ToggleCaption> createState() => _ToggleCaptionState(); } class _ToggleCaptionState extends State<ToggleCaption> { var label = 'abcde'; @override Widget build(BuildContext context) { return ElevatedButton( onPressed: () => setState(() { label = label == 'abcde' ? '12345' : 'abcde'; }), child: Text(label), ); } }

На экране setState сменит подпись между 'abcde' и '12345'.

Пример

Давайте увеличим счётчик в setState:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: PlusOne(), ), ), ), ); } class PlusOne extends StatefulWidget { const PlusOne({super.key}); @override State<PlusOne> createState() => _PlusOneState(); } class _PlusOneState extends State<PlusOne> { int n = 0; @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ Text('$n'), ElevatedButton( onPressed: () => setState(() => n++), child: const Text('abcde'), ), ], ); } }

На экране число вырастет при каждом нажатии на 'abcde'.

Смотрите также

  • класс State,
    к которому относится setState
  • метод build,
    который вызывают после setState
  • виджет StatefulBuilder,
    который даёт setState без отдельного State класса
  • класс ChangeNotifier,
    который оповещает слушателей вместо setState
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить