Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
427 of 1024 menu
◀ ▶

Класс 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,
    который задаёт поведение или данные прокрутки
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить