}
}
复制代码

也算是非常简单。

代码所在位置

封装之后的代码所在

/wechat_flutter/lib/ui/view/shake_view.dart

然后项目中头像调用啪一啪的地方在

/wechat_flutter/lib/ui/message_view/msg_avatar.dart

大家可以去看下具体是怎么调用和封装的;

封装后的代码

import ‘dart:math’;

import ‘package:flutter/material.dart’;

/// 封装之后的拍一拍
class ShakeView extends StatefulWidget {
final Widget child;

ShakeView({
this.child,
});

_ShakeViewState createState() => _ShakeViewState();
}

class _ShakeViewState extends State
with SingleTickerProviderStateMixin {
Animation animation;
AnimationController controller;

initState() {
super.initState();

controller = AnimationController(
duration: const Duration(milliseconds: 500), vsync: this);
animation = TweenSequence([
//使用TweenSequence进行多组补间动画
TweenSequenceItem(tween: Tween(begin: 0, end: 10), weight: 1),
TweenSequenceItem(tween: Tween(begin: 10, end: 0), weight: 1),
TweenSequenceItem(tween: Tween(begin: 0, end: -10), weight: 1),
TweenSequenceItem(tween: Tween(begin: -10, end: 0), weight: 1),
]).animate(controller);
controller.forward();
}

Widget build(BuildContext context) {
return AnimateWidget(animation: animation, child: widget.child);
}

dispose() {
controller.dispose();
super.dispose();
}
}

class AnimateWidget extends AnimatedWidget {
final Widget child;

AnimateWidget({Animation animation, this.child})
super(listenable: animation);

@override
Widget build(BuildContext context) {
final Animation animation = listenable;
var result = Transform(
transform: Matrix4.rotationZ(animation.value * pi / 180),
alignment: Alignment.bottomCenter,
child: new ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(5)),
child: this.child,
),
);
return result;
}
}
复制代码

调用例子

这个child就是你要啪一啪之后抖动的widget内容

new ShakeView(

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。

不断奔跑,你就知道学习的意义所在!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-7xFzfYrd-1712758896977)]

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐