Создание StatefulWidget
Часть раздела Добавляем интерактивность путешествия по Flutter на Coddy. Урок 12 из 34.
На этот раз ты сам пишешь StatefulWidget. На экране отображается I feel Sleepy, а нажатие кнопки Выпить кофе должно изменить текст на I feel Awake. В виде StatelessWidget он не сможет этого сделать.
Чтобы превратить StatelessWidget в StatefulWidget, выполни три шага:
- Замени
extends StatelessWidgetнаextends StatefulWidgetи замени егоbuildнаcreateState. - Напиши под ним класс
Stateи перенеси тудаbuildбез изменений. - Перенеси изменяемую переменную из
buildв начало классаState.
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _mood = 'Sleepy';
@override
Widget build(BuildContext context) {
...
}
}Шаг 3 важен. Переменная в начале build создаётся заново при каждом запуске build, поэтому после setState её значением снова станет 'Sleepy'. В начале класса State она создаётся один раз и сохраняет заданное ей значение.
Задание
СреднеПреврати HomePage в StatefulWidget с классом _HomePageState. Храни настроение в String _mood = 'Sleepy'; в начале состояния и сделай так, чтобы Drink coffee меняла его на 'Awake' с помощью setState.
Попробуйте сами
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
String mood = 'Sleepy';
return Scaffold(
appBar: AppBar(title: Text('Mood')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('I feel $mood', style: TextStyle(fontSize: 32)),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {},
child: Text('Drink coffee'),
),
],
),
),
);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Добавляем интерактивность
1Кнопки
Ваша первая кнопкаВывод в консольТекстовые и контурные кнопкиКнопки с иконкамиПлавающая кнопка действия7Переключатели и ползунки
Включаем и выключаем переключателемОтмечаем флажокВыбираем значение ползунком3Виджеты с состоянием
Свой класс виджетаПоказать SnackBarsetState перерисовывает экранСоздание StatefulWidgetСчётчик вверх и внизHot Reload сохраняет состояниеПотренируйтесь самостоятельно: Онлайн-компилятор Flutter