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 コマンド スタイルのツールチップ テキスト プロンプト効果

推薦する

HTML メタタグの一般的な使用例のコレクション

マタタグとは<meta> 要素は、検索エンジン向けの説明やキーワード、更新頻度など、ペー...

MySql における無効な Null セグメント判定と IFNULL() 失敗の解決策

MySql Nullフィールド判定とIFNULL失敗処理ps: (プロセスを表示したくない場合は、S...

Linux で crontab 出力リダイレクトが有効にならない問題の解決方法

質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

30 種類の無料の高品質英語リボンフォント

30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...

初心者向けMySQLインデックス

序文MySQL インデックスで最も重要なデータ構造は B+ ツリーなので、まずは B+ ツリーの原理...

JavaScript のフラット配列をツリー構造に変換する例

目次バックグラウンドで10,000個のデータが失われた再帰法非再帰的方法要約するバックグラウンドで1...

フォームのmethod=post/getの違い

フォームは、get と post の 2 つのデータ転送方法を提供します。どちらもデータを送信する方...

ノードを使用して静的ファイルキャッシュを実装する方法

目次キャッシュキャッシュ位置の分類キャッシュ設定ヘッダーNodeは静的ファイルキャッシュを実装する強...

フラッシュプラグインを使用してPCのカメラを呼び出し、TMLページに埋め込む方法

序文この記事を書いた主な理由は、チームリーダーが、ブラウザを使用してコンピューターのカメラを呼び出し...

完全なMySQL学習ノート

目次MyISAM と InnoDBパフォーマンスの低下と SQL の速度低下の理由: MySQL 実...

Vue.jsはコンポーネントを通じてアイコンを処理します

アイコン処理ソリューションこの記録の目的は、element-plus 以外のアイコンをコンポーネント...

JavaScript Canvas は動的なワイヤーフレーム効果を描画します

この記事では、JavaScript Canvasの動的なワイヤーフレーム効果を描画する具体的なコード...

JavaScript 正規表現の説明

目次1. 正規表現の作成2. 使用モード2.1 シンプルモードの使用2.2 特殊文字の使用3. 応用...

Select はダブルクリック dbclick イベントをサポートしていません

XML/HTML コードコンテンツをクリップボードにコピー< div クラス= "c...

Linux コマンドを使用してオーディオ形式を変換および結合する方法

FFmpeg flacをインストールする eric@ray:~$ sudo apt install ...