利用flutter实现炫酷的list

作者:小华坚决上王者 时间:2022-08-02 01:15:01 

前言

使用了flutter一段时间,越来越喜欢flutter了,flutter比我们想象中的强大。这篇文章介绍了怎么使用flutter来展示一个很漂亮的list,先看下效果图。

利用flutter实现炫酷的list

样式还是很漂亮的,下面我们一步一步完成这个小项目。

开发前准备

我们会用到加载网络图片FadeInImage这么个widget,需要一个loading的icon,所以需要在pubspec.yaml里配置下静态资源,只有配置过的静态资源才可以在项目中使用


assets:
- assets/images/

需要mock一些假数据和一些常用的常量,所以专门建了个constant.dart来管理


assets:
- assets/images/

appBar部分

appBar需要透明的背景这样才能将后面的图片展示出来,看起来很像沉浸式。

需要将elevations设置为0,这样就可以取消安卓特有的阴影效果,下面是代码:


Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
title: Text(
'flutter awesome list',
style: TextStyle(
color: Colors.white,
),
),
),
body: HomeBody(),
);

Banner部分

我们需要使用Transform.translate()这个weidget来将Banner部分向上移动,让appBar全部展示在banner上面,这里给的offset为offset: Offset(0, -56) ,56为appBar的高度

下面的斜切造型需要使用ClipPath()来完成,用法有点像canvas,代码如下:


class MyClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path p = Path();
p.lineTo(size.width, 0.0);
p.lineTo(size.width, size.height / 4.75);
p.lineTo(0.0, size.height / 3.75);
p.close();
return p;
}

@override
bool shouldReclip(CustomClipper oldClipper) {
return true;
}
}

用户信息的展示用的widget是ListTile和CircleAvatar,用法也比较简单,我直接贴代码了:


ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage(CONSTANT.userAvatar),
),
title: Text(
CONSTANT.userName,
style: CONSTANT.defaultTextStyle,
textScaleFactor: 1.5,
),
subtitle: Text(
CONSTANT.userProfile,
style: CONSTANT.defaultTextStyle,
),
)

列表展示部分

列表的展示使用的是ListView.builder() ,两个必传参数itemCount和itemBuilder,前者控制列表的数量,后者控制item的展示,因为item的样式还是比较多的,所以抽离成单独的StatelessWidget组件:AwesomeListItem

我们用InkWell组件将AwesomeListItem包裹,InkWell是flutter自带的组件,这个组件的特点是点击的时候带有水墨绽开的效果。点击item的时候,我们使用Navigator.push跳转到详情页面

图片的展示,我们还是使用的FadeInImage,这种渐入效果的用户体验还是很不错的。然后再使用Hero()来包裹FadeInImage,这样能在页面跳转的时候提供图片之间的过渡动画,很是强大和炫酷


Hero(
tag: index,
child: FadeInImage(
image: NetworkImage(data.image),
fit: BoxFit.cover,
placeholder: AssetImage('assets/images/loading.gif'),
),
)

详情页面

最后就是详情页面的展示,这个页面并没有写什么样式,展示了从列表页跳转过来时,图片的过渡效果,有兴趣的同学可以丰富下页面的样式和内容

感兴趣的同学可以看下源码xch1029/awesomelist

来源:https://juejin.im/post/5d0203ca5188256aa76bc38e

标签:flutter,list
0
投稿

猜你喜欢

  • Android ViewPager2 使用及自定义指示器视图实现

    2022-06-16 09:35:26
  • C# SQLite执行效率的优化教程

    2021-07-11 00:11:41
  • java实现网站微信扫码支付

    2023-06-18 18:58:19
  • java制作简单验证码功能

    2022-12-07 02:12:46
  • Android 仿京东、拼多多商品分类页的示例代码

    2023-05-02 13:55:30
  • 一文搞懂Android RecyclerView点击展开、折叠效果的实现代码

    2023-02-17 14:52:24
  • C#中的预处理器指令详解

    2022-05-04 21:22:32
  • Java ArrayList深入源码层分析

    2021-10-18 04:12:31
  • C#获取CPU编号的方法

    2022-01-05 10:57:37
  • C#中静态方法和实例化方法的区别、使用

    2023-08-25 20:49:33
  • Java 多层嵌套JSON类型数据全面解析

    2022-07-18 05:13:05
  • Java数据结构学习之树

    2022-01-19 23:40:58
  • SpringBoot一个非常蛋疼的无法启动的问题解决

    2023-12-12 15:24:36
  • Netty分布式pipeline管道传播outBound事件源码解析

    2022-10-17 23:43:06
  • JAVA内部类示例详解及练习

    2023-04-05 06:42:39
  • Java基于对象流实现银行系统

    2023-09-10 02:54:21
  • Android模拟实现网易新闻客户端

    2022-09-03 18:19:11
  • SpringMVC拦截器配置及运行流程解析

    2023-03-30 15:38:57
  • Java设计模式之模板方法模式Template Method Pattern详解

    2023-09-21 12:28:04
  • Android实现随机圆形云标签效果

    2023-02-23 02:10:42
  • asp之家 软件编程 m.aspxhome.com