sliver_header_delegate

This package provides a flexible sliver header delegate that allows easily customize your SliverHeader

Getting Started

In the pubspec.yaml of your flutter project, add the following dependency:

dependencies:
    ...
    sliver_header_delegate: ^0.0.1

Import in your project:

import 'package:sliver_header_delegate/sliver_header_delegate.dart';

Inside your CustomScrollView declare SliverPersistentHeader and set FlexibleHeaderDelegate as it's delegate

CustomScrollView(
      slivers: [
        SliverPersistentHeader(
          delegate: FlexibleHeaderDelegate(),
        ),
      ],
    );

If you want your widget to fill the status bar, specify statusBarHeight parameter:

delegate: FlexibleHeaderDelegate(
            statusBarHeight: MediaQuery.of(context).padding.top,
          ),

Examples

Complete example

SliverPersistentHeader(
  pinned: true,
  delegate: FlexibleHeaderDelegate(
    statusBarHeight: MediaQuery.of(context).padding.top,
    expandedHeight: 240,
    background: MutableBackground(
      expandedWidget: Image.asset(
        'assets/images/mountains.jpg',
        fit: BoxFit.cover,
      ),
      collapsedColor: primaryColor,
    ),
    actions: [
      IconButton(
        icon: const Icon(Icons.search),
        onPressed: () {},
      ),
      IconButton(
        icon: const Icon(Icons.more_vert),
        onPressed: () {},
      ),
    ],
    children: [
      FlexibleTextItem(
        text: 'Mountains',
        collapsedStyle: collapsedStyle,
        expandedStyle: expandedStyle,
        expandedAlignment: Alignment.bottomLeft,
        collapsedAlignment: Alignment.center,
        expandedPadding: padding,
      ),
    ],
  ),
)

Mutable background

 SliverPersistentHeader(
            pinned: true,
            delegate: FlexibleHeaderDelegate(
              expandedHeight: 240,
              background: MutableBackground(
                expandedWidget: Image.network(_imageUrl, fit: BoxFit.cover),
                collapsedColor: _headerColor,
              ),
            ),
          ),

Gradient background

  SliverPersistentHeader(
            pinned: true,
            delegate: FlexibleHeaderDelegate(
              background: GradientBackground(
                gradient: LinearGradient(
                  begin: Alignment.topLeft,
                  end: Alignment.bottomRight,
                  colors: [
                    _startColor,
                    _endColor,
                  ],
                ),
              ),
            ),
          ),

Modified title

    SliverPersistentHeader(
              pinned: true,
              delegate: FlexibleHeaderDelegate(
                backgroundColor: Colors.white,
                children: [
                  FlexibleTextItem(
                    text: 'Modified title',
                    expandedStyle: _expandedTextStyle,
                    collapsedStyle: _collapsedTextStyle,
                    expandedAlignment: Alignment.bottomLeft,
                    collapsedAlignment: Alignment.center,
                    expandedPadding: _expandedPadding,
                  ),
                ],
              ),
            ),

Libraries

sliver_flutter