范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Flutter编写漂亮的动画,AndroidiOS可以运行建议收藏

  本头条核心宗旨
  欢迎来到「技术刚刚好」作者,「技术刚刚好」是个人维护,每天至少更新一篇Flutter技术文章,实时为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。技术刚刚好经历
  近几年,移动端跨平台开发技术层出不穷,从Facebook家的ReactNative,到阿里家WEEX,前端技术在移动端跨平台开发中大展身手,技术刚刚好作为一名Android开发,经历了从Reactjs到Vuejs的不断学习。而在2018年,我们的主角变成了Flutter,这是Goolge开源的一个移动端跨平台解决方案,可以快速开发精美的移动App。希望跟大家一起学习,一起进步!本文核心要点
  今天这篇文章介绍一些关于flutter的知识点,最近也在研究一些动画,这里给大家分享一些我学习的动画,代码可以直接拿过去用。
  第一个动画ColorizeAnimated。
  flutter漂亮的动画import "package:flutter/material.dart"; import "dart:async";  class ColorizeAnimatedTextKit extends StatefulWidget {   final List text;   final TextStyle textStyle;   //表示从一个时间点到另一个时间点的时间差   final Duration speed;   final Duration pause;   final VoidCallback onTap;   final VoidCallback onFinished;   final void Function(int, bool) onNext;   final AlignmentGeometry alignment;   final TextAlign textAlign;   final bool isRepeatingAnimation;   final bool repeatForever;   final double totalRepeatCount;   final List colors;   const ColorizeAnimatedTextKit(       {Key key,       @required this.text,       this.textStyle,       @required this.colors,       this.speed,       this.pause,       this.onTap,       this.onNext,       this.onFinished,       this.alignment = AlignmentDirectional.topStart,       this.textAlign = TextAlign.start,       this.totalRepeatCount = 3,       this.repeatForever = false,       this.isRepeatingAnimation = true})       : super(key: key);    @override   _ColorizeTextState createState() => _ColorizeTextState(); }  class _ColorizeTextState extends State     with TickerProviderStateMixin {   AnimationController _controller;   Animation _colorShifter, _fadeIn, _fadeOut;   double _tuning;   Duration _speed;   Duration _pause;   List _texts = [];   int _index;   bool _isCurrentlyPausing = false;   int _currentRepeatCount;   @override   void initState() {     super.initState();     _speed = widget.speed ?? const Duration(milliseconds: 200);     _pause = widget.pause ?? const Duration(milliseconds: 1000);     _index = -1;     _currentRepeatCount = 0;     widget.text.forEach((text) {       _texts.add({"text": text, "speed": _speed, "pause": _pause});     });     _nextAnimation();   }   @override   void dispose() {     _controller?.dispose();     super.dispose();   }    @override   Widget build(BuildContext context) {     return GestureDetector(       onTap: widget.onTap,       child: _isCurrentlyPausing || !_controller.isAnimating           ? Text(               _texts[_index]["text"],               style: widget.textStyle,               textAlign: widget.textAlign,             )           : AnimatedBuilder(               animation: _controller,               builder: (BuildContext context, Widget child) {                 Shader linearGradient = LinearGradient(colors: widget.colors)                     .createShader(                         Rect.fromLTWH(0.0, 0.0, _colorShifter.value, 0.0));                 return Opacity(                   opacity:                       _fadeIn.value != 1.0 ? _fadeIn.value : _fadeOut.value,                   child: Text(                     _texts[_index]["text"],                     style: widget.textStyle != null                         ? widget.textStyle.merge(TextStyle(                             foreground: Paint()..shader = linearGradient))                         : widget.textStyle,                     textAlign: widget.textAlign,                   ),                 );               },             ),     );   }    void _nextAnimation() {     final bool isLast = _index == widget.text.length - 1;     _isCurrentlyPausing = false;     // Handling onNext callback     if (_index > -1) {       widget.onNext?.call(_index, isLast);     }     if (isLast) {       if (widget.isRepeatingAnimation &&           (widget.repeatForever ||               _currentRepeatCount != (widget.totalRepeatCount - 1))) {         _index = 0;         if (!widget.repeatForever) {           _currentRepeatCount++;         }       } else {         widget.onFinished?.call();         return;       }     } else {       _index++;     }     if (mounted) setState(() {});     _controller = AnimationController(       duration: _texts[_index]["speed"] * _texts[_index]["text"].length,       vsync: this,     );     _tuning = (300.0 * widget.colors.length) *         (widget.textStyle.fontSize / 24.0) *         0.75 *         (_texts[_index]["text"].length / 15.0);     _fadeIn = Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(         parent: _controller,         curve: const Interval(0.0, 0.1, curve: Curves.easeOut)));     _fadeOut = Tween(begin: 1.0, end: 1.0).animate(CurvedAnimation(         parent: _controller,         curve: const Interval(0.9, 1.0, curve: Curves.easeIn)));     _colorShifter =         Tween(begin: 0.0, end: widget.colors.length * _tuning).animate(             CurvedAnimation(                 parent: _controller,                 curve: const Interval(0.0, 1.0, curve: Curves.easeIn)))           ..addStatusListener(_animationEndCallback);     _controller?.forward();   }   void _animationEndCallback(state) {     if (state == AnimationStatus.completed) {       _isCurrentlyPausing = true;       Timer(_texts[_index]["pause"], _nextAnimation);     }   } }
  谢谢观看技术刚刚好的文章,技术刚刚好是个人维护,每天至少更新一篇Flutter技术文章,为大家播报Flutter最新消息。如果你刚好也在关注Flutter这门技术,那就跟我一起学习进步吧,你的赞,收藏,转发是对我个人最大的支持,维护不易,欢迎关注。

华为向邮政投诉了联邦快递,为什么邮政没有回复?2019年5月23日,据媒体报道,美国联邦快递将2个由日本寄往中国的华为快递转运至美国,并试图将从越南及新加坡的快递也转运至美国。华为为此正式向中国邮政管理部门提起诉讼。很多人在质颜值or手感?我全要Lofree洛斐小翘机械键盘前言从去年在ZAKER拿到了我人生中第一把机械键盘(杜伽K330W),后面就时常关注这一品类,也体验过几把不同类型的,渐渐了解机械键盘这个圈子。极客们喜欢客制化,显然不适合我这黄毛百元出头,音质超出预期,尊客X22蓝牙耳机体验一写在最前如果稍为关注一下数码领域,就自然知道蓝牙耳机市场的竞争真的是异常激烈。不少耳机厂商为了抢占市场,纷纷推出多款蓝牙耳机。从入门到发烧级,从入耳式到骨传导式等,几乎覆盖了消费2022年5月份赛博朋克2077电脑配置推荐,让您体验次世代的夜之城赛博朋克2077赛博朋克2077是一款由CDProjektRED开发的动作角色类游戏,故事发生在夜之城,权力更迭和身体改造是这里不变的主题。玩家将扮演一名野心勃勃的雇佣兵,追求获得红米Note系列新机终于来了,搭载天玑8000高素质LCD屏幕自从Redmi的K系列发布之后,Redmi的Note系列很少有令人眼前一亮的性价比机型了,当今还在开卖的RedmiNote系列机型在性能层面都差强人意,不过RedmiNote系列马从6788元跌至2408元,鸿蒙系统512GIP68级防水,售价非常亲民在华为还没遇到芯片荒的问题之前,华为凭借着mate系列和华为P系列系列手机的出色表现,确实是有着和苹果和三星两个品牌相抗衡的综合实力,甚至一度做到了全球出货第一品牌。不过奈何华为受华为Mate50Pro即将发布,取代华为P60系列,华为发力了人们一直就在期待,华为在现在的大环境以及技术受限的背景下,能够带来怎样的全新产品,最新的手机有是否能够突破技术限制,能够支持5G网络的运行呢?在人们都在期待华为P60手机发布的时候那与众不同的弧线魅力,洛斐小翘暗夜蓝68键机械键盘评测键盘作为常用的外设之一,除了需要关注硬件参数与键位布局之外,还需要考虑外观造型等因素,目前市面上配置出色的机械键盘确实为数不少,只是在外观设计上比较固定单一,在观感上可能会让人感到一加Ace评测有颜有料的性能王牌是怎么炼成的?前不久,一加宣布未来将通过数字Ace双系列主攻性能赛道。其中,数字系列定位优雅强悍的性能旗舰,带来最极致的性能体验和高级的质感设计而全新的Ace系列,则定位为有颜有料的性能王牌,为菜鸟驿站如何赚钱快递驿站究竟赚不赚钱?看目前快递驿站遍地开花,显然是赚钱的,但是快递驿站赚的是小钱辛苦钱,妄想通过开快递驿站走上人生巅峰显然不可能,但是饱腹肯定没问题。快递驿站的盈利模式包括三个12022年第一季度中国手机处理器市场排行联发科第一大家平时看到的安卓手机基本上都是搭载高通骁龙处理器,搭载联发科处理器的手机并不是很多,事实上在国内手机市场,联发科处理器的市场占有率长期排名第一,而根据最新的统计数据,2022年第
电动车电池针刺测试到底有没有实际意义?国产品牌比亚迪成为8月最大赢家,以60508台月销成绩问鼎8月中国新能源乘用车销量冠军。其中王朝车系的旗舰轿车汉,代表中国品牌,持续冲击被合资品牌长期占据的豪华轿车市场,8月共计销或将有高性能版本全新三菱欧蓝德PHEV将于10月28日发布这是一个拼速度的时代全新一代欧蓝德才推出没多久,全新欧蓝德PHEV就要来了。全新欧蓝德PHEV的颜值能不能欣赏得来就是见仁见智的事儿了。向内收的格栅设计和分体式大灯的搭配十分亮眼,百公里加速6s内的激情你值得拥有威兰达高性能版试驾报告随着新能源的发展,目前国内纯电动车型也越来越受欢迎,虽说纯电动车销量逐步上升,但充电难的问题仍然没有解决。要么找不到充电桩,要么需要排队,相比之下,插电混动车型更加吃香。而说到插电定制工业一体机编程,是数控机床实现自动化操作的大脑在智能制造发展中,数控机床作为智能自动化装备重要的一员,已经成为现今零件加工制造的主要生产力。根据市场对数控机床日渐上涨的需求,对触控显示设备行业来说,也是又一新的市场机遇。数字化正确的安装方法和维护,对于充分发挥工业显示器性能有何作用?随着智能制造的发展,市场对于触控显示设备的需求越来越大。其中,工业显示器因其显示画面更加清晰精准,在工业检测使用场景中受到越来越多用户的欢迎和选择。而用户如何在选择产品之后,如何将心级服务万物智联的时代,你了解吗?最近各地实行限电,很多小伙伴已经切身体会了。因为我国发电主要以火电烧煤为主,所以国家要大力发展清洁能源。这几年我们能经常听到碳中和碳达峰政策,很大部分是能源问题,比如交通工具上,燃心级服务家中WiFi不好用?教你进行最优配置中国移动全家WiFi业务为用户提供了高规格路由器硬件及细致上门安装服务,我们在路由器出厂时为每台路由器的WiFi提供了最佳参数设置,但用户在使用过程中,会遇到一些特殊情况(包括是设各个手机厂商吹捧的线性马达,究竟有什么作用?安卓手机有个线性马达都能吹一下,手机线性马达就这么重要吗?那我们首先需要了解一下什么是线性马达。什么是手机马达?简单来说手机马达一般应用到手机上面的那个振动小马达,它主要作用是让手如何查看你的电脑支不支持Windows11?微软官方显示,Windows10用户可以免费升级到Windows11微软公布的最低系统要求CPU现代1Ghz64bit双核处理器内存4GB内存存储64GB硬盘显示器9英寸1366x电竞显示器GSync与AdaptiveSync要想了解GSync和FreeSync技术到底解决了什么问题?首先我们需要先了解一个概念,VSync,垂直同步。显示器刷新率和垂直同步(VSync)由于显卡每秒渲染的帧数和显示器每秒你会买单吗?新机型NintendoSwitchOLED10月8日正式发售7月6日任天堂官网突然公布了新机型NintendoSwitchOLEDModel。名字并不像大家猜测的Pro,而是叫SwitchOLED。那么这款新机型有什么值得期待的呢?我们先来