我有一个Flutter容器,它可以通过GestureDetector来切换它的正面和背面。该容器使用Transform方法进行动画,围绕Y轴旋转以在正面和背面之间切换。
我遇到的问题是容器背面的文本没有正确对齐。文本看起来像是镜像的。我已经尝试更改文本小部件的textDirection属性,以从右到左或从左到右对齐文本,但它不起作用。
是否有其他方法可以在容器旋转后正确对齐容器背面的文本?
以下是我的当前代码:
import 'dart:math';
import 'package:flutter/material.dart';
class FlipCard extends StatefulWidget {
const FlipCard({Key? key}) : super(key: key);
@override
State<FlipCard> createState() => _FlipCardState();
}
class _FlipCardState extends State<FlipCard>
with SingleTickerProviderStateMixin {
bool _isFrontVisible = true;
late AnimationController _flipAnimationController;
late Animation<double> _flipAnimation;
@override
void initState() {
super.initState();
_flipAnimationController =
AnimationController(vsync: this, duration: Duration(milliseconds: 500));
_flipAnimation =
Tween<double>(begin: 0.0, end: 1.0).animate(_flipAnimationController);
}
@override
void dispose() {
_flipAnimationController.dispose();
super.dispose();
}
void _toggleCard() {
if (_isFrontVisible) {
_flipAnimationController.forward();
} else {
_flipAnimationController.reverse();
}
_isFrontVisible = !_isFrontVisible;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GestureDetector(
onTap: () => _toggleCard(),
child: AnimatedBuilder(
animation: _flipAnimation,
builder: (context, child) {
final value = _flipAnimation.value;
final perspective = 0.002;
final angle = value * pi;
final isFrontFacing = angle <= pi / 2;
return Transform(
transform: Matrix4.identity()
..setEntry(3, 2, perspective)
..rotateY(angle),
alignment: Alignment.center,
child: Container(
height: 200,
width: 300,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: isFrontFacing ? Colors.white : Colors.blueGrey,
),
child: Center(
child: Text(
isFrontFacing ? "Vorderseite" : "Rückseite",
style: TextStyle(
fontSize: 20,
color: isFrontFacing ? Colors.black : Colors.white,
),
textDirection:
isFrontFacing ? TextDirection.rtl : TextDirection.ltr,
),
),
),
);
},
),
),
),
);
}
}
提前感谢您的帮助!
1条答案
按热度按时间qxsslcnc1#
转换卡内的文本小部件(用于“背面”)是一种可能性。
下面我们将前面和后面的卡拆分成它们自己的Widget,然后根据
isFrontFacing
调用任何一个Widget。在您的
_FlipCardState
中,我们将您的最终child:
替换为: