Метод initState
Метод initState класса State запускается сразу после createState. Здесь задают начальные поля и подписываются на потоки. В конце вызывают super.initState(). Контекст ещё нельзя использовать для InheritedWidget.
Синтаксис
@override
void initState()
Пример
Давайте прочитаем параметр виджета в initState:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: TitleLabel(title: 'abcde'),
),
),
),
);
}
class TitleLabel extends StatefulWidget
{
const TitleLabel({super.key, required this.title});
final String title;
@override
State<TitleLabel> createState() => _TitleLabelState();
}
class _TitleLabelState extends State<TitleLabel>
{
late String label;
@override
void initState()
{
super.initState();
label = widget.title;
}
@override
Widget build(BuildContext context)
{
return Text(label);
}
}
На экране initState сохранит 'abcde' из виджета в поле State.
Пример
Давайте создадим контроллер в initState:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: PrefilledField(),
),
),
),
);
}
class PrefilledField extends StatefulWidget
{
const PrefilledField({super.key});
@override
State<PrefilledField> createState() => _PrefilledFieldState();
}
class _PrefilledFieldState extends State<PrefilledField>
{
late final TextEditingController controller;
@override
void initState()
{
super.initState();
controller = TextEditingController(text: '12345');
}
@override
void dispose()
{
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return TextField(controller: controller);
}
}
На экране поле сразу покажет '12345' после initState.
Смотрите также
-
класс
State,
к которому относитсяinitState -
метод
dispose,
который освобождает ресурсы послеinitState -
метод
didChangeDependencies,
который идёт сразу после первогоinitState -
метод
createState,
который создаётStateпередinitState