iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >flutter如何实现带删除动画的listview功能
  • 389
分享到

flutter如何实现带删除动画的listview功能

2023-06-15 04:06:21 389人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关Flutter如何实现带删除动画的listview功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。个人开发app中,需要开发一个带有删除功能的ListView效果如下需求动画

这篇文章将为大家详细讲解有关Flutter如何实现带删除动画的listview功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

个人开发app中,需要开发一个带有删除功能的ListView

效果如下

flutter如何实现带删除动画的listview功能

需求动画分析

列表可以滚动用listView,

有两个动画,第一个动画是透明度变化,第二个是size变化

是顺序执行

实现过程

新建一个动画页面进行单独控制

记得用statefulwidget类,这第二个动画之间涉及到页面刷新切换widget

记得with tickerproviderstatemixin 这个是动画类状态管理的必备

class AnimationListItem extends StatefulWidget {  AnimationListItem();  @override  _AnimationListItemState createState() => _AnimationListItemState();}class _AnimationListItemState extends State<AnimationListItem>    with TickerProviderStateMixin {  @override  Widget build(BuildContext context) {    // TODO: implement build    return Container();  }}

动画流程

声明

//控制器  AnimationController lucencyController;  AnimationController sizeController;// 动画  Animation<double> lucencyAnimation;  Animation<double> sizeAnimation;

初始化

///必须在initstate这个生命周期进行初始化  @override  void initState() {    // TODO: implement initState    super.initState();    lucencyController =        AnimationController(vsync: this, duration: Duration(milliseconds: 150));    lucencyAnimation = Tween(begin: 1.0, end: 0.0).animate(        CurvedAnimation(parent: lucencyController, curve: Curves.easeOut));    sizeController =        AnimationController(vsync: this, duration: Duration(milliseconds: 250));    sizeAnimation = Tween(begin: 1.0, end: 0.0).animate(        CurvedAnimation(parent: sizeController, curve: Curves.easeOut));  }

注销

@override  void dispose() {    lucencyController.dispose();    sizeController.dispose();    super.dispose();  }

最后内容呈现

class AnimationListItem extends StatefulWidget {  AnimationListItem();  @override  _AnimationListItemState createState() => _AnimationListItemState();}class _AnimationListItemState extends State<AnimationListItem>    with TickerProviderStateMixin {  AnimationController lucencyController;  AnimationController sizeController;  Animation<double> lucencyAnimation;  Animation<double> sizeAnimation;  bool isChange = false;  @override  void initState() {    // TODO: implement initState    super.initState();    lucencyController =        AnimationController(vsync: this, duration: Duration(milliseconds: 150));    lucencyAnimation = Tween(begin: 1.0, end: 0.0).animate(        CurvedAnimation(parent: lucencyController, curve: Curves.easeOut));    sizeController =        AnimationController(vsync: this, duration: Duration(milliseconds: 250));    sizeAnimation = Tween(begin: 1.0, end: 0.0).animate(        CurvedAnimation(parent: sizeController, curve: Curves.easeOut));  }  @override  Widget build(BuildContext context) {    return buildItemBox();  }  @override  void dispose() {    lucencyController.dispose();    sizeController.dispose();    super.dispose();  }  Widget buildItemBox() {    return isChange        ? SizeTransition(            axis: Axis.vertical,            sizeFactor: sizeAnimation,            child: Container(              height: duSetWidth(100),              width: double.infinity,            ),          )        : FadeTransition(            opacity: lucencyAnimation,            child: Container(              alignment: Alignment.center,              padding: EdgeInsets.only(                left: duSetWidth(15),                right: duSetWidth(15),              ),              height: duSetWidth(100),              child: buildRow(),            ),          );  }  Widget buildRow() {    ///设置显示的样式    bool _isSub = false;    Color _isSubColor = Color.fromRGBO(245, 77, 130, 1);    Color _isSubBackColor = Colors.transparent;    Widget isSubWidget = InkWell(      child: Container(        alignment: Alignment.center,        width: duSetWidth(55),        height: duSetWidth(28),        decoration: BoxDecoration(          color: _isSubBackColor,          border: Border.all(color: _isSubColor),          borderRadius: BorderRadius.circular(duSetWidth(15)),        ),        child: Text(          '+ 书架',          style: TextStyle(            color: _isSubColor,          ),        ),      ),      onTap: () {        if (_isSub)          print('dasd');        else          print('dsada');      },    );    return Row(      mainAxisAlignment: MainAxisAlignment.spaceBetween,      children: [        Container(          width: duSetWidth(60),          height: duSetWidth(80),          child: ClipRRect(            borderRadius: BorderRadius.circular(duSetWidth(5)),            child: Image.network(              'https://gimg2.baidu.com/image_search/src=Http%3A%2F%2F00.minipic.eastday.com%2F20170307%2F20170307164725_114ea3c04f605e59bd10699f37870267_13.jpeg&refer=http%3A%2F%2F00.minipic.eastday.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1623596389&t=946dba98698d8d67d773ea8f7af55f45',              fit: BoxFit.cover,            ),          ),        ),        Container(          width: duSetWidth(155),          height: duSetWidth(80),          child: Column(            mainAxisAlignment: MainAxisAlignment.center,            children: [              Container(                height: duSetWidth(25),                alignment: Alignment.centerLeft,                width: double.infinity,                child: Text(                  '这是标题',                  maxLines: 1,                  overflow: TextOverflow.ellipsis,                  style: TextStyle(                    color: Colors.white,                    fontSize: duSetFontSize(16),                  ),                ),              ),              Container(                height: duSetWidth(20),                alignment: Alignment.centerLeft,                width: double.infinity,                child: Text(                  '这是副标题',                  maxLines: 1,                  overflow: TextOverflow.ellipsis,                  style: TextStyle(                    color: Color.fromRGBO(162, 168, 186, 1),                    fontSize: duSetFontSize(14),                  ),                ),              ),            ],          ),        ),        Container(          width: duSetWidth(100),          height: duSetWidth(80),          padding: EdgeInsets.only(            top: duSetWidth(4),          ),          alignment: Alignment.center,          child: Row(            mainAxisAlignment: MainAxisAlignment.spaceBetween,            children: [              isSubWidget,              InkWell(                onTap: () async {                  await lucencyController.forward();                  setState(() {                    isChange = true;                    sizeController.forward();                  });                },                child: Container(                  alignment: Alignment.center,                  width: duSetWidth(35),                  height: duSetWidth(28),                  decoration: BoxDecoration(                    border: Border.all(                      color: Color.fromRGBO(113, 118, 140, 1),                    ),                    borderRadius: BorderRadius.circular(duSetWidth(15)),                  ),                  child: Icon(                    Icons.delete,                    color: Color.fromRGBO(113, 118, 140, 1),                    size: duSetFontSize(16),                  ),                ),              ),            ],          ),        )      ],    );  }}

dusetwidth是我自定义的函数可以不用管,自己替换

下列是在页面使用

class HistoryPage extends StatefulWidget {  @override  _HistoryPageState createState() => _HistoryPageState();}class _HistoryPageState extends State<HistoryPage> {  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(),      body: ListView(        children: [          AnimationListItem(),          AnimationListItem(),          AnimationListItem(),          AnimationListItem(),        ],      ),    );  }  /// 构造appbar  Widget buildAppabr() {    return AppBar(      backgroundColor: Color.fromRGBO(33, 39, 46, 1),      brightness: Brightness.dark,      centerTitle: true,      title: Text(        '浏览记录',        style: TextStyle(          fontSize: duSetFontSize(16),          color: Colors.white,        ),      ),      leading: IconButton(        icon: Icon(          Icons.arrow_back_iOS,          color: Colors.white,          size: duSetFontSize(18),        ),        onPressed: () {          Get.back();        },      ),    );  }}

这个我原来是准备使用animatedList来进行实现的,最后发现,animatedList里面只能设置移除动画,不能实现补位动画

第一个透明度的动画就是移除动画,第二个size变化就是补位动画,

animatedList没有补位,所以下方list直接移动上去会显得非常突兀,我看了看源码,修改较为麻烦。所以就直接用动画变换来写

这个List内的内容,并不是直接移除,而是替换成高低为0 的一个盒子

关于“flutter如何实现带删除动画的listview功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: flutter如何实现带删除动画的listview功能

本文链接: https://www.lsjlt.com/news/277566.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • flutter如何实现带删除动画的listview功能
    这篇文章将为大家详细讲解有关flutter如何实现带删除动画的listview功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。个人开发app中,需要开发一个带有删除功能的ListView效果如下需求动画...
    99+
    2023-06-15
  • flutter实现带删除动画的listview功能
    个人开发app中,需要开发一个带有删除功能的ListView 效果如下 需求动画分析 列表可以滚动用listView, 有两个动画,第一个动画是透明度变化,第二个是size变化 是...
    99+
    2024-04-02
  • 如何实现Flutter动画
    这篇文章主要为大家展示了“如何实现Flutter动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现Flutter动画”这篇文章吧。动画中的三大核心为了能够实现动画效果,必须提供下面的三个...
    99+
    2023-06-04
  • react如何实现删除功能
    这篇文章主要介绍“react如何实现删除功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react如何实现删除功能”文章能帮助大家解决问题。react实现删除功能的方法:1、给li标签添加一个点击...
    99+
    2023-07-04
  • SpringMVC RESTFul删除功能如何实现
    这篇文章主要讲解了“SpringMVC RESTFul删除功能如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC RESTFul删除功能如何实现”吧...
    99+
    2023-06-30
  • Android实现自定义带删除功能的EditText实例
    1.说明自定义带删除功能的EditText有两种方法,第一种是用组合视图的方法,即在一个view视图里面左侧放置一个EditText,右侧放置一个ImageView,但是这样增加了视图的层次,而且对输入内容的长度要做一定的处理。第二种是重新...
    99+
    2023-05-31
    android edittext roi
  • Flutter listview如何实现下拉刷新上拉加载更多功能
    目录下拉刷新 RefreshIndicator 上拉加载更多 总结:下拉刷新 在Flutter中系统已经为我们提供了google material design的刷新功能 , 样式...
    99+
    2024-04-02
  • vue2如何实现左滑删除功能
    这篇文章主要介绍vue2如何实现左滑删除功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!左滑删除,很多UI框架里有,比如Mint-UI, Muse-UI等,一开始我们就是用的这两个...
    99+
    2024-04-02
  • Flutter如何轻松实现动态更新ListView浅析
    目录前言数据集触发器展示视图完整代码总结前言 在 App 开发过程中,ListView 是 比较很常见的控件,用来处理 列表类的数据展示。当然 Flutter 也是支持的,由于 Fl...
    99+
    2024-04-02
  • Android Flutter如何实现3D动画效果
    这篇文章主要讲解了“Android Flutter如何实现3D动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter如何实现3D动画效果”吧...
    99+
    2023-06-29
  • Android开发中如何实现一个滑动删除功能
    这篇文章将为大家详细讲解有关Android开发中如何实现一个滑动删除功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先看一下效果activity_lookstaff.xml<Rela...
    99+
    2023-05-31
    android 滑动删除 roi
  • 如何用Vue.js实现动态添加、删除选题功能
    这篇“如何用Vue.js实现动态添加、删除选题功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用Vue.js实现动态添...
    99+
    2023-07-04
  • thinkphp如何实现全选和删除功能
    这篇文章主要讲解了“thinkphp如何实现全选和删除功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp如何实现全选和删除功能”吧!一、全选功能实现在视图文件中,我们需要添加...
    99+
    2023-07-05
  • java如何实现删除和添加功能
    在Java中实现删除和添加功能,可以使用集合类来存储数据,并通过相应的方法实现删除和添加操作。添加功能可以使用集合类的`add()`...
    99+
    2023-08-30
    java
  • 怎么在Android中利用ListView实现一个侧滑删除功能
    本篇文章给大家分享的是有关怎么在Android中利用ListView实现一个侧滑删除功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需求:listView可以侧滑item,展...
    99+
    2023-05-31
    android listview roi
  • JavaScript动态生成带删除行功能的表格
    本文实例为大家分享了javascript实现动态生成表格/删除行的具体代码,供大家参考,具体内容如下 动态生成一个带删除行功能的表格: 实现思路 1、获取表格<tbody>...
    99+
    2024-04-02
  • php如何实现留言板删除功能
    本篇内容介绍了“php如何实现留言板删除功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现留言板删除功能的方法:1、创建updat...
    99+
    2023-06-25
  • jQuery如何实现的简单动态添加、删除表格功能
    这篇文章将为大家详细讲解有关jQuery如何实现的简单动态添加、删除表格功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先来看看运行效果:具体代码如下:<!DOC...
    99+
    2024-04-02
  • 微信小程序如何实现向左滑动删除功能
    这篇文章将为大家详细讲解有关微信小程序如何实现向左滑动删除功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 向左滑动删除功能的实现实现效果图:实现代码:1、w...
    99+
    2024-04-02
  • CSS3 如何实现穿梭星空动画功能
    本篇内容主要讲解“CSS3 如何实现穿梭星空动画功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3 如何实现穿梭星空动画功能”吧!实现效果:html<canvas id=...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作