[Flutter]DragTargetWidgetの”onAccept”がDeprecatedになるので修正したら、案の定ちょっとつまづいた(しかし解決)

プログラミングしている猫の画像

コードを眺めていると、DragTargetのプロパティに横線が……。

onWillAcceptとonAcceptのところにバッチリ横線ひかれてるじゃあ、あーりませんか。
でも慌てない。そこはIDEなんで、カーソル乗せてディテールを表示させりゃ一発でさぁ。

てなわけで出てきたのが、おおよそ以下の表示。

‘Use onWillAcceptWithDetails instead. ‘ ‘This callback is similar to onWillAcceptWithDetails but does not provide drag details. ‘ ‘This feature was deprecated after v3.14.0-0.2.pre.’ )

https://api.flutter.dev/flutter/widgets/DragTarget/onWillAccept.html

てなわけで、さっそく修正。

やっぱりそこはIDEなんでね。統合開発環境なんでね。こんなもんはCtrl+Spaceであらよっと出てきてくれちゃうわけです。便利!
警告文にあった通り、onWillAcceptとonAcceptは以下の2つに書き換えれば良さそう。

・onWillAcceptWithDetails
・onAcceptWithDetails

なんて簡単! ほいこれで終了ーーー!

とはならないんすよねぇ……

IDE君も特に警告を吐いてないんで大丈夫だろと高を括ってたんですが、いざ当該機能を試してみると、やっぱりエラー発生……_(:3」∠)_ナンナノ

エラー内容とにらめっこすること十数分。
どうやら今まで渡してた変数のところが型違反で止まっているらしいのに気づく(←遅い)

type 'dragtargetdetails<int>' is not a subtype of type 'num' of 'other'

具体的にはこんな感じのエラー。

いままで↓で問題なく動いてたじゃない! どうして? あたいのこと嫌いになったの!? あたいの何がいけなかったの? ねぇ!

DragTarget<int>(
...
onAcceptWithDetails: (data) {

...

final hogehoge = data;

解決とラブストーリーは突然に。

まあ、いままで通ってた型が通らなくなったのだから、冷静に考えればお察し案件なんですけどね。

やっぱりIDE頼みで onAcceptWithDetails: (data) {(処理)} となっていたその”data”にカーソル乗せて詳細見ると、DraggableDetails<int>って型になっとったわけです。
ええ、はい、<int>じゃなくなってたんですね、はい。

てなわけで、DraggableDetails型として渡ってきたdata君は恐らく元々渡してくれてたデータ自体は持っているはずなので、その目的のデータを取り出せたらよかろう、と。

で、結果がこちら。

final hogehoge = data.data;

これにて、めでたく機能しましたとさ。やれやれだぜ。

多分だけど、ドラッグ要素から得られる用意設定したdata以外にも、なにかしらデータを持ってきてるんだろうね。それらを適宜利用できるようになってるんじゃないかと、勝手に想像してるけど、相変わらず詳しいことは調べてません←
(そうじゃなきゃこういう構造にしてる意味がないしな。)

だって、とりあえず今の時点では、動きゃいいもの。
また別の機会に実装することがあったら、そのときに今回のことが活きる、はず。しらない。

コメント

タイトルとURLをコピーしました