Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >flutter系列之:Material中的3D组件Card

flutter系列之:Material中的3D组件Card

原创
作者头像
程序那些事
发布于 2022-09-23 07:24:50
发布于 2022-09-23 07:24:50
63600
代码可运行
举报
文章被收录于专栏:程序那些事程序那些事
运行总次数:0
代码可运行

简介

除了通用的组件之外,flutter还提供了两种风格的特殊组件,其中在Material风格中,有一个Card组件,可以很方便的绘制出卡片风格的界面,并且还带有圆角和阴影,非常的好用,我们一起来看看吧。

Card详解

在详细讲解Card之前,我们考虑一下什么时候会用到Card?

一提到Card大家第一印象就是名片,在名片中描述了一个人的相关信息,比如姓名,电话和邮箱等。而Card就是将一组相关的信息放在一起呈现的组件。

我们来看下Card的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Card extends StatelessWidget 

可以看到Card是一个无状态的Widget,Card的构造函数需要传入比较多的参数,下面是Card的构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const Card({
    Key? key,
    this.color,
    this.shadowColor,
    this.elevation,
    this.shape,
    this.borderOnForeground = true,
    this.margin,
    this.clipBehavior,
    this.child,
    this.semanticContainer = true,
  })

color表示的是Card的背景颜色,如果不设置的话,会使用ThemeData.cardTheme中指定的color,如果CardTheme.color也是空的话,那么会使用ThemeData.cardColor来替代。

shadowColor表示的是Card阴影的颜色,如果不设置的话,会使用ThemeData.cardTheme的shadowColor来代替,如果CardTheme.shadowColor也是空的话,那么会使用ThemeData.shadowColor来替代。

elevation是Card在Z轴的位置,通过设置这个值,我们可以控制Card下面shadow的大小。

shape是Card的形状,它是一个ShapeBorder对象,有很多已知的实现,比如CircleBorder,RoundedRectangleBorder,ContinuousRectangleBorder,BeveledRectangleBorder等。

borderOnForeground表示是否将Card的border在child之前展示。

clipBehavior是Card的裁剪规则。margin是card周围的空白部分。

semanticContainer是一个bool值,表示Card中的child是否都具有相同的semantic,或者说他们的类型是一致的。

最后一个参数就是child了,表示Card中的子元素。虽然Card中的child只有一个,但是这个child可以是可以包含多个child的widget,比如Row或者Column等。

Card的使用

通过上面的讲解,我们对Card的使用也有了基本的了解,接下来我们可以通过一个具体的例子,来看看Card具体是如何使用的。

虽然Card里面包含了一个child widget,这个child widget可以是任何值,但是通常来说还是和Column或者Row一起使用的比较多。

这里我们使用Column来创建一个类似于名片的界面。

Column中有一个children的属性,可以包含多个子元素,我们可以在每一行中放上图片或者文字,如果要想进行复杂的布局,还可以自由进行复杂的组合。

但是对于类似名片这种常见的应用,flutter早就为我们想好了,所以他提供了一个叫做ListTile的组件。

ListTile是一个固定高度的Row,并且可以包含一个leading icon或者trailing icon。还可以包含title,subtitle还有一些点击的交互,非常的方便。

具体ListTile的使用,大家可以去参考具体的API,这里就不过多讲述。

这里我们只是借用ListTile来构造我们需要的效果。

不同的ListTile组件,可以用Divider来进行分割,让界面更加美观。

下面是我们CardApp的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CardApp extends StatelessWidget{
  const CardApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 210,
      child: Card(
        child: Column(
          children: [
            const ListTile(
              title: Text(
                'Han MeiMei',
                style: TextStyle(fontWeight: FontWeight.w500),
              ),
              subtitle: Text('上海,张江'),
              leading: SizedBox(
                width: 20,
                child:Center(
                    child: CircleAvatar(
                      backgroundImage: AssetImage('images/head.jpg'),
                      radius: 10,
                    ))
              ),
            ),
            const Divider(),
            ListTile(
              title: const Text(
                '18888888888',
                style: TextStyle(fontWeight: FontWeight.w500),
              ),
              leading: Icon(
                Icons.contact_phone,
                color: Colors.blue[500],
              ),
            ),
            ListTile(
              title: const Text('hanmeimei@163.com'),
              leading: Icon(
                Icons.contact_mail,
                color: Colors.blue[500],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

将CardApp放在Scaffold的body中运行,可以得到下面的界面:

大家可以看到Card的底部是有明显的3D效果的。这里我们使用了三个ListTile,其中第一个同时包含了title和subTtile这两个属性。

前面两个ListTile使用Divider进行分割,非常的好用。

总结

以上就是flutter中Card的使用了,大家可以结合ListTile一起构建更加美观和复杂的系统。

更多内容请参考 www.flydean.com 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rxjava2+retrofit2
他的大概意思是说:Retrofit 是一个 java 接口类,以注解的方式用于 HTTP 网络请求。
zhangjiqun
2024/12/16
1030
rxjava2+retrofit2
深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
文章来源:腾讯Bugly Android 开发中,从原生的 HttpUrlConnection 到经典的 Apache 的 HttpClient,再到对前面这些网络基础框架的封装,比如 Volley、Async Http Client,Http 相关开源框架的选择还是很多的,其中由著名的 Square 公司开源的 Retrofit 更是以其简易的接口配置、强大的扩展支持、优雅的代码结构受到大家的追捧。也正是由于 Square 家的框架一如既往的简洁优雅,所以我一直在想,Square 公司是不是只招处女座的程
腾讯大讲堂
2018/02/13
1.8K0
深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
Retrofit2与服务端实例讲解
网络上对 Retrofit2 的各种介绍文章已经很多了,不过往往只是对其用法进行介绍,而缺少相应的实践,这一方面是因为网络上的免费API接口返回的数据格式和访问模式(一般都只能使用 Get 模式)有限制,另一方面是因为并不是每位开发者都会写服务端接口。这样就造成了在学习 Retrofit2 的过程中,对某些参数的作用并不能直观感受到,所以这里我就尝试着用 Nodejs 搭建了一个本地服务器,提供了几个接口用于支持 Get、Post 模式访问调用,支持文件上传和文件下载功能,返回的数据格式有 Json 对象和 Json 数组,需要的参数格式可以由使用者来自由定义
用户1269200
2018/07/30
2K0
Retrofit2与服务端实例讲解
Retrofit解析9之流程解析
我们讲解Retrofit整体流程,就依据官方给的demo来吧,代码如下: 代码如下:
隔壁老李头
2018/08/30
2.2K0
Retrofit解析9之流程解析
Retrofit2.3使用姊妹篇——带进度上传文件
之前的一篇博客讲了Retrofit实现带进度下载的实现,算是Retrofit使用的“姐姐篇”,那今天我们就讲讲它的“妹妹篇“——用Retrofit实现带进度上传文件!
蜻蜓队长
2018/08/03
2.6K0
Retrofit2.3使用姊妹篇——带进度上传文件
okhttp使用备忘录
前言 OkHttp是目前使用最广泛的移动端网络底层库。在Volley、Retrofit等知名上层网络库中,都可以看到它的身影。即使在高版本的Android系统中的URLConnection中也可以看到它的身影。� 因为,各大网络库对OkHttp进行了封装。我们虽然使用方便,却不免失去了一定的灵活性。如果OkHttp拥有的功能,上层库却没有封装,我们在使用时,就会比较麻烦。因此,我们在这里尝试直接使用OkHttp,看看未经封装的OkHttp如何使用。 Request OkHttp将请求封装在了Request类
Oceanlong
2018/07/03
4830
Android MVP+RxJava+Retrofit (2) RxJava+Retrofit
说道RxJava+Retrofit 的组合 大家基本不陌生,先介绍一下Retrofit Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装。说白了真正工作的还是OkHttp 。
全栈程序员站长
2022/06/29
7480
Android MVP+RxJava+Retrofit (2) RxJava+Retrofit
Android使用Retrofit进行网络请求及和Kotlin结合使用
Retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。
码客说
2024/03/29
2.3K0
这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解) - 简书
步骤1:添加Retrofit库的依赖 步骤2:创建 接收服务器返回数据 的类 步骤3:创建 用于描述网络请求 的接口 步骤4:创建 Retrofit 实例 步骤5:创建 网络请求接口实例 并 配置网络请求参数 步骤6:发送网络请求(异步 / 同步)
用户2802329
2018/08/07
9.4K0
这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解) - 简书
网络请求-Android篇(Okhttp和Retrofit)
  OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端。它由Square Inc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求。要在Java或Android项目中使用OkHttp,您需要将OkHttp依赖项添加到您的build.gradle文件中。然后,您可以创建一个OkHttpClient实例,并使用它来进行HTTP请求。OkHttp提供了各种类和方法,用于构建和执行请求、处理响应。使用OkHttp的时候,需要引入:implementation 'com.squareup.okhttp3:okhttp:4.10.0',别忘了添加网络权限!
故乡的樱花开了
2023/10/22
1.5K0
Android-Retrofit简介
上一篇文章讲了RxJava,这一篇当然就该讲Retrofit了,参考资料: https://blog.csdn.net/gumufuyun/article/details/83619879
android_薛之涛
2019/08/08
1.9K0
【转-干货】Retrofit2.0使用总结及注意事项
随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。Retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端,如果看源码会发现其实质上就是对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层,其将请求返回javaBean,对网络认证 REST API进行了很好对支持此,使用Retrofit将会极大的提高我们应用的网络体验。
代码咖啡
2018/08/28
5.5K0
深入浅出Retrofit2.x(二)
大家在和服务交互的时候,大多情况下都应该使用的是 GET、POST 请求吧,下面我们就对 POST 各种数据类型及如何定义接口进行说明。
程序员飞飞
2020/02/29
1.4K0
Android基于Retrofit2.0 封装的超好用的RetrofitClient工具类
本篇是去年出的一篇关于retrofit和rxJava的文章,收到很多讨论和好评,今天再次编辑一下发出来,以便对RxJava和Retrofit的整理系统的学习入门。其他文章同系列文章可以关注点击原文阅读。
开发者技术前线
2020/11/23
3.4K0
Android基于Retrofit2.0 封装的超好用的RetrofitClient工具类
Retrofit解析8之核心解析——ServiceMethod及注解2
这个方法内部很简单,主要就是通过遍历annotations,内部调用parseParameterAnnotation来获取ParameterHandler对象并返回。 那让我们来看看parseParameterAnnotation()方法里面是怎么调用的
隔壁老李头
2018/08/30
1.3K0
Retrofit解析2之使用简介
前面介绍完RESTful之后,我们先来初步认识下Retrofit的使用"姿势"。本文的主要内容如下:
隔壁老李头
2018/08/30
4.9K0
Retrofit解析2之使用简介
Carson带你学Android:这是一份详细的 Retrofit使用教程(含实例讲解)
步骤1:添加Retrofit库的依赖 步骤2:创建 接收服务器返回数据 的类 步骤3:创建 用于描述网络请求 的接口 步骤4:创建 Retrofit 实例 步骤5:创建 网络请求接口实例 并 配置网络请求参数 步骤6:发送网络请求(异步 / 同步)
Carson.Ho
2022/01/21
3.6K0
Carson带你学Android:这是一份详细的 Retrofit使用教程(含实例讲解)
Retrofit2 学习总结
原文链接: http://www.jianshu.com/p/a8b88c7fe831 http://blog.csdn.net/qq_24889075/article/details/52181133
jerrypxiao
2021/02/22
1.3K0
Retrofit2 学习总结
项目需求讨论-Retrofit中文提交及上传头像功能
很早就开通了掘金上发表文章权限,但一直没有在掘金上写,都是在简书上面写好,然后偷懒在掘金上直接就网址分享链接。O(∩_∩)O~这次就上来写了。
青蛙要fly
2018/08/29
6510
项目需求讨论-Retrofit中文提交及上传头像功能
Android学习:OkHttp进行网络请求等
程序员洲洲
2024/06/06
3730
相关推荐
rxjava2+retrofit2
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验