基于 HarmonyOS 6.0 的校园二手交易页面实战开发:从组件构建到跨端布局优化

前言

随着 HarmonyOS 生态逐渐成熟,HarmonyOS 6.0 在跨端协同、ArkUI 声明式开发以及分布式能力方面已经具备非常强的工程化能力。相比传统 Android 原生开发,HarmonyOS 更强调“一次开发,多端部署”的理念,尤其是在平板、手机、折叠屏以及 IoT 场景下,页面组件的复用性与布局适配能力显得尤为重要。
在这里插入图片描述

本文将基于一个“校园二手交易页面”模块,深入讲解 HarmonyOS 6.0 页面开发思路,并结合实际 UI 构建代码,对 Grid 网格布局、组件封装、卡片式设计以及声明式 UI 编程思想进行详细解析。文章不仅会介绍 HarmonyOS 6.0 的跨端开发优势,还会重点分析页面核心代码的设计逻辑,帮助大家真正理解 ArkUI 风格页面开发的工程实践。


背景

在校园类应用中,“附近好物”模块属于非常典型的高频页面。用户需要快速浏览商品、查看价格、距离以及商品信息,因此页面既要保证信息密度,又要兼顾视觉层次感。

传统开发中,这类页面通常会面临几个问题:

  • 页面组件重复率高
  • 不同设备布局适配困难
  • 列表与卡片 UI 难以统一管理
  • 页面状态更新复杂

HarmonyOS 6.0 的声明式 UI 恰好可以很好解决这些问题。通过组件化思想,我们可以将商品卡片拆分为独立模块,并利用 Grid 布局快速构建响应式页面结构,从而提升开发效率与维护性。

本文案例实现的是一个“附近好物推荐区域”,包含:

  • 商品标题
  • 商品价格
  • 位置信息
  • 图标展示
  • 网格布局排列

整体效果属于 HarmonyOS 中非常常见的卡片式信息流设计。


HarmonyOS 6.0 跨端开发介绍

HarmonyOS 6.0 最大的特点之一,就是其真正意义上的跨端能力。不同于传统 Android 的“适配式开发”,HarmonyOS 更偏向于“自适应布局”。

在 HarmonyOS 中:

  • 手机
  • 平板
  • 折叠屏
  • 智慧屏
  • IoT 设备

都可以共享同一套 UI 逻辑。

其核心依赖于:

  • ArkTS
  • ArkUI
  • Stage 模型
  • 声明式组件系统

开发者只需要关注:

组件如何描述

而不是:

组件如何一步步绘制

这种开发模式与 Flutter 非常类似,但 HarmonyOS 更深度融合系统级分布式能力。

例如:

Grid()
Column()
Row()
Text()
Image()

这些组件本质上都属于声明式 UI。

页面更新时:

  • 不需要手动刷新 View
  • 不需要 findViewById
  • 不需要复杂 XML 操作

状态变化后 UI 自动更新。

这也是 HarmonyOS 6.0 在现代 UI 工程化中的核心优势。


开发核心代码

下面开始分析核心页面代码实现。

整个模块主要分为两个部分:

  1. 热门商品区域构建
  2. 商品卡片组件封装

代码整体结构如下:

Widget _buildHotItems(ThemeData theme) {
  final items = [
    ('考研数学全套', '¥68', '南区 1.2km', _blue),
    ('宿舍折叠桌', '¥39', '北苑 800m', _green),
    ('蓝牙耳机', '¥99', '东门 2.1km', _purple),
    ('山地自行车', '¥260', '体育馆', _orange),
  ];

  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      _buildTitle(theme, '附近好物', '刚刚上新'),
      const SizedBox(height: 12),
      GridView.builder(
        shrinkWrap: true,
        physics: const NeverScrollableScrollPhysics(),
        itemCount: items.length,
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
          mainAxisSpacing: 12,
          crossAxisSpacing: 12,
          childAspectRatio: 0.86,
        ),
        itemBuilder: (context, index) {
          final item = items[index];
          return _buildItemCard(theme, item.$1, item.$2, item.$3, item.$4);
        },
      ),
    ],
  );
}

这一部分核心作用是:

构建“附近好物”网格区域

整个页面采用:

Column + GridView

的组合布局。

其中:

final items = [...]

定义了页面数据源。

这里的数据采用元组结构保存:

(商品名称, 商品价格, 商品位置, 商品主题色)

这种方式非常适合轻量级页面开发。
在这里插入图片描述

接下来重点看 GridView.builder。

GridView.builder(
  shrinkWrap: true,
  physics: const NeverScrollableScrollPhysics(),
)

这里有两个非常关键的参数。

第一个:

shrinkWrap: true

表示 GridView 高度根据内容自适应,否则会出现无限高度问题。

第二个:

NeverScrollableScrollPhysics()

表示禁止内部滚动。

因为当前 GridView 是嵌套在外部滚动容器中的,如果不关闭内部滚动,很容易出现滚动冲突问题。

接下来是网格布局核心参数:

SliverGridDelegateWithFixedCrossAxisCount(
  crossAxisCount: 2,
  mainAxisSpacing: 12,
  crossAxisSpacing: 12,
  childAspectRatio: 0.86,
)

这里实际上定义了:

  • 两列布局
  • 横向间距
  • 纵向间距
  • 卡片宽高比例

其中:

childAspectRatio

非常重要。

它决定了卡片整体视觉比例。

在 HarmonyOS 多端开发中:

  • 手机
  • 平板
  • 折叠屏

屏幕尺寸差异巨大。

如果比例控制不好:

  • 卡片可能过长
  • 或者高度塌陷

因此合理控制 aspectRatio 是跨端 UI 中的重要经验。


接下来分析商品卡片组件。

Widget _buildItemCard(
  ThemeData theme,
  String title,
  String price,
  String place,
  Color color,
)

这里采用:

组件参数化设计

也就是:

一个组件适配所有商品

这是声明式 UI 中最核心的思想之一。

进入组件内部:

Container(
  padding: const EdgeInsets.all(14),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(26),
  ),
)

这里构建了整个卡片外层。

重点是:

borderRadius: BorderRadius.circular(26)

HarmonyOS 6.0 当前非常强调:

  • 卡片化
  • 圆角化
  • 柔性视觉

因此大圆角已经成为现代鸿蒙 UI 的典型设计语言。

随后是商品图标区域:

Expanded(
  child: Container(
    decoration: BoxDecoration(
      color: color.withValues(alpha: 0.13),
      borderRadius: BorderRadius.circular(20),
    ),
    child: Center(
      child: Icon(Icons.inventory_2_outlined, color: color, size: 42),
    ),
  ),
)

这里实际上实现的是:

动态主题色卡片

不同商品使用不同颜色。

例如:

  • 蓝色
  • 绿色
  • 紫色
  • 橙色

从而增强页面视觉层次感。

其中:

color.withValues(alpha: 0.13)

属于非常实用的小技巧。

它可以生成:

浅色背景

从而让图标区域更柔和。

这种设计在 HarmonyOS 卡片 UI 中非常常见。

下面是商品标题:

Text(
  title,
  maxLines: 1,
  overflow: TextOverflow.ellipsis,
)

这里主要解决:

长文本溢出问题

在实际项目中:

  • 商品名称长度不可控
  • 多端宽度不同

如果不做限制:

页面布局很容易错乱。

因此:

TextOverflow.ellipsis

是移动端开发中的必备技巧。

最后是价格与位置区域:

Row(
  children: [
    Expanded(
      child: Text(price),
    ),
    Text(place),
  ],
)

这里使用:

Row + Expanded

实现左右布局。

价格靠左:

突出显示

位置靠右:

弱化显示

形成信息层级。

这也是优秀 UI 设计中的典型信息权重处理方式。
在这里插入图片描述


心得

在 HarmonyOS 6.0 开发过程中,我最大的感受是:

页面开发越来越“组件化”

以前传统开发:

  • 更关注 View
  • 更关注控件操作
  • 更关注生命周期

而现在:

  • 更关注状态
  • 更关注组件复用
  • 更关注布局描述

这种开发模式实际上与现代前端越来越接近。

尤其是在复杂页面开发中:

组件拆分能力

会直接决定项目后期维护成本。
在这里插入图片描述

例如本文中的:

_buildItemCard()

就是典型的高复用组件。

未来如果:

  • 增加收藏按钮
  • 增加标签
  • 增加动画
  • 增加点击跳转

都可以在组件内部统一扩展。

这也是 HarmonyOS 6.0 工程化开发的重要思想。

另外 HarmonyOS 在跨端适配方面确实优势明显。

尤其 Grid 布局在:

  • 平板
  • 折叠屏
  • 横屏场景

下表现非常优秀。

很多时候甚至不需要额外写适配代码。


总结

HarmonyOS 6.0 的声明式开发模式,正在逐渐改变传统移动端 UI 的开发方式。通过 ArkUI 与组件化思想,开发者可以更加高效地构建复杂页面,同时提升代码复用性与跨端适配能力。本文通过一个“附近好物”页面案例,详细分析了 Grid 网格布局、卡片组件封装、动态主题色设计以及文本溢出处理等核心技术点。对于现代鸿蒙应用开发而言,真正重要的已经不仅仅是“页面能跑起来”,而是如何通过组件化与声明式架构,让页面更易维护、更易扩展、更适合未来多设备协同场景。

Logo

一站式 AI 云服务平台

更多推荐