Desplazamiento multitáctil predeterminado
Los ScrollBehaviors ahora configurarán cómo los Scrollables responden a los gestos multitáctiles.
Resumen
#Los ScrollBehaviors ahora permiten o no que la velocidad de desplazamiento se vea afectada por el
número de punteros en la pantalla. ScrollBehavior.multitouchDragStrategy, por
defecto, evita que múltiples punteros interactuando con el scrollable al mismo
tiempo afecten la velocidad de desplazamiento.
Contexto
#Antes de este cambio, por cada puntero que arrastraba un Widget Scrollable, la
velocidad de desplazamiento aumentaba. Esto no coincidía con las expectativas de la plataforma al
interactuar con aplicaciones Flutter.
Ahora, el ScrollBehavior heredado gestiona cómo múltiples punteros afectan
a los widgets de desplazamiento según lo especificado por ScrollBehavior.multitouchDragStrategy. Este
enum, MultitouchDragStrategy, también se puede configurar para el comportamiento anterior.
Descripción del cambio
#Este cambio solucionó la capacidad inesperada de aumentar las velocidades de desplazamiento al arrastrar con más de un dedo.
Si has dependido del comportamiento anterior en tu aplicación, existen varias formas de controlar y configurar esta función.
-
Extiende
ScrollBehavior,MaterialScrollBehavioroCupertinoScrollBehaviorpara modificar el comportamiento predeterminado, sobrescribiendoScrollBehavior.multitouchDragStrategy.- Con tu propio
ScrollBehavior, puedes aplicarlo a nivel de toda la aplicación configurandoMaterialApp.scrollBehavioroCupertinoApp.scrollBehavior. - O, si deseas aplicarlo solo a widgets específicos, agrega una
ScrollConfigurationencima del widget en cuestión con tuScrollBehaviorpersonalizado.
- Con tu propio
Tus widgets desplazables luego heredan y reflejan este comportamiento.
-
Instead of creating your own
ScrollBehavior, another option for changing the default behavior is to copy the existingScrollBehavior, and set differentmultitouchDragStrategy.- Crea una
ScrollConfigurationen tu árbol de widgets y proporciona una copia modificada delScrollBehaviorexistente en el contexto actual usandocopyWith.
- Crea una
Para adaptarse a la nueva configuración,
DragGestureRecognizer también se actualizó para admitir MultitouchDragStrategy
en otros contextos de arrastre.
Guía de migración
#Establecer un ScrollBehavior personalizado para tu aplicación
#
Código antes de la migración:
MaterialApp(
// ...
);
Código después de la migración:
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(),
// ...
);
Establecer un ScrollBehavior personalizado para un widget específico
#
Código antes de la migración:
final ScrollController controller = ScrollController();
ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
);
Código después de la migración:
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');
},
),
);
Copiar y modificar un ScrollBehavior existente
#
Código antes de la migración:
final ScrollController controller = ScrollController();
ListView.builder(
controller: controller,
itemBuilder: (BuildContext context, int index) {
return Text('Item $index');
},
);
Código después de la migración:
// 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');
},
),
);
Timeline
#Introducido en la versión: 3.18.0-4.0.pre
En la versión estable: 3.19.0
Referencias
#Documentación de la API:
-
ScrollConfiguration -
ScrollBehavior -
MaterialScrollBehavior -
CupertinoScrollBehavior -
MultitouchDragStrategy -
DragGestureRecognizer
Problema relevante:
PRs relevantes:
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-11. Ver código fuente oreportar un problema.