flutter:如何在 Web 和 Windows 上启用触摸手势(自更新 2.5 起)

flutter: How to enable touch gestures on Web and Windows (since update 2.5)

自从 Flutter 2.5 发布后,触摸手势不再有效(例如使用 ScrollViwes 或 Tabs)。我没有在 Android / IOS 上进行测试,因为我当时没有为这些平台开发,但我假设它只是默认在 PC 平台上禁用,但我找不到任何关于这个的资源,不知道如何打开它! (我在具有多个独立项目的两个独立工作站上遇到了同样的问题,在调试和发布中)

编辑

示例:

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        body: ListView.builder(
          itemBuilder: (buildContext, index) => ListTile(
            title: Text("test " + index.toString()),
          ),
        ),
      ),
    ),
  );
}

这是 Flutter 2.5 中的一项重大更改,但如果您仍然需要此行为,可以使用 Flutter 的迁移指南:https://flutter.dev/docs/release/breaking-changes/default-scroll-behavior-drag#migration-guide.

您必须编写自己的 ScrollBehavior:

class MyScrollBehavior extends MaterialScrollBehavior {
  @override
  Set<PointerDeviceKind> get dragDevices => { 
    PointerDeviceKind.touch,
    PointerDeviceKind.mouse,
    ...
  };
}

MaterialApp(
  scrollBehavior: MyScrollBehavior(),
  ...
);

这是我现在的实现:

class MyCustomScrollBehavior extends MaterialScrollBehavior {
  const MyCustomScrollBehavior();

  @override
  Set<PointerDeviceKind> get dragDevices => {
        PointerDeviceKind.mouse,
      }..addAll(super.dragDevices);
}

主要内容:

MaterialApp(
  scrollBehavior: const MyCustomScrollBehavior(),
  home: ...,
);

好处是,你不用担心其他的PointerDeviceKind,因为超级getter和其他的一样!