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

flutter_skeleton_ui のカバー
パッケージ詳細v0.0.6

flutter_skeleton_ui

読み込み中にページのレイアウトを模倣するカスタムスケルトンウィジェットを作成するためのFlutterパッケージ。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
1.2万
いいね数
43
Pub ポイント
150

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

flutter pub add flutter_skeleton_ui

パッケージ概要

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

flutter_skeleton_ui は、ロード状態中のUI要素用にカスタマイズ可能なスケルトンプレースホルダーを作成できるFlutterパッケージです。実際のコンテンツのレイアウトを模倣し、データが完全に読み込まれる前にページの構造を表示することで、スムーズなユーザー体験を提供します。カード、リスト、テキストプレースホルダーなど、さまざまなウィジェットをサポートしており、アニメーションやスタイル設定のオプションも備えています。アプリの認識されるパフォーマンス向上と視覚的なジャンクの低減に最適です。

用途

  • ロード画面のプレースホルダー
  • データ取得中のレイアウトシフトを防ぐ
  • ネットワーク遅延中のUXの向上
  • プロトタイプにおけるコンテンツ構造のシミュレーション
  • アプリの応答性の認識を向上させる
  • スクリーン間で一貫した読み込み状態を作成する

主な機能

  • カスタマイズ可能なスケルトン形状
  • 組み込みのアニメーションシャイマー効果
  • リストおよびグリッドレイアウトのサポート
  • 既存のウィジェットとの簡単な統合
  • カスタマイズ可能な色とサイズ
  • レスポンシブデザインの互換性

適している対象

  • より良い読み込みUXを求める開発者
  • 頻繁にデータを取得するアプリ
  • インタラクティブUIのプロトタイピング
  • 視覚的な仕上がりを重視するチーム
  • フロントエンド中心のFlutterプロジェクト
  • 一貫したプレースホルダーデザインを必要とするプロジェクト

注意事項

  • 初期のバンドルサイズをわずかに増加させる可能性があります
  • 複雑なレイアウトには手動設定が必要です
  • アニメーションのパフォーマンスはデバイスに依存します
  • 静的コンテンツには適していません
  • 基本的なスタイリングを超えるカスタマイズは限られている
  • 適切な読み込み状態管理と併用すると最適です

元の README

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

Flutter Skeletons

Clone of skeletons

A Flutter package for building custom skeleton widgets to mimic the page's layout while loading.

Installation

flutter pub add flutter_skeleton_ui

Examples

Items ListView (Default)
items paragraphs listview_default
ListView (Custom) ListView (Complex Cards) SkeletonTheme
listview_custom listview_cards skeleton_theme
Light/Dark modes Right-To-Left Custom Shimmer
light_dark_modes rtl custom_shimmer

All examples can be found here examples.

How To Use

Can be used by encapsulating the child widget in a Skeleton widget:

import 'package:flutter_skeleton_ui/flutter_skeleton_ui.dart';

Skeleton(
        isLoading: _isLoading,
        skeleton: SkeletonListView(),
        child: Container(child: Center(child: Text("Content"))),
      )

or directly:

Container(
    child: _isLoading
    ? SkeletonListView()
    : Container(child: Center(
                       child: Text("Content"))),
)

a SkeletonTheme can be used to set the default configs for all skeleton descendants in the tree.

SkeletonTheme(
    // themeMode: ThemeMode.light,
    shimmerGradient: LinearGradient(
        colors: [
          Color(0xFFD8E3E7),
          Color(0xFFC8D5DA),
          Color(0xFFD8E3E7),
        ],
        stops: [
          0.1,
          0.5,
          0.9,
        ],
      ),
      darkShimmerGradient: LinearGradient(
        colors: [
          Color(0xFF222222),
          Color(0xFF242424),
          Color(0xFF2B2B2B),
          Color(0xFF242424),
          Color(0xFF222222),
        ],
        stops: [
          0.0,
          0.2,
          0.5,
          0.8,
          1,
        ],
        begin: Alignment(-2.4, -0.2),
        end: Alignment(2.4, 0.2),
        tileMode: TileMode.clamp,
      ),
        child: MateriaApp(
            ...
        ),
      ),

More Customization:

ListView (Complex Cards)
listview_cards

for more complex shapes you can build your skeleton inside a SkeletonItem widget:

ListView.builder(
  physics: NeverScrollableScrollPhysics(),
  itemCount: 5,
  itemBuilder: (context, index) => Padding(
    padding: const EdgeInsets.all(8.0),
    child: Container(
      padding: const EdgeInsets.all(8.0),
      decoration: BoxDecoration(color: Colors.white),
      child: SkeletonItem(
          child: Column(
        children: [
          Row(
            children: [
              SkeletonAvatar(
                style: SkeletonAvatarStyle(
                    shape: BoxShape.circle, width: 50, height: 50),
              ),
              SizedBox(width: 8),
              Expanded(
                child: SkeletonParagraph(
                  style: SkeletonParagraphStyle(
                      lines: 3,
                      spacing: 6,
                      lineStyle: SkeletonLineStyle(
                        randomLength: true,
                        height: 10,
                        borderRadius: BorderRadius.circular(8),
                        minLength: MediaQuery.of(context).size.width / 6,
                        maxLength: MediaQuery.of(context).size.width / 3,
                      )),
                ),
              )
            ],
          ),
          SizedBox(height: 12),
          SkeletonParagraph(
            style: SkeletonParagraphStyle(
                lines: 3,
                spacing: 6,
                lineStyle: SkeletonLineStyle(
                  randomLength: true,
                  height: 10,
                  borderRadius: BorderRadius.circular(8),
                  minLength: MediaQuery.of(context).size.width / 2,
                )),
          ),
          SizedBox(height: 12),
          SkeletonAvatar(
            style: SkeletonAvatarStyle(
              width: double.infinity,
              minHeight: MediaQuery.of(context).size.height / 8,
              maxHeight: MediaQuery.of(context).size.height / 3,
            ),
          ),
          SizedBox(height: 8),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Row(
                children: [
                  SkeletonAvatar(
                      style: SkeletonAvatarStyle(width: 20, height: 20)),
                  SizedBox(width: 8),
                  SkeletonAvatar(
                      style: SkeletonAvatarStyle(width: 20, height: 20)),
                  SizedBox(width: 8),
                  SkeletonAvatar(
                      style: SkeletonAvatarStyle(width: 20, height: 20)),
                ],
              ),
              SkeletonLine(
                style: SkeletonLineStyle(
                    height: 16,
                    width: 64,
                    borderRadius: BorderRadius.circular(8)),
              )
            ],
          )
        ],
      )),
    ),
  ),
);

Issues and feedback

For issues, please report here. Contributions are welcome.

カテゴリー

ソースリポジトリ

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

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