У меня есть анимированный «цветок», состоящий из изображений лепестков, которые поворачиваются в положение на сборке виджета. Изображения лепестков могут быть различной длины.
Поскольку я не знал, как переместить точку поворота каждого PNG лепестка в нижний центр вращения, я сделал каждое изображение лепестка прозрачным квадратом с нижней частью. лепестка в центре изображения, так что я могу просто повернуть все квадратное изображение вокруг центра, и похоже, что лепесток вращается вокруг своей основы.
У меня есть 5 из них в стопке, анимированные , и я хочу детектор жестов на каждом из них, чтобы я мог действовать, когда любой из них коснулся. У меня уже есть GestureDetector на изображении, которое я использую для центра цветка, и это работает, но ни один из лепестков не работает.
Я попытался использовать HitTestBehavior.translucent без удачи ...
class _PFMainScreenState extends State<PFMainScreen>
with TickerProviderStateMixin {
AnimationController rotationController;
@override
void initState() {
super.initState();
rotationController = AnimationController(
duration: const Duration(milliseconds: 2000), vsync: this);
}
void onAfterBuild(BuildContext context) {
Future.delayed(const Duration(milliseconds: 1000), () {
rotationController.forward();
});
}
@override
void dispose() {
rotationController.dispose();
super.dispose();
}
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) => onAfterBuild(context));
return Scaffold(
backgroundColor: Colors.black,
body: Center(
child: DecoratedBox(
position: DecorationPosition.background,
decoration: BoxDecoration(
color: Colors.black,
image: DecorationImage(
image: AssetImage('images/background.jpg'),
fit: BoxFit.contain),
),
child: Stack(
children: <Widget>[
Center(
child: GestureDetector(
onTap: () {
print('1st image tapped');
},
behavior: HitTestBehavior.translucent,
child: Image.asset('images/petal-square.png', height: 350)),
),
Center(
child: RotationTransition(
turns: Tween(begin: 0.0, end: 0.2).animate(
new CurvedAnimation(
parent: rotationController,
curve: Curves.decelerate,
reverseCurve: Curves.decelerate)),
child: GestureDetector(
onTap: () {
print('2nd image tapped');
},
behavior: HitTestBehavior.translucent,
child:
Image.asset('images/petal-square.png', height: 250)),
),
),
Center(
child: RotationTransition(
turns: Tween(begin: 0.0, end: 0.4).animate(
new CurvedAnimation(
parent: rotationController,
curve: Curves.decelerate,
reverseCurve: Curves.decelerate)),
child: Image.asset('images/petal-square.png', height: 400),
),
),
Center(
child: RotationTransition(
turns: Tween(begin: 0.0, end: 0.6).animate(
new CurvedAnimation(
parent: rotationController,
curve: Curves.decelerate,
reverseCurve: Curves.decelerate)),
child: Image(
image: AssetImage('images/petal-square.png'),
),
),
),
Center(
child: RotationTransition(
turns: Tween(begin: 0.0, end: 0.8).animate(
new CurvedAnimation(
parent: rotationController,
curve: Curves.decelerate,
reverseCurve: Curves.decelerate)),
child: Image.asset('images/petal-square.png', height: 200),
),
),
Center(
child: GestureDetector(
onTap: () {
//rotationController.forward(from: 0.0);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PFMenuScreen(),
),
);
},
behavior: HitTestBehavior.translucent,
child: Image(
height: 100.0,
width: 100.0,
image: AssetImage('images/centre.png'),
),
),
),
],
),
),
),
);
}
}
Есть ли способ обнаружить постукивания по непрозрачным изображениям в стеке?
Приветствия