Метод shouldRebuild
Метод shouldRebuild класса SliverPersistentHeaderDelegate
сравнивает новый делегат с предыдущим.
Истина собирает шапку заново, ложь оставляет прежнюю.
Синтаксис
bool shouldRebuild(covariant MyHeader oldDelegate)
Параметры
| Параметр | Описание |
|---|---|
oldDelegate |
Предыдущий delegate того же типа. |
Пример
Давайте вызовем его в простом экране:
import 'package:flutter/material.dart';
class RebuildHeader extends SliverPersistentHeaderDelegate
{
RebuildHeader(this.version);
final int version;
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent)
{
return Center(child: Text('abcde $version'));
}
@override
double get maxExtent => 60;
@override
double get minExtent => 30;
@override
bool shouldRebuild(covariant RebuildHeader oldDelegate) => version != oldDelegate.version;
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverPersistentHeader(delegate: RebuildHeader(1)),
SliverList.list(children: [Text('12345')]),
],
),
),
),
);
}
На экране шапка показывает версию delegate.
Пример
Давайте повторим вызов с другими числами:
import 'package:flutter/material.dart';
class RebuildHeader2 extends SliverPersistentHeaderDelegate
{
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent)
{
return Center(child: Text('12345'));
}
@override
double get maxExtent => 50;
@override
double get minExtent => 25;
@override
bool shouldRebuild(covariant RebuildHeader2 oldDelegate) => false;
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverPersistentHeader(delegate: RebuildHeader2()),
SliverList.list(children: [Text('abcde')]),
],
),
),
),
);
}
На экране шапка не пересобирается без shouldRebuild true.
Смотрите также
-
метод
build,
который часто ставят рядом в прокручиваемых экранах -
виджет
SliverFillViewport,
который дополняет работу с прокруткой -
класс
SliverPersistentHeaderDelegate,
который помогает собрать сложный список -
виджет
SliverOpacity,
который задаёт поведение или данные прокрутки