はじめに
バージョンflutter-2.3.0-12.0.pre以降で、Desktop及びWebアプリにおいてマウスのドラッグ操作でスクロースすることが出来なくなりました。デスクトップ環境でアプリをデバッグしているときにあれ?って思うことがあるので(例えば、横方向へのスクロール操作)、元のようにドラッグ操作でスクロールを使えるようにする方法をまとめておきます。
※ 2021/8/22時点で stable 版にはまだリリースされていない機能ですが、そのうち反映されます。
@kabochapo ツイートありがとう(このツイートをなんとなく覚えていた)マウスでドラッグしてもスクロールしないようにする変更。
— Kabo💉 (@kabochapo) May 5, 2021
ドラッグでスクロールするのはデスクトップやwebらしくなく感じる一因だと思ってたので嬉しい。https://t.co/HAIydWHWq8
アプリ全体でマウスドラッグ操作を有効にする方法
MaterialApp
のscrollBehavior
にMaterialScrollBehaviorを継承した独自のインスタンスを渡してあげます。dragDevices
メソッドで返す値にPointerDeviceKind.mouse
を追加してあげれば良いです。
class MyCustomScrollBehavior extends MaterialScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch, // 通常のタッチ入力デバイス
PointerDeviceKind.mouse, // これを追加!
};
}
MaterialApp(
scrollBehavior: MyCustomScrollBehavior(), // これを追加!
// ...
);
特定のwidgetでのみマウスドラッグ操作を有効にする方法
目的のwidgetをScrollConfigurationで囲ってあげて、behavior
に上記と同じようにMaterialScrollBehavior
を継承した独自クラスのインスタンスを与えるだけです。
class MyCustomScrollBehavior extends MaterialScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
};
}
final ScrollController controller = ScrollController();
ScrollConfiguration(
behavior: MyCustomScrollBehavior(),
child: ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
}
),
);