届かない

下スワイプでの画面クローズ -ひとりアドベントカレンダー Flutter編 2018 その11-

最近のスマートフォンは大画面化がすすみ上部の戻るボタンまで指が届かず、テンポよく操作しにくくなってきています。
ということで、11日目は閉じるボタンを押さずとも下スワイプで画面を閉じてみます。

昨日までの内容と今後については目次を参照してください。

今回も先日使ったGestureDetectorを利用します。
いつもどおりGitHubのプロジェクトChapter11ブランチでアップしてますので、参照して下さい。

下スワイプアクションのトリガは画面を覆うアイコンで良いと思いますので、前回追加したHeroをGestureDetectorでラップします。

そしてアクションを選ぶわけですが、下スワイプというアクションは準備されていません。いろいろ探してみると、onVerticalDragUpdate が望んだ動きをしてくれそうです。

GestureDetector(
  onVerticalDragUpdate: (detail) {
    if (detail.primaryDelta > 5) {
      Navigator.pop(context);
    }
  },
),

結果的にはこれでよかったのですが、どれだけ動けばスワイプとみなすかはプログラム側で決めなくてはいけませんので、結構難しいところです。

今回は移動距離の指定を5としてみました。

ところで、この移動距離(primaryDelta)という値ですが、

double primaryDelta
package:flutter
The amount the pointer has moved along the primary axis since the previous update.
If the [GestureDragUpdateCallback] is for a one-dimensional drag (e.g., a horizontal or vertical drag), then this value contains the component of [delta] along the primary axis (e.g., horizontal or vertical, respectively). Otherwise, if the [GestureDragUpdateCallback] is for a two-dimensional drag (e.g., a pan), then this value is null.
Defaults to null if not specified in the constructor.

という感じで、何を表しているのかがよくわからないところです。一方的に大きくなるわけではないので、リフレッシュサイクルあたりな感じですが...

ということで、今回はこれで終わりです。
こういう細かな使いやすさについても、Flutterであれば少しの手間だけで対応出来るので最高ですね。

・・・

今回は画像を用意する必要がなくて楽だったわ...
noteのいいねとかTwitterのフォローとかお待ちしています。


趣味のプログラミングにもいろいろとお金がかかって大変なんですわ。特に小遣い制の妻帯者は。