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

Виджет StatefulBuilder

Виджет StatefulBuilder создаёт анонимный State и передаёт в builder функцию setState. Удобен для мелких переключений без отдельного StatefulWidget.

Синтаксис

StatefulBuilder( builder: (context, setState) { return Text('abcde'); }, )

Параметры

Параметр Описание
builder Получает BuildContext и setState для локального State.

Пример

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

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

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

Пример

Давайте вынесем счётчик в переменную вне builder:

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

На экране setState из StatefulBuilder увеличит число по кнопке 'abcde'.

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

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