Я работаю On Tap Bounce
функция на моем виджете. Я сослался на эти ссылки для получения информации:
Я получил этот пакет с именем bouncing_widget , который был достаточно хорош для обходного пути, но есть одно ограничение к нему, то есть Он не подходит для прокрутки виджета. Вы не можете прокрутить страницу, коснувшись виджета, который использует этот подпрыгивающий виджет флаттера
Кто-то уже создал ошибку для вышеуказанного виджета, и решение не найдено. Вот где вы можете найти проблему: Bouncing Widget GitHub Issue
Итак, я решил создать свой собственный виджет, который выполняет эту работу за меня. Я сделал виджет, и он работает нормально, но есть ограничение, то есть
Когда вы прокручиваете страницу, удерживая виджет, виджет остается там в одной фиксированной позиции, что означает как будто он остается в нажатом положении
Вот мой код:
import 'package:flutter/material.dart';
class CLBounceWidget extends StatefulWidget {
final Function onPressed;
final Widget child;
CLBounceWidget({Key key, @required this.onPressed, @required this.child}): super(key:key);
@override
CLBounceWidgetState createState() => CLBounceWidgetState();
}
class CLBounceWidgetState extends State<CLBounceWidget> with SingleTickerProviderStateMixin{
double _scale;
final Duration duration = Duration(milliseconds: 200);
AnimationController _animationController;
//Getting onPressed Calback
VoidCallback get onPressed => widget.onPressed;
@override
void initState() {
_animationController = AnimationController(
vsync: this,
duration: duration,
lowerBound: 0.0,
upperBound: 0.1
)..addListener((){ setState((){}); });
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
_animationController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_scale = 1 - _animationController.value;
return GestureDetector(
onTapDown: _onTapDown,
onTapUp: _onTapUp,
child: Transform.scale(
scale: _scale,
child: widget.child
)
);
}
// Triggering the onPressed callback with a check
void _onTapTrigger(){
if(onPressed != null){
onPressed();
}
}
//Start the animation
_onTapDown(TapDownDetails details){
_animationController.forward();
}
// We revise the animation and notify the user of the event
_onTapUp(TapUpDetails details){
Future.delayed(Duration(milliseconds: 100), (){
_animationController.reverse();
});
//Finally calling the callback function
_onTapTrigger();
}
}
Также: Я пытался сделать это, без использования Future
, но с этим Анимация происходит только при длительном нажатии , просто _onTapTrigger () работает:
_onTapUp(TapUpDetails details){
_animationController.reverse();
_onTapTrigger();
}
Tried: Я пытался использовать onLongPress
, onLongPressEnd
, onLongPressMoveUpdate
, чтобы хотя бы выполнить _animationController.reverse (); , но у меня ничего не получилось.
Любая помощь будет оценена. Я хочу, чтобы виджет оставался нормальным при прокрутке страницы, удерживая виджет, как это делает обычный виджет.