Проблемы с onHorizontDragEnd DragEndDetails.primaryVelocity - PullRequest
0 голосов
/ 01 марта 2020

Я очень новичок в 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

1 Ответ

0 голосов
/ 01 марта 2020

Я не получил 0,0 скорости с вашим кодом. Можете ли вы попробовать другие флаттер-каналы, такие как бета-версия, и обновить последнюю версию

...