如何使用SliverGrid组件


我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1 概念介绍

我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来创建网格类布局,它和GridView组件类似,它们的不同之处在于SliverGrid组件可以被当作一
个整体来滑动。我们将在本章回中详细介绍SliverGrid组件的使用方法。

2 使用方法

和其它组件一样,SliverGrid组件提供了相关的属性来控制自己,不过它的属性只有三个:- key属性;- delegate属性; - gridDelegate属性;
我们先看一下delegate属性。该属性是SliverChildDelegate类型,不过这个类是一个抽象类,无法创建实例,它有两个实现类,详细如下:

  • SliverChildBuilderDelegatet - SliverChildListDelegate.
    关于SliverChildDelegate类和它的两个子类是不是很熟悉,没错!我们在上一章回中刚刚介绍过它们,因此这里就不再介绍了。我们重点介绍gridDelegate属性,
    该属性是SliverGridDelegate类型,不过这个类是一个抽象类,无法创建实例,它有两个实现类,详细如下:
  1. SliverGridDelegateWithFixedCrossAxisCount, 该类提供了五个属性,详细的名称和功能如下:
  • crossAxisCount属性:用来控制主轴上显示内容的数量;
  • mainAxisSpacing属性:用来控制主轴上显示内容的空间,相当于行距
  • crossAxisSpacing属性:用来控制交叉轴上显示内容的空间,相当于列距
  • childAspectRatio属性:用来控制显示的宽高比;
  • mainAxisExtent属性:用来控制主轴外显示内容的扩展空间,
  1. SliverGridDelegateWithMaxCrossAxisExtent,该类提供了五个属性,详细的名称和功能如下:
  • maxCrossAxisExtent属性用来控制主轴上最大可以显示的内容数量;
  • mainAxisSpacing属性:用来控制主轴上显示内容的空间,相当于行距;
  • crossAxisSpacing属性:用来控制交叉轴上显示内容的空间,相当于列距
  • childAspectRatio属性:用来控制显示的宽高比;
  • mainAxisExtent属性:用来控制主轴外显示内容的扩展空间;
    这两个类的用法比较类似,它们的区别在于:第一个类使用了固定的数量来限制主轴上显示内容的数量,第二个类则是依据显示内容的大小和空间自动调整主轴上显示内容
    的数量,如果数量超过最大值就换行显示。介绍完使用方法后,我们将在在后面的小节中给出示例代码来演示具体的使用方法。

3 示例代码

///不使用工厂方法,直接使用SliverGrid的构造方法
SliverGrid(
  ///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的list
  delegate: SliverChildBuilderDelegate((context,index){
    return const Icon(Icons.face_3_outlined); },
  childCount: 20,
  ),
  ///配置Grid的相关属性,
  gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(
    ///主轴上显示内容的空间设置,相当于行距
    mainAxisExtent: 20,
    mainAxisSpacing: 20,
    ///交叉轴显示内容的数量,这里相当于4列
    crossAxisCount: 4,
    ///交叉轴上显示内容的空间设置
    crossAxisSpacing: 20,
    ///显示内容的宽高比
    childAspectRatio: 1.2,
  ),
),
///不使用工厂方法,直接使用SliverGrid的构造方法,和上一个类似,只是创建显示内容的方法不同
SliverGrid(
  ///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的list
  delegate: SliverChildListDelegate(
    List.generate(20,
          (index) => const Icon(Icons.camera,color: Colors.blue,),),
  ),
  ///配置Grid的相关属性,同上。不同之处在于交叉轴显示内容的数量不固定,而是与空间有关
  gridDelegate:const SliverGridDelegateWithMaxCrossAxisExtent(
    maxCrossAxisExtent: 40,
    mainAxisExtent: 40,
    mainAxisSpacing: 20,
    crossAxisSpacing: 5,
    childAspectRatio: 1.6,
  ),
),

上面的示例代码中演示了两种delegate属性和两种gridDelegate属性的赋值方法,两种delegate属性创建的都是Icon组件。不过gridDelegate属性的配置不同,
在主轴上显示的icon数量也不同。依据目前的知识我们还不能演示程序的运行结果,因为还需要其它组件配合才可以运行,大家不用担心,目前只需要熟练掌握如何创建
SliverGrid组件就可以了,我们在后面章回中会使用本章回创建的组件给大家演示程序运行效果。
看官们,与"SliverGrid组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

Flutter 开发中,组件库是构建用户界面的核心资源。Flutter 提供了丰富的内置组件,同时也有一些第三方组件库极大地提升了开发效率和用户体验。以下是一些常用的组件库及其特点和使用指南。 ### Material Components 库 `Material` 是 Flutter 的核心 UI 组件库,它基于 Google 的 Material Design 设计规范,提供了大量标准化的 UI 元素。该库是每个 Flutter 应用默认引入的,开发者可以通过 `import 'package:flutter/material.dart';` 来使用它。其中常见的组件包括 `RaisedButton`(已逐渐被 `ElevatedButton` 替代)、`IconButton`、`TextButton`、`ButtonBar` 和 `FloatingActionButton` 等,适用于构建具有 Material 风格的界面 [^2]。 ### Cupertino Components 库 `Cupertino` 是 Flutter 提供的另一个 UI 组件库,主要用于构建具有 iOS 风格的应用界面。它包括 `CupertinoButton`、`CupertinoNavigationBar`、`CupertinoTabBar` 等组件,适合需要在 iOS 平台上保持原生视觉风格的项目。 ### GetWidget UI 库 GetWidget 是一个基于 Flutter SDK 构建的开源 UI 组件库,提供了超过 1000 个预构建组件,涵盖按钮、表单、卡片、图标等多个类别。该库旨在简化 Flutter 开发流程,提高开发效率,支持跨平台开发(包括移动应用和 Web 应用)。开发者可以快速复用这些组件来构建美观、高效的用户界面 [^1]。 ### Sliver 组件库 在构建复杂滚动布局时,`Sliver` 类组件非常有用。例如 `SliverAppBar`、`SliverList`、`SliverGrid` 等,它们可以嵌套在 `CustomScrollView` 中,实现高性能的滚动效果。这种组件结构能够优化性能,仅加载当前可见区域的内容,并且可以与其他滚动组件如 `NestedScrollView` 结合使用 [^4]。 ### 第三方组件库推荐 除了官方提供的组件库之外,社区也开发了许多高质量的第三方组件库,如: - **Flutter FormBuilder**:用于快速构建表单界面,支持多种输入类型和验证机制。 - **Flutter Bloc**:虽然不是 UI 组件库,但它是状态管理的重要工具,常与 UI 组件结合使用,提升应用架构的清晰度和可维护性。 - **Flutter Slidable**:提供滑动操作的列表项组件,适用于需要左右滑动显示操作按钮的场景。 - **Flutter Staggered Grid View**:用于构建瀑布流布局,支持多种排列方式,适用于图片墙、商品展示等场景。 ### 使用指南 在使用 Flutter 组件库时,建议遵循以下步骤: 1. **明确需求**:根据项目需求选择合适的组件库。例如,如果需要 Material 风格,则优先使用 `Material` 库;若需要 iOS 风格,则使用 `Cupertino` 库;若需要丰富的预构建组件,则可考虑 `GetWidget`。 2. **查阅文档**:每个组件库都有详细的官方文档,建议开发者在使用前仔细阅读,了解组件的功能、属性和使用方式。 3. **性能优化**:对于涉及大量数据展示的组件(如 `ListView`、`GridView`),应考虑使用懒加载或虚拟滚动技术,以提高应用性能。 4. **自定义组件**:当现有组件无法满足需求时,可以通过继承或组合现有组件来自定义新的组件,满足特定业务场景。 ### 示例代码 以下是一个使用 `Material` 库中的 `ElevatedButton` 和 `TextButton` 的简单示例: ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Flutter 组件示例'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: () { // 按钮点击事件 }, child: Text('Elevated Button'), ), SizedBox(height: 20), TextButton( onPressed: () { // 按钮点击事件 }, child: Text('Text Button'), ), ], ), ), ), ); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值