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去包裹它,并设置宽高


目录
相关文章
|
22天前
Flutter 自定义组件继承与调用的高级使用方式
本文深入探讨了 Flutter 中自定义组件的高级使用方式,包括创建基本自定义组件、继承现有组件、使用 Mixins 和组合模式等。通过这些方法,您可以构建灵活、可重用且易于维护的 UI 组件,从而提升开发效率和代码质量。
117 1
|
22天前
|
开发工具 UED
Flutter&鸿蒙next中封装一个输入框组件
本文介绍了如何创建一个简单的Flutter播客应用。首先,通过`flutter create`命令创建项目;接着,在`lib`目录下封装一个自定义输入框组件`CustomInput`;然后,在主应用文件`main.dart`中使用该输入框组件,实现简单的UI布局和功能;最后,通过`flutter run`启动应用。本文还提供了后续扩展建议,如状态管理、网络请求和UI优化。
100 1
|
26天前
|
Dart UED
Flutter用户交互组件
Flutter用户交互组件
22 2
|
21天前
|
开发工具
Flutter&鸿蒙next中封装一个列表组件
Flutter&鸿蒙next中封装一个列表组件
36 0
|
1月前
|
开发者
flutter:功能性组件 (八)
本文介绍了Flutter中常用的UI组件和功能,包括进度指示器(线性和圆形)、下拉刷新、选项按钮(单选按钮、复选框、开关)、手势识别(GestureDetector、Ink和InkWell)以及提示和Offstage组件的使用方法和示例代码。这些组件和功能可以帮助开发者快速构建交互丰富的应用程序界面。
|
索引 容器
Flutter PageView 使用详细概述
优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维,不局限于思维,不局限语言限制,才是编程的最高境界。 本文章讲述 Flutter 跨平台开发中 PageView的详细配置使用。
Flutter PageView 使用详细概述
|
1月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
|
3天前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
15 2
|
1月前
|
开发者
鸿蒙Flutter实战:07-混合开发
鸿蒙Flutter混合开发支持两种模式:1) 基于har包,便于主项目开发者无需关心Flutter细节,但不支持热重载;2) 基于源码依赖,利于代码维护与热重载,需配置Flutter环境。项目结构包括AppScope、flutter_module等目录,适用于不同开发需求。
77 3
|
20天前
|
传感器 开发框架 物联网
鸿蒙next选择 Flutter 开发跨平台应用的原因
鸿蒙(HarmonyOS)是华为推出的一款旨在实现多设备无缝连接的操作系统。为了实现这一目标,鸿蒙选择了 Flutter 作为主要的跨平台应用开发框架。Flutter 的跨平台能力、高性能、丰富的生态支持和与鸿蒙系统的良好兼容性,使其成为理想的选择。通过 Flutter,开发者可以高效地构建和部署多平台应用,推动鸿蒙生态的快速发展。
145 0