利用flutter实现炫酷的list
作者:小华坚决上王者 发布时间:2022-08-02 01:15:01
前言
使用了flutter一段时间,越来越喜欢flutter了,flutter比我们想象中的强大。这篇文章介绍了怎么使用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


猜你喜欢
- ListView是android中最常用的控件之一。 在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率! 本dem
- 1. 实验目的: 使用线程池的时候,有时候需要考虑服务器的最大线程数目和程序最快
- android的快捷方式比较简单,就是发一个系统的广播,然后为快捷方式设置Intent---package com.xikang.andro
- 目录前沿快速开始引入依赖定义接口配置类开始调用json序列化接口层面指定header:指定Encoder跟Decoder使用 * 注解详解@
- 一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮
- 一、文件上传的必要前提A form 表单的 enctype 取值必须是:multipart/form-data(默认值是:applicati
- 指纹识别作为最新兴起的用户身份验证机制,已经被越来越多的应用程序所采用,相比传统的密码九宫格等验证方法,指纹识别更加安全,如今越来越多的安卓
- GSYVideoPlayerGSYVideoPlayer官方地址GSYVideoPlayer 一个基于IJkPlayer的播放器支持调节声音
- 老风格,废话不多说了,直接给大家贴java代码了。代码如下:package com.zzw.getPhoneInfos;import and
- 前言老规矩,还是从最简单粗暴的开始。那么多简单算简单?多粗暴算粗暴?我告诉你可以不写一句代码,你信吗?直接把一个文件往IIS服务器上一扔,就
- WebBrowser是C#中非常实用的一个控件,本文以实例形式分析了WebBrowser的用法,供大家参考。具体分析如下:一、WebBrow
- 题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数例如在数组{7
- 1.准备工作首先实现识别数字等字符,我们要知道需要采用OCR (Optical Character Recognition,光学字符识别)来
- 1、使用FileStream读写文件 文件头:using System;using System.Collections.Gene
- 执行引擎也只有几个概念, JVM方法调用和执行的基础数据结构是 栈帧, 是内存区域中 虚拟机栈中的栈元素, 每一个方法的执行就对应着一个栈帧
- 本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Coll
- 本文实例讲述了Android编程之canvas绘制各种图形的方法。分享给大家供大家参考,具体如下:1、首先说一下canvas类:Class
- 在项目中经常要用到将字符串解析成Locale,但是没有一个比较好用的类。java本身提供了3个构造函数,但是实际使用过程中,需要自己解析,比
- 介绍随着当今处理器中可用的核心数量的增加, 随着对实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行。 Java 提供了自己的多线
- 相应的类库可在我的资源页面中找到,关于类成员的说明可通过对象浏览器查看函数说明Imports BitOperatorLibrary.Shif