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


目录
相关文章
|
4月前
Flutter 组件(二)文本 与 输入框组件
Flutter 组件(二)文本 与 输入框组件
70 0
|
4月前
|
容器
Flutter 组件(一)组件概述
Flutter 组件(一)组件概述
58 0
|
5月前
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套 在 Flutter 中,ListView 和 PageView 是两个常用的控件,它们可以用于滑动展示大量内容的场景,且支持各种嵌套方式,本文将介绍其中的一些花式嵌套方式。
|
20小时前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
|
6天前
|
Dart
Flutter 中优雅切换应用主题的组件
【Flutter】使用adaptive_theme组件优雅切换应用主题:封装MaterialApp,支持light/dark/system模式,自定义色彩,保存选择,含调试按钮。安装配置、设置主题、监听切换、自定义颜色、读取配置步骤详细。代码示例与学习路径推荐。[查看完整教程](https://flutter.ducafecat.com/blog/flutter-app-theme-switch)
Flutter 中优雅切换应用主题的组件
|
4月前
|
索引
Flutter.源码分析.flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView
Flutter.源码分析.flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView
32 0
|
4月前
|
开发者 索引 容器
Flutter开发笔记:Flutter 布局相关组件
Flutter开发笔记:Flutter 布局相关组件
125 0
|
4月前
|
iOS开发
Flutter 组件(三)按钮类组件
Flutter 组件(三)按钮类组件
157 0
|
4月前
|
监控 Dart 安全
创建一个Dart应用,监控局域网上网记录的软件:Flutter框架的应用
在当今数字时代,网络安全变得愈发重要。为了监控局域网上的上网记录,我们可以借助Flutter框架创建一个强大的Dart应用。在这篇文章中,我们将深入讨论如何使用Flutter框架开发这样一个监控局域网上网记录的软件,并提供一些实用的代码示例。
277 1
|
21小时前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析