Класс SliverPersistentHeaderDelegate
Класс SliverPersistentHeaderDelegate реализуют для SliverPersistentHeader. Метод build рисует шапку, shouldRebuild решает, обновлять ли sliver.
Синтаксис
class MyHeader extends SliverPersistentHeaderDelegate { ... }
Методы
| Метод | Описание |
|---|---|
build |
Получает shrinkOffset и overlapsContent. Давайте разберём вызов на примерах. |
shouldRebuild |
Сравнивает новый delegate со старым. Давайте разберём вызов на примерах. |
Пример
Давайте выведем шапку с двумя высотами:
import 'package:flutter/material.dart';
class DemoHeader extends SliverPersistentHeaderDelegate
{
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent)
{
return SizedBox.expand(child: Center(child: Text('abcde')));
}
@override
double get maxExtent => 100;
@override
double get minExtent => 50;
@override
bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) => false;
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverPersistentHeader(delegate: DemoHeader(), pinned: true),
SliverList.list(children: [Text('12345')]),
],
),
),
),
);
}
На экране шапка плавно меняет высоту между min и max.
Пример
Давайте пересоберём delegate при смене данных:
import 'package:flutter/material.dart';
class LabelHeader extends SliverPersistentHeaderDelegate
{
LabelHeader(this.label);
final String label;
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent)
{
return Center(child: Text(label));
}
@override
double get maxExtent => 70;
@override
double get minExtent => 40;
@override
bool shouldRebuild(covariant LabelHeader oldDelegate) => label != oldDelegate.label;
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: CustomScrollView(
slivers: [
SliverPersistentHeader(delegate: LabelHeader('abcde')),
SliverList.list(children: [Text('12345')]),
],
),
),
),
);
}
На экране в шапке видна подпись abcde.
Смотрите также
-
виджет
SliverPersistentHeader,
который часто ставят рядом в прокручиваемых экранах -
метод
build,
который дополняет работу с прокруткой -
виджет
SliverFillRemaining,
который помогает собрать сложный список -
метод
shouldRebuild,
который задаёт поведение или данные прокрутки