Flutter + OpenHarmony 网格布局:GridView 与 SliverGrid 在鸿蒙设备内容展示中的应用


个人主页:

文章目录

    • 前言
  • 基础组件——GridView 组件
    • 作用/特点
    • 常见属性
    • 代码示例
  • 基础组件——SliverGrid 组件
    • 作用/特点
    • 常见属性
    • 代码示例
    • 面向 OpenHarmony 的工程建议
  • 结语

注:本文所有实践均基于手机端场景,适用于 OpenHarmony 手机设备的应用开发。

前言

在 OpenHarmony 手机应用开发中,网格布局是展示图片、商品、功能入口等内容的常用方式。Flutter 提供了GridViewSliverGrid两种核心组件,分别适用于简单独立页面和复杂滚动联动场景。本文将从基础出发,系统介绍二者的作用、常见属性,并提供可直接运行的手机端代码示例。


基础组件——GridView 组件

作用/特点

GridView是 Flutter 中用于构建二维滚动列表的基础组件。它适用于独立的网格页面,如相册、应用图标列表、商品橱窗等。其特点是:

  • 使用简单,开箱即用;
  • 支持垂直或水平滚动;
  • 可通过gridDelegate灵活控制列数与子项比例;
  • 默认使用ListView的底层机制,具备良好的性能表现。

常见属性

属性类型说明
scrollDirectionAxis滚动方向,默认Axis.vertical
reversebool是否反转滚动方向
paddingEdgeInsetsGeometry?内边距
gridDelegateSliverGridDelegate控制网格布局规则(必填)
children/itemBuilder+itemCount子项数据源(推荐使用builder形式)
cacheExtentdouble可视区域外预加载距离,提升滚动流畅度
physicsScrollPhysics?滚动物理效果,手机默认为ClampingScrollPhysics
shrinkWrapbool是否包裹内容高度(嵌套时使用,否则影响性能)

⚠️ 手机端建议:始终使用GridView.builder,避免一次性构建所有子项;若子项高度一致,可配合固定childAspectRatio提升性能。

代码示例

// grid_view_demo_phone.dartimport'package:flutter/material.dart';voidmain()=>runApp(constMyApp());classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'GridView 手机示例',home:Scaffold(appBar:AppBar(title:constText('GridView - 商品列表')),body:GridView.builder(itemCount:40,gridDelegate:constSliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2,// 手机常用 2 列childAspectRatio:0.85,// 宽略大于高mainAxisSpacing:12,crossAxisSpacing:12,),cacheExtent:600,itemBuilder:(context,index){return_buildGridItem('商品$index');},),),);}staticWidget_buildGridItem(Stringtitle){returnCard(clipBehavior:Clip.hardEdge,child:Column(crossAxisAlignment:CrossAxisAlignment.stretch,children:[AspectRatio(aspectRatio:1.0,child:Container(color:Colors.grey[300]),),Padding(padding:constEdgeInsets.all(8),child:Text(title,textAlign:TextAlign.center,maxLines:1,overflow:TextOverflow.ellipsis,style:constTextStyle(fontSize:14),),),],),);}}

运行界面:

基础组件——SliverGrid 组件

作用/特点

SliverGrid不是独立 Widget,而是CustomScrollView中的一种sliver(可滑动片段)。它适用于需要与其他滚动元素联动的复杂页面,例如:

  • 顶部大图 Banner + 网格内容;
  • 可折叠的 AppBar + 网格列表;
  • 多类型混合滚动(文本 + 网格 + 分割线)。

其核心优势在于:统一滚动上下文,实现无缝联动与高性能滚动

常见属性

属性类型说明
delegateSliverChildDelegate子项构建方式,常用SliverChildBuilderDelegate
gridDelegateSliverGridDelegateGridView,控制列数与比例
keyKey?建议提供稳定 Key,避免重建
findChildIndexCallbackChildIndexGetter?大数据集优化(配合ValueKey使用)

⚠️ 注意:SliverGrid必须作为CustomScrollView的直接子项(sliver),不能单独使用。

代码示例

// sliver_grid_demo_phone.dartimport'package:flutter/material.dart';voidmain()=>runApp(constMyApp());classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'SliverGrid 手机示例',home:Scaffold(body:CustomScrollView(slivers:[constSliverAppBar(title:Text('应用中心'),pinned:true,expandedHeight:180,flexibleSpace:FlexibleSpaceBar(background:DecoratedBox(decoration:BoxDecoration(color:Colors.blue,image:DecorationImage(image:NetworkImage('https://picsum.photos/seed/banner/800/400'),//顶部风景图,可替换fit:BoxFit.cover,),),),),),SliverGrid(delegate:SliverChildBuilderDelegate((context,index){return_buildGridItem('App$index');},childCount:30,),gridDelegate:constSliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:4,// 手机图标常用 4 列childAspectRatio:1.0,// 正方形mainAxisSpacing:10,//控制网格横向间距crossAxisSpacing:10,//控制网格纵向间距),),],),),);}staticWidget_buildGridItem(Stringtitle){returnCard(child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[Icon(Icons.apps_outlined,size:32,color:Colors.grey[700]),constSizedBox(height:4),Text(title,textAlign:TextAlign.center,maxLines:1,overflow:TextOverflow.ellipsis,style:constTextStyle(fontSize:12),),],),);}}

运行界面:

面向 OpenHarmony 的工程建议

  1. 动态列数策略
    不要硬编码 crossAxisCount,应根据屏幕宽度计算:
intgetColumnCount(double width){if(width>1200)return6;// 智慧屏if(width>800)return4;// 平板return2;// 手机}

2.图片加载必须优化

  • 使用 cached_network_image,并指定 width/height 或 fit,防止重排。

3.智慧屏交互适配

  • 增大点击区域(≥48dp)
  • 添加焦点高亮(focusColor 或边框)
  • 减少每屏信息量,避免视觉疲劳

4.性能监控常态化

  • 使用 Flutter DevTools 检查
  • Frame time(目标 <16ms)
  • Memory usage(滚动时平稳)
  • Widget rebuilds(网格项无意外重建)

结语

在 OpenHarmony 手机应用开发中,GridViewSliverGrid各有其适用场景:前者简洁高效,适合独立内容展示;后者灵活强大,适用于需与 AppBar、Banner 等组件联动的复杂滚动页面。只要合理使用builder模式、固定子项比例、控制预加载范围,即可在手机端实现流畅、低内存占用的网格体验。

本文提供的两套完整示例代码,已覆盖日常开发中的主流需求,可直接集成至项目并快速迭代。掌握这两种网格布局方式,是构建高质量 Flutter 应用的重要基础。

🔜下期预告:《Flutter + OpenHarmony 用户输入框:TextField 与 InputDecoration 在多端表单中的交互设计》
我们将深入探讨如何在 OpenHarmony 手机上打造安全、易用、美观的输入体验,涵盖焦点管理、键盘适配、校验反馈与样式定制等实战技巧。敬请期待!

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java毕设项目推荐-基于springboot+Java的各行通用预约系统的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【从零手搓128GB显存GPU:我的节能能效探索之旅】

从零手搓128GB显存GPU&#xff1a;我的节能能效探索之旅 当显卡价格高企&#xff0c;我决定亲手打造一块属于自己的大显存节能GPU 动机&#xff1a;为什么我要“手搓”GPU&#xff1f; 去年项目需要训练百亿参数模型时&#xff0c;我发现自己被困在了显存限制中。市面上的高…

互联网大厂Java面试实录:Spring Boot微服务在电商场景中的应用与挑战

互联网大厂Java面试实录&#xff1a;Spring Boot微服务在电商场景中的应用与挑战 在现代互联网电商平台中&#xff0c;微服务架构已成为支撑业务灵活扩展和高可用性的关键技术。本文通过一场互联网大厂Java开发岗位的模拟面试&#xff0c;展现了面试官与求职者谢飞机的问答过程…

2026年纸箱封箱机选购指南:靠谱厂家一网打尽,智能码垛机/包装机/热收缩膜包装机/收缩膜包装机,纸箱封箱机厂商怎么选

近年来,随着电商物流、食品加工、工业制造等行业的快速发展,纸箱封箱机作为后段包装的核心设备,其市场需求持续攀升。然而,市场鱼龙混杂,设备质量参差不齐,企业采购时往往面临“选型难、售后烦、成本高”的痛点。…

2026年行业内排行前列的高效粉碎机品牌怎么选择,高效粉碎机/高效包衣机/粉碎整粒机,高效粉碎机制造商哪个好

随着制药、食品、化工等行业对生产效率与设备可靠性的需求持续攀升,高效粉碎机作为核心工艺装备,其技术迭代与品牌竞争日益激烈。当前市场呈现“头部集中、细分分化”特征,采购方在选型时需兼顾技术适配性、成本效益…

计算机Java毕设实战-基于springboot+vue+mysql人脸识别的考勤管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目:基于springboot的通用预约系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机毕业设计hadoop+spark+kafka+hive漫画漫推荐系统 知识图谱 动漫可视化 动漫爬虫 大数据毕业设计(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 技术范围&#xff1a;Sprin…

Java计算机毕设之基于springboot的人脸识别员工考勤管理系统基于人脸识别的出勤管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于springboot的就餐就医通用预约系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

上线6个月年化营收近10亿美元,GitHub 60k+ stars,1096次提交的背后的Claude Code 的进化之路!

引言&#xff1a;AI 时代的"套娃"传奇 上线6个月年化营收近10亿美元&#xff0c;GitHub 60k stars&#xff0c;让工程师效率提升50%——本文回顾 Claude Code 从 Beta 到 2.1.19的完整发展历程&#xff0c;探寻这款现象级 AI 编程工具背后的进化逻辑。 Boris Cherny …

高可用的三件事——无状态化、水平扩展与故障转移的协同设计

写在前面,本人目前处于求职中,如有合适内推岗位,请加:lpshiyue 感谢。同时还望大家一键三连,赚点奶粉钱。本系列已完结,完整版阅读课联系本人高可用不是简单的冗余堆砌,而是无状态化、水平扩展与故障转移三者协…

【课程设计/毕业设计】基于Springboot校园实验室预约管理系统基于springboot的通用预约系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

flash-attention总是安装失败

大家有时候在执行下面命令安装flash-attention的时候经常会报错pip install flash-attn --no-build-isolation遇到这种情况&#xff0c;可以从源码进行安装git clone https://github.com/Dao-AILab/flash-attention.git cd flash-attention # RTX 4090的话就是8.9 export TORCH…

删除万能无笔输入法

删除有点费事,但也不很困难。 步骤1:尝试在任务栏中删除万能五笔相关任务。 步骤2:用Everything查找wannengwubi,然后删除它们。有可能会因为被占用而删除不掉,那就右键用360的文件粉碎掉它们。 步骤3:找开语言与…

Excel进阶神器:巧用CODE函数,轻松搞定中英文分离与姓名统计

面对Excel表格里混杂的中英文数据&#xff0c;你是否曾为如何快速分离而头疼&#xff1f;一张简单的函数公式&#xff0c;就能让你从繁琐的手动操作中解放出来。 在日常数据处理中&#xff0c;我们经常会遇到各种需要处理文本的情况&#xff0c;比如从混合字符串中提取特定部分…

04-N8N教程-告别手动收藏!用N8N工作流自动抓取公众号文章,一键存入飞书多维表格

1.前言 在日常信息获取和知识管理过程中&#xff0c;微信公众号已成为我们获取前沿资讯、技术干货和行业洞察的重要渠道。然而&#xff0c;面对关注的众多公众号&#xff0c;每天海量的文章推送让人眼花缭乱&#xff0c;传统方式往往需要我们花费大量时间手动打开、阅读、收藏…

对《What does it mean to understand language?》的深度研究

1. 核心观点与主要论证 1.1 核心论点:语言理解的“出口假设” 这篇由哈佛大学、麻省理工学院(MIT)及佐治亚理工学院的研究团队联合发表的论文《What does it mean to understand language?》提出了一个关于人类语言理解的颠覆性理论框架,其核心论点被称为 “出口假设”(…

为电视盒子注入新生命:Armbian S9xxx 构建指南

Armbian / 岸边 Armbian&#xff08;中文名&#xff1a;岸边&#xff09;系统是基于 Debian/Ubuntu 而构建的专门用于 ARM 芯片的轻量级 Linux 系统。Armbian 系统精益、干净&#xff0c;并且 100% 兼容并继承了 Debian/Ubuntu 系统的功能和丰富的软件生态&#xff0c;可以安全…

中核集团为什么排央企第一名?因为有实力

中核集团为什么排央企第一名&#xff1f;因为有实力。1、国有重要骨干企业中国核工业集团有限公司(简称中核集团)不仅是中央直接管理的国有重要骨干企业&#xff0c;而且还是国家核科技工业的主体、核能发展与核电建设的中坚、核技术应用的骨干。2、中国核科技的开拓者中核集团…