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

パッケージ詳細v3.1.0

nested_scroll_view_plus

ネストされたスクロールビューと親スクロールビューの両方に対してオーバースクロールサポートを提供する拡張されたNestedScrollViewで、スムーズなスクロール体験を実現します。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
7890
いいね数
49
Pub ポイント
150

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

flutter pub add nested_scroll_view_plus

パッケージ概要

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

FlutterのNestedScrollViewの拡張バージョンで、ネストされたスクロールビューと親スクロールビューの両方に対してオーバースクロールをサポートし、すべてのプラットフォームで滑らかで一貫したスクロール体験を保証します。デフォルトの動作を改善し、両レイヤーで自然なオーバースクロール効果を可能にすることで、アプリバーとその下のスクロール可能なコンテンツを持つような複雑なスクロールレイアウトに最適です。このパッケージは継続的にメンテナンスされており、Android、iOS、Web、macOS、Windows、Linuxと互換性があります。

用途

  • 複雑なアプリバーのレイアウト
  • オーバースクロール付きのネストされたスクロール可能なコンテンツ
  • パララックス効果付きのスクロール
  • レイヤードスクロールを備えたレスポンシブUI
  • ハイブリッドスクロール可能なインターフェース

主な機能

  • ネストされたおよび親スクロールビューのオーバースクロールサポート
  • スムーズなスクロール体験
  • クロスプラットフォーム互換性
  • 改善されたスクロール物理学
  • カスタムスクロール動作のサポート
  • 積極的なメンテナンスと更新

適している対象

  • 高度なスクロール可能なUIを構築する開発者
  • 視覚フィードバック付きのレイヤードスクロールを必要とするアプリ
  • 一貫したオーバースクロール動作を必要とするプロジェクト
  • 複数のプラットフォームをターゲットにするチーム
  • ダイナミックスクロール効果を実装するUIデザイナー

注意事項

  • シンプルなスクロールレイアウトの複雑さを増す可能性があります
  • スクロールコントローラーの慎重な取り扱いが必要です
  • 深くネストされたスクロールによるパフォーマンスへの潜在的な影響
  • 基本的なスクロール可能なウィジェットには不要
  • 標準の NestedScrollView とは異なり、高度なユースケースに最適

元の README

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

NestedScrollViewPlus

pub package monthly downloads Stars

An enhanced NestedScrollView offering overscroll support for both the nested and parent scroll views, ensuring a seamless scrolling experience.

🔥 Preview

Try it online: https://flutter-nested-scroll-view-plus.vercel.app

⚡️ Get Started

Install NestedScrollViewPlus by running the following command:

flutter pub add nested_scroll_view_plus

Here’s a basic example:

import 'package:nested_scroll_view_plus/nested_scroll_view_plus.dart';

// Step 1: Replace `NestedScrollView` with `NestedScrollViewPlus`
NestedScrollViewPlus(
  headerSliverBuilder: (context, innerScrolled) => <Widget>[
    // ... insert your header sliver widgets here
  ],
  body: CustomScrollView(
    // Step 2: [🚨IMPORTANT] Set the physics of `CustomScrollView` to `AlwaysScrollableScrollPhysics`
    physics: const BouncingScrollPhysics(
      parent: AlwaysScrollableScrollPhysics(),
    ),
    slivers: <Widget>[
      // ... insert your body sliver widgets here
    ],
  ),
);

For additional examples, please visit the scroll_master repository. It includes features such as pull-to-refresh for NestedScrollView, combined scrolling for scrollview and tabview, and more.

🚗 Examples

1. Loading Indicator
NestedScrollViewPlus(
  overscrollBehavior: OverscrollBehavior.outer,
  headerSliverBuilder: (context, innerScrolled) => <Widget>[
    // Place the refresh indicator at the top of the header slivers
    CupertinoSliverRefreshControl(
      onRefresh: () async {
        // fetching data
      },
    ),
    // Add your custom AppBar or other header sliver widgets here.
  ],
  // ...
)
2. Accessing the Inner or Outer Scroll Controller

To access the inner or outer scroll controller of a NestedScrollViewPlus, you can use a GlobalKey<NestedScrollViewStatePlus> to get its state.

👉 Example
class _ExampleState extends State<Example> {
  // 1. Create a GlobalKey
  final GlobalKey<NestedScrollViewStatePlus> myKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return NestedScrollViewPlus(
      // 2. Set the key to NestedScrollViewStatePlus
      key: myKey,
      // ...,
    );
  }

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      // 3. Access the inner or outer scroll controller using GlobalKey<NestedScrollViewStatePlus>
      myKey.currentState!.innerController.addListener(_handleInnerScroll);
      myKey.currentState!.outerController.addListener(_handleOuterScroll);
    });
  }

  void _handleInnerScroll() {
    final innerController = myKey.currentState!.innerController;
    if (innerController.positions.length == 1) {
      print('Scrolling inner nested scrollview: ${innerController.offset}');
    }
  }

  void _handleOuterScroll() {
    final outerController = myKey.currentState!.outerController;
    if (outerController.positions.length == 1) {
      print('Scrolling outer nested scrollview: ${outerController.offset}');
    }
  }
}
3. Preserve Scroll Positions of Inner CustomScrollViews

To preserve the scroll positions of inner CustomScrollViews, you can add a PageStorageKey to the CustomScrollView widget. Here's an example:

CustomScrollView(
  key: PageStorageKey<String>('your-unique-key'),
  slivers: <Widget>[
    // ...,
  ],
),

By assigning a unique key to the CustomScrollView, Flutter's PageStorage mechanism will store and restore the scroll position of the inner CustomScrollViews, allowing you to maintain the scroll positions even when the widget tree is rebuilt.

⭕️ For Older Flutter Versions

If you are using an older version of Flutter, please follow these steps to install the appropriate branch from the old git repository.

dependencies:
  custom_nested_scroll_view:
    git:
      url: https://github.com/idootop/custom_nested_scroll_view.git
      # Choose the branch based on your local Flutter version
      ref: flutter-3.7

The different branches support the following Flutter versions:

Git branch Supported flutter versions
flutter-3.7 >=3.7.0-13.0.pre
flutter-3.4 >=3.4.0-27.0.pre <3.7.0-13.0.pre
flutter-3.4-pre >=3.4.0-17.0.pre <3.4.0-27.0.pre
flutter-3.0 >=2.12.0-4.0.pre <3.4.0-17.0.pre
flutter-2.x <2.12.0-4.0.pre

For more details, please visit the old documentation for CustomNestedScrollView.

❤️ Acknowledgements

⚖️ License

MIT License © 2024-PRESENT Del Wang

カテゴリー

ソースリポジトリ

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

データはまだありません。