Класс Key
Класс Key абстрактный: напрямую его не создают,
а берут подклассы вроде
ValueKey
или GlobalKey.
Ключ передают в параметр key у StatefulWidget
и StatelessWidget.
Flutter сравнивает ключи, чтобы понять,
сохранить ли State или заменить виджет.
Синтаксис
ValueKey('id')
Пример
Давайте зададим ValueKey у двух Text в списке:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Column(
children: [
Text(
'abcde',
key: ValueKey('a'),
),
Text(
'12345',
key: ValueKey('b'),
),
],
),
),
),
);
}
На экране две строки 'abcde' и '12345'
сохранят свои ключи при перестановке в Column.
Пример
Давайте сменим ключ и увидим новый State:
import 'package:flutter/material.dart';
class Counter extends StatefulWidget
{
const Counter({super.key});
@override
State<Counter> createState() => _CounterState();
}
class _CounterState extends State<Counter>
{
int count = 0;
@override
Widget build(BuildContext context)
{
return Text('$count');
}
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Counter(
key: ValueKey('abcde'),
),
),
),
),
);
}
На экране Counter с ключом ValueKey
получит своё State; смена ключа сбросит счётчик.
Смотрите также
-
класс
ValueKey,
который сравнивает ключи по значению -
класс
GlobalKey,
который даёт доступ кStateизвне -
класс
UniqueKey,
который каждый раз уникален -
класс
PageStorageKey,
который запоминает прокрутку страницы