Я очень новичок в android разработке в целом, и поэтому простите меня, если некоторые из них являются очевидными ответами.
Я пытаюсь реализовать функциональность смахивания влево / вправо для переключаться между страницами в моем приложении. Однако я сталкиваюсь с проблемами, определяющими скорость и использующими ее для определения того, был ли произведен обмен влево / вправо.
Вот мой код с инструкциями отладчика, оставленными для ясности:
onHorizontalDragStart: (DragStartDetails details) {
print("Horizontal Drag Start - preflop.");
},
onHorizontalDragDown: (DragDownDetails details) {
print("Horizontal Drag Down - preflop.");
},
onHorizontalDragUpdate: (DragUpdateDetails details) {
print("Horizontal Drag Update - preflop. Velocity Delta: " + details.primaryDelta.toString());
},
onHorizontalDragEnd: (DragEndDetails details) {
// TODO: Check velocity for non-zero but still too slow to swap?
if (details.primaryVelocity >= 0) {
print("Horizontal Drag End - preflop movement cancelled. Velocity: " + details.primaryVelocity.toString());
return;
}
else {
print("Horizontal Drag End - preflop. Velocity: " + details.primaryVelocity.toString());
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Flop()),
);
}
}
onHorizontalDragStart: (DragStartDetails details) {
print("Horizontal Drag Start - flop.");
},
onHorizontalDragDown: (DragDownDetails details) {
print("Horizontal Drag Down - flop.");
},
onHorizontalDragUpdate: (DragUpdateDetails details) {
print("Horizontal Drag Update - flop. Velocity Delta: " + details.primaryDelta.toString());
},
onHorizontalDragEnd: (DragEndDetails details) {
// TODO: Check velocity for non-zero but still too slow to swap?
if (details.primaryVelocity <= 0) {
print("Horizontal Drag End - flop movement cancelled. Velocity: " + details.primaryVelocity.toString());
return;
}
else {
print("Horizontal Drag End - flop. Velocity: " +
details.primaryVelocity.toString());
Navigator.pop(context);
}
}
Когда все работает правильно, я получаю вывод отладки:
I/flutter (17305): Horizontal Drag Down - preflop.
I/flutter (17305): Horizontal Drag Start - preflop.
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -5.712890625
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -5.336216517857167
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -7.998046875
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -8.763950892857167
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -11.42578125
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -11.049107142857167
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -11.049107142857167
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -13.334263392857139
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -11.42578125
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -8.763950892857139
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -7.998046875
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -5.336216517857139
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -3.427734375
I/flutter (17305): Horizontal Drag Update - preflop. Velocity Delta: -4.5703125
I/flutter (17305): Horizontal Drag End - preflop. Velocity: -710.2030737630879
Есть две основные проблемы, с которыми я сталкиваюсь. Во-первых, иногда, даже если я правильно проводил, primaryVelocity
возвращает ноль. Это может быть засвидетельствовано, отслеживая onHorizontalDragUpdate
и затем видя получающееся onHorizontalDragEnd
. Теперь я понимаю, что если я перетаскиваю, затем останавливаю и затем отпускаю свой курсор, конечная скорость логически будет равна нулю - но в этом случае я не ощущаю заметной паузы - просто перетаскиваю и отпускаю.
I/flutter (17305): Horizontal Drag Down - flop.
I/flutter (17305): Horizontal Drag Start - flop.
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -6.85546875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -8.763950892857167
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -7.998046875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -9.906529017857167
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -9.140625
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -8.763950892857167
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -7.998046875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -5.336216517857139
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -6.85546875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -4.5703125
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -4.193638392857139
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -2.28515625
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -2.28515625
I/flutter (17305): Horizontal Drag End - flop movement cancelled. Velocity: 0.0
Другая проблема заключается в том, что иногда знак primaryVelocity
кажется неправильным. Несмотря на то, что onHorizontalDragUpdate
имеет отрицательные значения primaryDelta
, например, результирующее onHorizontalDragUpdate
имеет положительное значение для скорости:
I/flutter (17305): Horizontal Drag Down - flop.
I/flutter (17305): Horizontal Drag Start - flop.
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -12.191685267857167
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -11.42578125
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -14.476841517857167
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -13.334263392857139
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -11.049107142857139
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -6.85546875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -6.85546875
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -4.193638392857139
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -3.427734375
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -3.427734375
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -1.142578125
I/flutter (17305): Horizontal Drag Update - flop. Velocity Delta: -1.142578125
I/flutter (17305): Horizontal Drag End - flop. Velocity: 58.203062840330496
Любые предложения приветствуются. Дайте мне знать, есть ли дополнительный код, который я могу предоставить, чтобы помочь ответить на вопросы. Спасибо!
РЕДАКТИРОВАТЬ
По предложению Ulas, я обновил все свои плагины / IDE. Похоже, что первая проблема была решена - я больше не получаю скорость 0.0.
Однако я все еще получаю вторую проблему:
I/flutter (18942): Horizontal Drag Down - flop.
I/flutter (18942): Horizontal Drag Start - flop.
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -6.478794642857167
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -7.998046875
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -8.763950892857167
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -9.140625
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -9.906529017857167
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -10.283203125
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -13.334263392857167
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -13.334263392857167
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -14.476841517857139
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -12.191685267857139
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -10.283203125
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -12.191685267857139
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -10.283203125
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -8.763950892857139
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -6.85546875
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -5.336216517857139
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -4.5703125
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -3.427734375
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -3.427734375
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -1.9084821428571388
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: -1.142578125
I/flutter (18942): Horizontal Drag Update - flop. Velocity Delta: 0.0
I/flutter (18942): Horizontal Drag End - flop. Velocity: 220.44058450541567