Flutterを使用して移動可能なスタックウィジェット機能を作成する

Flutterを使用して移動可能なスタックウィジェット機能を作成する

この投稿では、キャンバスとドラッグ可能なノード インターフェースを使用するデスクトップおよび Web 用に私が設計した極秘の Flutter プロジェクトに焦点を当てています。このチュートリアルでは、スタックを使用してウィジェットでドラッグ可能な機能を実現する方法を説明します。

下記の通りです。

ドラッグ可能なウィジェットの例

スタックにアイテムを動的に追加し、それらを区別するために、RandomColor タイパーを使用します。したがって、そのパッケージを追加する必要があります。

ランダムカラー:

次にスタックを含むHomeViewを作成します

クラス HomeView は StatefulWidget を拡張します {
  @オーバーライド
  _HomeViewState は、_HomeViewState を createState() します。
}

クラス_HomeViewStateはState<HomeView>を拡張します。
  リスト<ウィジェット> 可動アイテム = [];

  @オーバーライド
  ウィジェットビルド(BuildContextコンテキスト) {
    Scaffold を返す(
        本体: スタック(
          子: 可動アイテム、
        ));
  }
}

機能は非常にシンプルです。 MoveableStackItemステートフル ウィジェットができます。自分の位置と色を記録します。色は初期化時に設定され、位置はGestureDetectorを介して更新されます。

クラス _MoveableStackItemState は State<MoveableStackItem> を拡張します {
  ダブルx位置 = 0;
  ダブルy位置 = 0;
  色 色;

  @オーバーライド
  void initState() {
    色 = RandomColor().randomColor();
    スーパーステートを初期化します。
  }

  @オーバーライド
  ウィジェットビルド(BuildContextコンテキスト) {
    位置を返す(
      上: y位置、
      左: x位置、
      子: ジェスチャー検出器(
        onPanUpdate: (タップ情報) {
          状態を設定する(() {
            x位置 += tapInfo.delta.dx;
            y位置 += tapInfo.delta.dy;
          });
        },
        子:コンテナ(
          幅: 150,
          高さ: 150,
          色: 色、
        )、
      )、
    );
  }
}

最後に、新しいMoveableStackItemビューを追加します。これは、HomeView のフローティング アクション ボタンを使用して実行します。

 Scaffold を返す(
  フローティングアクションボタン:フローティングアクションボタン(
    押されたとき: () {
      状態を設定する(() {
        移動可能なアイテムを追加します(MoveableStackItem());
      });
    },
  )、
  本体: スタック(
    子: 可動アイテム、
  ));

それでおしまい。これで、ビュー上に移動可能なスタックが作成されました。

これで、Flutter で移動可能なスタック ウィジェットを作成する方法に関するこの記事は終了です。Flutter スタック ウィジェットの関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 100 万件を超える StackOverflow Flutter 20 の質問 (推奨)

<<:  dockerエラーの原因分析 終了しました (1) 4分前

>>:  純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

推薦する

MySQL 外部キー制約とテーブル関係の概要

目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...

MySQL 数十億のデータのインポート、エクスポート、移行に関するメモ

最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...

MySQLデータベースに他のIPアドレスからアクセスできない問題の解決策

序文先ほどのプロジェクトを参考にすると、環境は整いました。プロジェクトの準備と検証の段階で、問題が発...

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...

VueとFlask間の通信の実装

axiosをインストールして通信を実装するここでは、axios を使用して Vue フロントエンドと...

シェルを使用して複数のサーバーでバッチ操作を実行する方法

目次SSHプロトコルパスワード接続プロセスsshツールssh公開鍵ログインバッチ操作複数サーバーファ...

Reactの基本のまとめ

目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...

指定された期間内のすべての日付または月を取得する MySQL ステートメント (ストアド プロシージャの設定やテーブルの追加は不要)

mysql は期間内のすべての日付または月を取得します1: mysqlは期間内のすべての月を取得し...

Alibaba Cloud Server Ubuntu 設定チュートリアル

Alibaba Cloud のカスタム Ubuntu イメージのインポートには、OSS スナップショ...

ウェブ画像のホットリンクと座標値を設定するサンプルコード

時には、画像上に複数の領域を設定する必要があります。マウスで画像のさまざまな領域をクリックしてさまざ...

CSSフィルターにはどんな魔法の用途があるか

背景基本概念CSS filterプロパティは、ぼかしや色の変化などのグラフィック効果を要素に適用して...

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

Dockerを使用してphabricatorをインストールする方法

ここでは Ubuntu 16.04 システムを使用しています。 dockerを使用したインストールh...