Flutter中多个FlipCard的动态排布问题

问题描述

在使用Flutter的FlipCard组件后发现了一些问题,FlipCard组件会预留位置,预留的位置取决于正反翻面的最大一面。

如上图,我的两个单词卡片均使用的FlipCard组件,我的反面比正面长度要长,在两个组件均展示正面时,会默认为翻转后的反面保留一段距离,但我希望的效果是,两个组件的间距可以随着翻转自定义调整

解决方法

在查看了FlipCard的源码后,我自定义了FlipCard,重新定义的FilpCard代码如下:

java 复制代码
import 'package:flutter/material.dart';  
import 'dart:math';  
  
class AdjustFlipCard extends StatefulWidget {  
final Widget front;  
final Widget back;  
final int speed;  
  
AdjustFlipCard({  
Key? key,  
required this.front,  
required this.back,  
this.speed = 500,  
}) : super(key: key);  
  
@override  
_AdjustFlipCardState createState() => _AdjustFlipCardState();  
}  
  
class _AdjustFlipCardState extends State<AdjustFlipCard> with SingleTickerProviderStateMixin {  
late AnimationController _controller;  
late Animation<double> _rotation;  
  
@override  
void initState() {  
super.initState();  
_controller = AnimationController(  
duration: Duration(milliseconds: widget.speed),  
vsync: this,  
);  
_rotation = Tween<double>(begin: 0.0, end: 1.0).animate(  
CurvedAnimation(parent: _controller, curve: Curves.linear),  
);  
}  
  
void _toggleCard() {  
if (_controller.isDismissed) {  
_controller.forward();  
} else {  
_controller.reverse();  
}  
}  
  
@override  
Widget build(BuildContext context) {  
return GestureDetector(  
onTap: _toggleCard,  
child: AnimatedBuilder(  
animation: _rotation,  
builder: (context, child) {  
final isFront = _controller.value < 0.5;  
final transform = Matrix4.identity()..setEntry(3, 2, 0.001);  
transform.rotateY(_controller.value * pi);  
  
return Transform(  
transform: transform,  
alignment: Alignment.center,  
child: isFront ? widget.front : Transform(  
transform: Matrix4.identity()..rotateY(pi),  
alignment: Alignment.center,  
child: widget.back,  
),  
);  
},  
),  
);  
}  
  
@override  
void dispose() {  
_controller.dispose();  
super.dispose();  
}  
}

在自定义的AdjustFlipCard中,仍然定义了正面front,反面back,保留了翻转的动画,调用该卡片,调用代码示例如下:

java 复制代码
return AdjustFlipCard(  
key: cardKey,  
front: frontCard,  
back: backCard,  
);
Widget frontCard =Card();  //定义你的frontCard样式
Widget backCard =Card(); //定义你的backCard样式

实现效果

相关推荐
Tigshop开源商城2 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
Tigshop开源商城4 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
不会敲代码14 小时前
手写 Zustand:三十分钟带你搞懂状态管理库的核心原理
前端·javascript·源码
神奇的程序员4 小时前
重构了自己5年前写的截图插件
前端·javascript·架构
REDcker4 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
UXbot5 小时前
一人独立交付 UI + 前端:AI 驱动 UI 设计工具的五大功能模块深度评测
前端·低代码·ui·设计模式·交互
kobesdu5 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
诚实可靠王大锤5 小时前
React Native 输入框与按钮焦点冲突解决方案(rn版本0.70.3)
前端·javascript·react native·react.js
neo_Ggx236 小时前
Maven 版本管理详解:SNAPSHOT、Release 与 Nexus 仓库的区别和影响
java·maven
matlabgoodboy6 小时前
软件开发定制小程序APP帮代做java代码代编写C语言设计python编程
java·c语言·小程序