Flutter入门:组件Card、SafeArea、PageView、GridView

简介: CardCard对应Material Design中的CardView,使用很简单Card的两个特点就是阴影和圆角。

Card


Card对应Material Design中的CardView,使用很简单

Card的两个特点就是阴影和圆角。

阴影:


elevation: 5,
复制代码


圆角:

圆角需要通过shape实现,相对于android要麻烦一些


shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)),
复制代码


这里我们将四个角都设置成半径为5的圆角,当然也可以分别设置


shape: RoundedRectangleBorder(borderRadius: BorderRadius.only(
        topLeft: Radius.circular(15),
        bottomLeft: Radius.zero,
        topRight: Radius.zero,
        bottomRight: Radius.circular(15),
      )),
复制代码


但是设置完发现不生效,比如card中放置一个图片,结果图片还是完整显示的。

这是因为还需要同时设置另外一个属性


clipBehavior: Clip.antiAlias,
复制代码

这样圆角效果就生效了。


SafeArea


当我们做一个页面,发现展示效果是全屏的,内容顶到了通知栏里。比如使用Material样式,但是页面中没有加AppBar,那么内容就会顶进通知栏。

这时使用SafeArea即可。

它的作用就是将内容限制在通知栏下面,实际上是加了一个通知栏高度的padding。

所以我们最好将它放在最外层,如下:


@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: GestureDetector(
        ...
      ),
    );
  }
复制代码


PageView


PageView就是android中的ViewPager,它的用法于GridView类似,也有多种方式


Builder


builder方式是用于当item数不固定时使用,基本用法如下:


PageView.builder(
    itemBuilder: (context, index) {
      return getImage(index);
    },
    itemCount: _images.length,
    scrollDirection: Axis.horizontal,
    controller: _pageController,
    reverse: false,
    )
复制代码
  • itemBuilder是一个函数,相当于Adapter的getView,用来返回每个item的widget
  • itemCount是item总数
  • scrollDirection是滚动方向,分为 Axis.horizontal 和 Axis.vertical
  • controller是控制器,后面会细说
  • reverse是否反向,如果true则从右向左,第一个在最右边。
  • physics滚动的方式,BouncingScrollPhysics阻尼效果;ClampingScrollPhysics水波纹效果
  • pageSnapping是否具有回弹效果,默认为 true
  • onPageChanged监听事件


PageController


PageView的控制器,可以通过它的几个函数进行切换animateToPagejumpToPagenextPagepreviousPage

另外,通过它的构造函数可以设置初始位置等


PageController(
    initialPage: 0,
    viewportFraction: 1.0,
  )
复制代码
  • initialPage初始位置
  • viewportFraction窗口大小,1.0就是全屏,如果设置0.8则当前页只占屏幕80%,所以上一页和下一页会在显示出一部分。


GridView


在flutter中GridView也有几种使用方式,可以根据自己的情况选择合适的方式


GridView.count


适用item数固定的情况,代码如下:

GridView.count(
  //水平子Widget之间间距
  crossAxisSpacing: 10.0,
  //垂直子Widget之间间距
  mainAxisSpacing: 10.0,
  //GridView内边距
  padding: EdgeInsets.all(10.0),
  //一行的Widget数量
  crossAxisCount: 3,
  //子Widget宽高比例
  childAspectRatio: 1.0,
  //子Widget列表
  children: items,
)
复制代码

这里items就是一个List<Widget>

而且这种方式,单个item的宽高已经失效了,只根据屏幕宽度自行计算出宽高。


GridView.builder


builder的方式适用于item数不固定的情况


GridView.builder(
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisSpacing: 10.0,
      mainAxisSpacing: 10.0,
      crossAxisCount: 3,
      childAspectRatio: 1.0,
    ),
    padding: EdgeInsets.all(10.0),
    itemCount: imageDirs.length,
    itemBuilder: (context, index){
      return getItem(imageDirs[index]);
    })
复制代码


上面的gridDelegate设置了一个SliverGridDelegateWithFixedCrossAxisCount对象,每行固定数目。

当然还有其他gridDelegate,比如SliverGridDelegateWithMaxCrossAxisExtent,可以实现不同的效果。

使用gridview报错


Cannot hit test a render box with no size

A RenderBox object must have an explicit size before it can be hit-tested

这是因为gridview没有明确的大小,可以用一个container去包裹它,并设置宽高


目录
相关文章
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1055 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
551 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
548 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
725 7
|
开发工具
Flutter&鸿蒙next中封装一个列表组件
Flutter&鸿蒙next中封装一个列表组件
294 0
|
索引 容器
Flutter PageView 使用详细概述
优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维,不局限于思维,不局限语言限制,才是编程的最高境界。 本文章讲述 Flutter 跨平台开发中 PageView的详细配置使用。
Flutter PageView 使用详细概述
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
294 1
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
999 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
1591 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
726 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程