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

swipeable_tile のカバー
パッケージ詳細v2.0.1

swipeable_tile

アニメーション付きの背景で閉じるためのパッケージ。閉じずにスワイプしてアクションをトリガーできます。

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

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

flutter pub add swipeable_tile

パッケージ概要

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

SwipeableTile は、カスタマイズ可能な背景効果を持つタイルのアニメーション解除を可能にする Flutter パッケージです。スワイプして削除するジェスチャーだけでなく、タイルを削除せずにアクションをトリガーするスワイプもサポートしています。視覚フィードバック付きのインタラクティブなリストアイテムを実装するのに最適で、Android、iOS、Web、macOS、Windows、Linux などの主要プラットフォームで動作します。このパッケージは、リストベースのインターフェース向けにスムーズなアニメーションと柔軟なジェスチャーハンドリングを提供し、ユーザー体験を向上させます。

用途

  • リストでのスワイプして消去機能の実装
  • アクショントリガーを使用したインタラクティブなリスト項目の作成
  • タスク管理アプリの直感的なUIを構築する
  • リスト項目のインタラクションにアニメーションフィードバックを追加する
  • レスポンシブなカードベースのレイアウトの設計
  • スワイプジェスチャーによるユーザー参加の向上

主な機能

  • スワイプ中のアニメーション背景
  • 非表示およびアクショントリガーのスワイプに対応
  • クロスプラットフォーム互換性
  • カスタマイズ可能なスワイプしきい値
  • スムーズなアニメーション遷移
  • スワイプ動作の柔軟な設定

適している対象

  • インタラクティブなリストインターフェースを構築する開発者
  • スワイプベースのインタラクションを必要とするアプリ
  • ジェスチャー駆動型の体験に焦点を当てるUIデザイナー
  • 複数のプラットフォームをターゲットにするプロジェクト
  • 軽量なジェスチャー解決策を望むチーム
  • 豊富なタッチフィードバックを備えたモバイルファーストアプリケーション

注意事項

  • 複雑な背景には追加のスタイリングが必要になる場合があります
  • 大規模なリストによるパフォーマンスへの影響
  • アニメーションカーブの組み込みカスタマイズが限定的
  • 非常に高頻度のスワイプイベントには最適化されていません
  • スワイプ操作中に状態を慎重に扱う必要があります
  • 中程度のリストに最適で、応答性を維持するため

元の README

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

Loading Animation Widget

YouTube Badge Twitter Badge Patreon Badge BMC Badge pub package WateryDesert


Features

Animated tile and backgound while swiping. Add padding to tile. Swipe to trigger action.

The package is fork of Dismissible. Without any vertical, up and down swipe.

Problems with dismissible
  1. Dismissible doesn't allow animated rounded corner and elevation similar to google Gmail, Telegram, Messages (these are android apps) if you swipe you will notice. Here is the result with Dismissible.

  1. Dismissible can't make rounded Card there is always some UI issue. Here is the result with Dismissible.

  1. It's not possible to animated the background while swiping.

  2. Swipe to trigger action function. Similar to telegram or instagram DM message reply.

How to use?

Installation

Add swipeable_tile to your pubspec.yaml dependencies then run flutter pub get

dependencies:
  swipeable_tile:
Import

Add this line to import the package.

import 'package:swipeable_tile/swipeable_tile.dart';
Do and don't
  • Don't call setState() from backgroundBuilder.
  • Set the Scaffold's (or whatever background widget you are using) backgroundColor and SwipeableTile or SwipeableTile.swipeToTrigger's color same.
There are four named constructors:
  1. SwipeableTile When the tile is swiped there will be an elevation (remove elevation by setting isElevated to false) and rounded corner to the tile (set borderRadius to 0 if you don't want rounded corner).
SwipeableTile(
  color: Colors.white,
  swipeThreshold: 0.2,
  direction: SwipeDirection.horizontal,
  onSwiped: (direction) {// Here call setState to update state
  },
  backgroundBuilder: (context, direction, progress) {
    if (direction == SwipeDirection.endToStart) {
      // return your widget
    } else if (direction == SwipeDirection.startToEnd) {
      // return your widget
    }
    return Container();
  },
  key: UniqueKey(),
  child: // Here Tile which will be shown at the top
),

  1. SwipeableTile.card This will make the tile look like card with constant rounded corner, unlike SwipeableTile. You also have to set the padding which will wrap around the tile as well background.
SwipeableTile.card(
  color: Color(0xFFab9ee8),
  shadow: BoxShadow(
    color: Colors.black.withOpacity(0.35),
    blurRadius: 4,
    offset: Offset(2, 2),
  ),
  horizontalPadding: 16,
  verticalPadding: 8,
  direction: SwipeDirection.horizontal,
  onSwiped: (direction) {
    // Here call setState to update state
  },
  backgroundBuilder: (context, direction, progress) {
      // You can animate background using the progress
    return AnimatedBuilder(
      animation: progress,
      builder: (context, child) {
        return AnimatedContainer(
          duration: const Duration(milliseconds: 400),
          color: progress.value > 0.4
              ? Color(0xFFed7474)
              : Color(0xFFeded98),
        );
      },
    );
  },
  key: UniqueKey(),
  child: Padding(
    padding: const EdgeInsets.symmetric(vertical: 4.0),
    child: // Here Tile which will be shown at the top
  ),
),
  1. SwipeableTile.swipeToTrigger This is exactly the same as SwipeableTile but instead of dismiss it, it will trigger an action. The tile will return back to initial position when maximum drag reaches swipeThreshold

  2. SwipeableTile.swipeToTriggerCard This is exactly the same as SwipeableTile.card but instead of dismiss it, it will trigger an action. The tile will return back to initial position when maximum drag reaches swipeThreshold

You can build the background dynamically and animate them using backgroundBuilder. Use direction parameter to check swipe direction and show different widget.

backgroundBuilder: (context, direction, progress) {
   if (direction == SwipeDirection.endToStart) {
       return Container(color: Colors.red);
   } else if (direction == SwipeDirection.startToEnd) {
       return Container(color: Colors.blue);
   }
   return Container();
},

The progress is basically the same animation controller responsible for tile slide animation. You can use this controller to animate the background.

To trigger vibration you have to check when tile is dragged certain animation controller value. And I used vibration package for vibration and worked batter than HapticFeedback

backgroundBuilder: (context, direction, progress) {
    bool vibrated = false;
    return AnimatedBuilder(
        animation: progress,
        builder: (context, child) {
        if (progress.value > 0.2 && !vibrated) {
            Vibration.vibrate(duration: 40);
            vibrated = true;
        } else if (progress.value < 0.2) {
            vibrated = false;
        }
    // return your background
        },
    );
},

swipeThreshold defines how far you can drag and will consider as dismiss. In case of swipe to trigger this will define maximun drag limit.

How to swipe to trigger action?

It's possible to do from backgroundBuilder using progress parameter but to select exact message (or tile) requires calling setState() which is not possible from backgroundBuilder however you can call setState() from onSwiped callback which will invoke when the tile return to initial position.

Vibrate & animate the icon when it's dragged maximum by checking progress.isCompleted or you can check animation value. Then call setState() from onSwiped User will not notice unless you set movementDuration to longer time and swipeThreshold to 0.4 (which is default). Check the example app how it's implemented.


All flutter packages

● Sliding Clipped Nav Bar
● Water Drop Nav Bar
➜ Swipeable Tile
● Loading Animation Widget


カテゴリー

ソースリポジトリ

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

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