Flutter之ListItem支持点击态背景色

上一篇,我们实现了普通控件的点击态背景色(无论点击快慢都有背景色变化)。但是,当我将其应用到ListItem时,出现错误。原因不知,猜测是与item复用有关。

然后我尝试使用AnimatedContainer,可以做到按下和松开时背景色变化。正如上一篇所说,AnimatedContainer无法实现快速按下松开后的背景色变化,因此,我决定参考AnimatedContainer源码实现了ListItem点击态背景色。

区别是:widget和state需继承特殊的基类,而非普通的StatefulWidget和State。

enum WidgetState { None, Down, Up, Cancel }

class _ListItem extends ImplicitlyAnimatedWidget {
  final VoidCallback onPressed;

  _ListItem({
    @required this.onPressed,
  }) : super(duration: Duration(milliseconds: 150));

  @override
  _ListItemState createState() => _ListItemState();
}

class _ListItemState extends AnimatedWidgetBaseState<_ListItem> {
  var _state = WidgetState.None;
  Animation<Color> _animation;

  @override
  void initState() {
    super.initState();
    // 必须放在initState,因为controller在基类的initState中初始化
    _animat
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值