預設多點觸控滾動
概述
#ScrollBehavior 現在允許或禁止螢幕上指標數量影響滾動速度。預設情況下,ScrollBehavior.multitouchDragStrategy 會阻止多個指標同時與可滾動元件互動以影響滾動速度。
背景
#在此更改之前,拖動 Scrollable widget 的每個指標都會增加滾動速度。這不符合平臺在與 Flutter 應用程式互動時的預期。
現在,繼承的 ScrollBehavior 根據 ScrollBehavior.multitouchDragStrategy 指定,管理多個指標如何影響滾動 widget。此列舉 MultitouchDragStrategy 也可以配置為之前的行為。
變更說明
#此更改修復了透過使用多個手指拖動來增加滾動速度的意外能力。
如果在您的應用程式中依賴於之前的行為,可以通過幾種方式來控制和配置此功能。
擴充套件
ScrollBehavior、MaterialScrollBehavior或CupertinoScrollBehavior來修改預設行為,重寫ScrollBehavior.multitouchDragStrategy。- 有了您自己的
ScrollBehavior,您可以透過設定MaterialApp.scrollBehavior或CupertinoApp.scrollBehavior將其應用於整個應用程式。 - 或者,如果您只想將其應用於特定元件,請在相關元件上方新增一個
ScrollConfiguration,並使用您的自定義ScrollBehavior。
- 有了您自己的
您的可滾動 widget 然後繼承並反映此行為。
- 另一種更改預設行為的選項是複製現有的
ScrollBehavior,並設定不同的multitouchDragStrategy,而不是建立自己的ScrollBehavior。- 在您的元件樹中建立一個
ScrollConfiguration,並使用copyWith提供當前上下文中現有ScrollBehavior的修改副本。
- 在您的元件樹中建立一個
為了適應新的配置,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(),
// ...
);為特定元件設定自定義 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 文件
ScrollConfigurationScrollBehaviorMaterialScrollBehaviorCupertinoScrollBehaviorMultitouchDragStrategyDragGestureRecognizer
相關議題
相關 PR