默认多点触控滚动
摘要
#ScrollBehavior
现在允许或不允许滚动速度受屏幕上指针数量的影响。ScrollBehavior.multitouchDragStrategy
默认情况下,会阻止多个指针同时与可滚动内容交互影响滚动速度。
上下文
#在此更改之前,对于每个拖动 Scrollable
Widget 的指针,滚动速度都会增加。这与在与 Flutter 应用程序交互时平台的预期不符。
现在,继承的 ScrollBehavior
根据 ScrollBehavior.multitouchDragStrategy
指定的内容管理多个指针如何影响滚动 Widget。此枚举 MultitouchDragStrategy
也可以配置为之前的行为。
更改说明
#此更改修复了通过用多个手指拖动意外增加滚动速度的功能。
如果您在应用程序中依赖于之前的行为,则有几种方法可以控制和配置此功能。
扩展
ScrollBehavior
、MaterialScrollBehavior
或CupertinoScrollBehavior
以修改默认行为,覆盖ScrollBehavior.multitouchDragStrategy
。- 使用您自己的
ScrollBehavior
,您可以通过设置MaterialApp.scrollBehavior
或CupertinoApp.scrollBehavior
在应用程序范围内应用它。 - 或者,如果您只想将其应用于特定 Widget,请在相关 Widget 上方添加一个
ScrollConfiguration
,并使用您的自定义ScrollBehavior
。
- 使用您自己的
然后,您的可滚动 Widget 继承并反映此行为。
- 除了创建自己的
ScrollBehavior
之外,更改默认行为的另一种选择是复制现有的ScrollBehavior
,并设置不同的multitouchDragStrategy
。- 在您的 Widget 树中创建一个
ScrollConfiguration
,并使用copyWith
在当前上下文中提供修改后的现有ScrollBehavior
副本。
- 在您的 Widget 树中创建一个
为了适应新的配置,DragGestureRecognizer
也更新为在其他拖动上下文中支持 MultitouchDragStrategy
。
迁移指南
#为您的应用程序设置自定义 ScrollBehavior
#迁移前代码
MaterialApp(
// ...
);
迁移后代码
class MyCustomScrollBehavior extends MaterialScrollBehavior {
// Override behavior methods and getters like multitouchDragStrategy
@override
MultitouchDragStrategy getMultitouchDragStrategy(BuildContext context) => MultitouchDragStrategy.sumAllPointers;
}
// Set ScrollBehavior for an entire application.
MaterialApp(
scrollBehavior: MyCustomScrollBehavior(),
// ...
);
为特定 Widget 设置自定义 ScrollBehavior
#迁移前代码
final ScrollController controller = ScrollController();
ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
);
迁移后代码
class MyCustomScrollBehavior extends MaterialScrollBehavior {
// Override behavior methods and getters like multitouchDragStrategy
@override
MultitouchDragStrategy getMultitouchDragStrategy(BuildContext context) => MultitouchDragStrategy.sumAllPointers;
}
// ScrollBehavior can be set for a specific widget.
final ScrollController controller = ScrollController();
ScrollConfiguration(
behavior: MyCustomScrollBehavior(),
child: ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
),
);
复制和修改现有的 ScrollBehavior
#迁移前代码
final ScrollController controller = ScrollController();
ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
);
迁移后代码
// ScrollBehavior can be copied and adjusted.
final ScrollController controller = ScrollController();
ScrollConfiguration(
behavior: ScrollConfiguration.of(context).copyWith(
multitouchDragStrategy: MultitouchDragStrategy.sumAllPointers,
),
child: ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
),
);
时间线
#包含在版本中:3.18.0-4.0.pre
稳定版本:3.19.0
参考
#API 文档
ScrollConfiguration
ScrollBehavior
MaterialScrollBehavior
CupertinoScrollBehavior
MultitouchDragStrategy
DragGestureRecognizer
相关问题
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-07-16。 查看源代码 或 报告问题.