Flutter ドラッグ&ドロップできるWidgetの作成

image

Widgetをドラッグ&ドロップする方法  

Flutter のアプリ開発をする中で学んだことをブログに残していきます。
少しでも誰かのお役に立てれば幸いです。

Widgetをドラッグ&ドロップしてデータを受け渡す機能を作りました。

完成品がこちらです。

DragAndDrop

実装方法

パッケージの導入は、必要ないです。
ドラッグするWidgetを Draggable の child に指定し、受け渡す data: を書きます。

dragIcon という、Icon の Widget を事前に用意しています。

Draggable(
      data: 'Androidくん',
      child: dragIcon,
      feedback: dragIcon,
      childWhenDragging: Container(
        width: 100,
        height: 100,
      ),
    ),

feedback: は、ドラッグで移動しているときに表示する Widget のことです。
今回は、ドラッグ中は表示を変えないために、同じアイコンを指定しています。

childWhenDragging: は、ドラッグして移動している時に、元いた場所に表示する Widget のことです。
今回は、アンドロイドくんが移動している様に見せるため、元いた場所には何も表示しないように
空の Contaner を指定しました。

次に、DragTarget を作ります。

DragTarget targetArea(Function onAccept) => DragTarget(
      builder: (context, candidateData, rejectedData) {
        return Container(
          color: Colors.orange,
          width: 100,
          height: 100,
        );
      },
      onAccept: onAccept,
    );

この DragTarget は、正方形でオレンジ色の Container にしています。ここがドロップするエリアです。
onAccept: は、このエリア内に Widget がドロップされると実行されるファンクションです。
このときに Widget が持っている data が受け渡されます。

これで、ドラッグ&ドロップした Widget が持っている data が受け渡され、ダイアログに表示させることができました。

すべてのコードです。

class DragExample extends StatelessWidget {
  
  Widget build(BuildContext context) {
    Icon dragIcon = Icon(
      Icons.adb_sharp,
      size: 100.0,
      color: Colors.green,
    );
    return Container(
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Draggable(
            data: 'Androidくん',
            child: dragIcon,
            feedback: dragIcon,
            childWhenDragging: Container(
              width: 100,
              height: 100,
            ),
          ),
          targetArea(
            (data) => showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text('"data" 表示'),
                  content: Text(data),
                  actions: [
                    TextButton(
                      child: Text('OK'),
                      onPressed: () => Navigator.of(context).pop(),
                    ),
                  ],
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

DragTarget targetArea(Function onAccept) => DragTarget(
      builder: (context, candidateData, rejectedData) {
        return Container(
          color: Colors.orange,
          width: 100,
          height: 100,
        );
      },
      onAccept: onAccept,
    );



<参考にしたサイト>

https://qiita.com/umechanhika/items/2f572f7b58f0316b4faf


お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More

タグ

Flutter (70)初心者向け (22)イベント (15)Nextjs (8)Google Apps Script (7)可茂IT塾 (6)Firebase (6)React (5)新卒 (3)就活 (3)給与支払報告書 (3)riverpod (3)Dart (3)JavaScript (3)TypeScript (3)インターン (3)FlutterWeb (2)画像 (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)ワーケーション (2)社会人 (2)大学生 (2)お知らせ (2)webfeed (1)RSS (1)CodeRunner (1)VSCode (1)個人開発 (1)設計 (1)フルリモート (1)学生向け (1)Java (1)Spring Boot (1)エンジニア (1)DeviceOrientation (1)正規表現 (1)神楽 (1)趣味紹介 (1)プログラミングだけではない可茂IT塾のメンバー (1)線型計画法 (1)事例 (1)PreferredSize (1)マテリアルデザイン (1)Material (1)クパチーノデザイン (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)シェアハウス (1)スクレイピング (1)Gmail (1)Googleグループ (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)Vercel (1)Google Domains (1)branch (1)Git (1)オンラインオフィス (1)Freezed (1)アイコン (1)Apple Store Connect (1)FlutterGen (1)検索機能 (1)Navigator (1)メール送信 (1)カスタム認証 (1)アニメーション (1)FloatingActionButton (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)Dialog (1)Figma (1)デザイン (1)Slack (1)BI (1)非同期処理 (1)BackdropFilter (1)iOS (1)レビュー (1)getAuth (1)匿名 (1)Algolia (1)chakra-ui (1)コンサルティング (1)Symbol (1)reactive_forms (1)

お知らせ

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日開催のアプリ開発講座の参加者募集中!!

3月19日にアプリ開発講座を開催します!会場は岐阜県美濃加茂市のコワーキングスペース「こやぁね」です。興味のある方は是非ご参加ください!

Read More
可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More