パッケージ、リポジトリ、アプリカテゴリを検索

stretchy_header のカバー
パッケージ詳細v2.0.0

stretchy_header

このパッケージを使用すると、ウィジェットをスクロールする際に良い効果を得られるエラスティックヘッダーを作成できます。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
236
いいね数
98
Pub ポイント
140

パッケージをインストール

flutter pub add stretchy_header

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

stretchy_header パッケージは、Flutter アプリケーションで弾性または伸縮可能なヘッダーを作成できるようにし、ダイナミックな視覚効果によりスクロール操作を強化します。ユーザーが下にスクロールすると、ヘッダーが伸びてスムーズにアニメーションされ、魅力的かつ没入感のある体験を提供します。コンテンツレイアウトが豊富で、ヘッダーのビジュアルがユーザー参加度において重要な役割を果たすアプリに最適です。このパッケージは、Android、iOS、Web、macOS、Windows、Linux など複数のプラットフォームをサポートしており、デバイス間での動作の一貫性を確保しています。

用途

  • アニメーション付きアプリ起動画面の作成
  • ニュースやメディアアプリにおけるスクロール効果の向上
  • 没入型プロフィールまたはダッシュボードヘッダーのデザイン
  • ソーシャルメディアインターフェースにおけるユーザー参加の向上
  • 視覚的に魅力的なオンボーディング体験の構築

主な機能

  • スムーズな弾性ストレッチアニメーション
  • カスタムヘッダー内容のサポート
  • クロスプラットフォーム互換性
  • ListView や ScrollController との簡単な統合
  • 調整可能なストレッチ感度と持続時間

適している対象

  • インタラクティブUIを構築する開発者
  • ダイナミックなヘッダー効果を求めるデザイナー
  • コンテンツが豊富なスクロールインターフェースを持つアプリ
  • 洗練されたユーザー体験を目指すプロジェクト

注意事項

  • 低価格端末でのパフォーマンスに影響を与える可能性があります
  • ストレッチパラメータの正確な調整が必要です
  • 単純な静的ヘッダーには適していません
  • 基本的なアニメーションを超えるカスタマイズは限られている
  • 軽量なヘッダー内容と併用するのが最適です

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Stretchy Header

pub package

This package allows us to create an elastic header, to give a good effect when you scroll down the widget.

Sample 1

Sample 2

Getting started

You should ensure that you add the router as a dependency in your flutter project.

dependencies:
  stretchy_header: "^1.0.8"

You should then run flutter packages upgrade or update your packages in IntelliJ.

Example Project

There is an example project in the example folder. Check it out. Otherwise, keep reading to get up and running.

Usage

Sample 1
import 'package:flutter/material.dart';
import 'package:stretchy_header/stretchy_header.dart';

class SampleListView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StretchyHeader.listViewBuilder(
        headerData: HeaderData(
          headerHeight: 250,
          header: Image.asset(
            "images/chichen.jpg",
            fit: BoxFit.cover,
          ),
        ),
        itemCount: 15,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text("item $index"),
            onTap: () {
              final snackBar = SnackBar(
                content: Text('item $index tapped'),
              );
              ScaffoldMessenger.of(context).showSnackBar(snackBar);
            },
          );
        },
      ),
    );
  }
}
Sample 2
import 'package:flutter/material.dart';
import 'package:stretchy_header/stretchy_header.dart';

class SampleCustomHeader extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StretchyHeader.singleChild(
        headerData: HeaderData(
          headerHeight: 200,
          backgroundColor: Colors.black54,
          blurColor: Colors.yellow,
          header: UserAccountsDrawerHeader(
            accountName: Text("Diego"),
            accountEmail: Text("twitter @diegoveloper"),
            currentAccountPicture: CircleAvatar(
              backgroundColor: Colors.red,
              child: Text("DV"),
            ),
            margin: EdgeInsets.zero,
          ),
          overlay: Align(
            alignment: Alignment.bottomRight,
            child: Material(
              color: Colors.transparent,
              child: InkResponse(
                onTap: () {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text('onTap'),
                    ),
                  );
                },
                child: Padding(
                  padding: EdgeInsets.all(12),
                  child: Icon(
                    Icons.fullscreen,
                    color: Colors.white,
                  ),
                ),
              ),
            ),
          ),
        ),
        child: Padding(
          padding: const EdgeInsets.all(15),
          child: Text(
            "Hello World!",
            style: TextStyle(fontSize: 45, color: Colors.white),
          ),
        ),
      ),
    );
  }
}
Sample 3
class SampleBottomLabel extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StretchyHeader.singleChild(
        headerData: HeaderData(
          headerHeight: 250,
          header: Image.asset(
            "images/machu.jpg",
            fit: BoxFit.cover,
          ),
          highlightHeaderAlignment: HighlightHeaderAlignment.bottom,
          highlightHeader: Container(
            width: MediaQuery.of(context).size.width,
            decoration: BoxDecoration(
                gradient: LinearGradient(
                  colors: [
                    Colors.black54,
                    Colors.black54,
                    Colors.black26,
                    Colors.black12,
                    Colors.black12,
                  ],
                  begin: Alignment.bottomCenter,
                  end: Alignment.topCenter,
                )),
            child: Padding(
              padding: const EdgeInsets.all(15),
              child: Text(
                "Machu Picchu",
                style: TextStyle(color: Colors.white, fontSize: 22),
              ),
            ),
          ),
        ),
        child: Padding(
          padding: const EdgeInsets.all(15),
          child: Text(LONG_DESCRIPTION),
        ),
      ),
    );
  }
}
Sample 4
class SampleCenterWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StretchyHeader.singleChild(
        headerData: HeaderData(
          headerHeight: 250,
          header: Image.asset(
            "images/machu.jpg",
            fit: BoxFit.cover,
          ),
          highlightHeaderAlignment: HighlightHeaderAlignment.center,
          highlightHeader: SizedBox(
            width: MediaQuery.of(context).size.width,
            child: GestureDetector(
              onTap: () {
                print("tap highlightHeader");
              },
              child: CircleAvatar(
                backgroundColor: Colors.red,
                child: Text("M"),
              ),
            ),
          ),
        ),
        child: Padding(
          padding: const EdgeInsets.all(15),
          child: Text(LONG_DESCRIPTION),
        ),
      ),
    );
  }
}

You can follow me on twitter @diegoveloper

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト