宠物之家:Flutter × OpenHarmony 打造“我的宠物”界面实战解析

前言

随着移动端和物联网设备的快速发展,跨端应用开发越来越受到开发者关注。宠物管理类应用已经不仅仅局限于手机 App,智能家居设备、平板乃至可穿戴设备都需要同步体验。本文将基于 Flutter × OpenHarmony 技术栈,手把手实现一个“我的宠物”功能模块,并对核心代码进行详细解析,帮助开发者理解跨端 UI 构建和数据展示逻辑。
在这里插入图片描述

背景

宠物管理类应用的核心功能之一是 展示宠物信息和日程安排,例如宠物的品种、年龄、每日喂食、遛狗和健康检查安排。在多端应用中,需要考虑:

  • UI 跨端一致性
  • 动态列表展示
  • 响应式布局

Flutter 提供了强大的跨平台 UI 框架,而 OpenHarmony 可以无缝支持多终端分发和设备适配。将两者结合,可以快速实现一个界面优雅、性能流畅的“我的宠物”模块。

Flutter × OpenHarmony 跨端开发介绍

Flutter 是 Google 推出的开源 UI 框架,通过 Dart 语言构建高性能原生应用,可编译为 Android、iOS、Web 及桌面端应用。
OpenHarmony 是华为主导的分布式操作系统,支持多设备协作和分布式 UI 构建。使用 Flutter 开发 OpenHarmony 应用,可以在 HarmonyOS 设备上运行,并利用其分布式能力扩展到多屏协作。

核心优势:

  1. 一次开发,多端运行:手机、平板、电视、车机等设备 UI 保持一致。
  2. 热重载开发:Flutter 热重载让 UI 调试更高效。
  3. 强大组件化:ListView、Container、Row、Column 等控件可以组合复杂布局。

在这里插入图片描述

开发核心代码

下面展示“我的宠物”模块的核心代码,并进行逐行解析:

// Pets Section
Container(
  margin: EdgeInsets.symmetric(vertical: 20, horizontal: 16),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          Text(
            '我的宠物',
            style: TextStyle(
              fontSize: 18,
              fontWeight: FontWeight.bold,
              color: Color(0xFF333333),
            ),
          ),
          TextButton(
            onPressed: () {},
            child: Text(
              '查看全部',
              style: TextStyle(
                color: Color(0xFF6B8E23),
              ),
            ),
          ),
        ],
      ),
      SizedBox(height: 16),
      Container(
        height: 180,
        child: ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: 3,
          itemBuilder: (context, index) {
            return _petCard(
              index == 0 ? '金毛' : index == 1 ? '英短' : '哈士奇',
              index == 0 ? '2岁' : index == 1 ? '1岁' : '3岁',
              index == 0 ? (Colors.amber[300] ?? Colors.amber) : index == 1 ? (Colors.grey[400] ?? Colors.grey) : Colors.black87,
            );
          },
        ),
      ),
    ],
  ),
),

在这里插入图片描述

逐行解析

  1. Container(margin: EdgeInsets.symmetric(...))

    • 为宠物模块添加外边距,使整体内容在屏幕上有空白感。
    • vertical: 20, horizontal: 16 表示上下边距 20,左右边距 16。
  2. Column(crossAxisAlignment: CrossAxisAlignment.start, ...)

    • 垂直布局,内容从左对齐。
  3. Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, ...)

    • 水平布局,将标题和“查看全部”按钮分开排列。
  4. Text('我的宠物', style: ...)

    • 标题文本,字号 18,加粗,颜色深灰。
  5. TextButton(onPressed: ..., child: Text('查看全部', style: ...))

    • 可点击按钮,文本绿色,点击事件可自定义逻辑。
  6. SizedBox(height: 16)

    • 占位控件,用于在标题与列表之间增加间距。
  7. Container(height: 180, child: ListView.builder(...))

    • 水平滚动列表,用于展示宠物卡片。
    • itemCount: 3 表示有 3 个宠物。
    • _petCard(...) 方法生成单个宠物卡片(可封装包含图片、名字、年龄和背景颜色)。

接着是日程模块:

// Schedule Section
Container(
  padding: EdgeInsets.all(20),
  margin: EdgeInsets.symmetric(horizontal: 16),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(20),
    boxShadow: [
      BoxShadow(
        color: Colors.grey.withOpacity(0.1),
        spreadRadius: 1,
        blurRadius: 3,
        offset: Offset(0, 1),
      ),
    ],
  ),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Text(
        '今日日程',
        style: TextStyle(
          fontSize: 18,
          fontWeight: FontWeight.bold,
          color: Color(0xFF333333),
        ),
      ),
      SizedBox(height: 16),
      _scheduleItem('09:00', '喂食时间', Icons.fastfood),
      SizedBox(height: 12),
      _scheduleItem('14:00', '遛狗时间', Icons.directions_walk),
      SizedBox(height: 12),
      _scheduleItem('18:00', '健康检查', Icons.local_hospital),
    ],
  ),
),

逐行解析

  1. Container(padding: EdgeInsets.all(20), margin: EdgeInsets.symmetric(...))

    • 内边距 20,外边距水平 16,保证模块不紧贴屏幕边缘。
  2. BoxDecoration(color: Colors.white, borderRadius: ..., boxShadow: ...)

    • 设置背景颜色为白色,圆角 20,添加轻微阴影,让模块有浮动感。
  3. Column(crossAxisAlignment: CrossAxisAlignment.start, ...)

    • 垂直排列文本和日程项。
  4. Text('今日日程', style: ...)

    • 模块标题,样式与宠物模块一致。
  5. _scheduleItem(time, title, icon)

    • 自定义方法,用于生成单条日程,包括时间、事件名称和图标。
    • 可以封装为 Row,左侧时间,中间文字,右侧图标。

通过这种方式,我们实现了一个 跨端适配、界面美观、逻辑清晰的“我的宠物”模块


心得

  1. Flutter UI 组件组合灵活:Container、Row、Column、ListView 可以轻松实现复杂布局。
  2. 跨端适配需注意尺寸单位:OpenHarmony 在不同设备屏幕下需要动态布局,建议使用相对尺寸或 MediaQuery。
  3. 封装组件提高复用性:如 _petCard_scheduleItem 封装成独立 Widget,便于后期维护和扩展。
  4. 视觉层次感:合理的边距、圆角和阴影可以提升用户体验。

总结

通过本次“我的宠物”模块的开发实践,我们可以看到 Flutter × OpenHarmony 在跨端应用开发中的强大能力。借助 Flutter 的灵活布局和丰富组件,我们可以快速实现美观、响应式的界面;而 OpenHarmony 提供的多设备适配能力,则保证了应用在手机、平板、智慧屏等终端上都能保持一致的体验。

在实际开发中,合理的组件封装、清晰的布局逻辑、以及良好的视觉层次感,是提升用户体验和后期维护效率的关键。同时,通过封装 _petCard 和 _scheduleItem 等独立 Widget,我们能够快速扩展功能,适配更多宠物类型或日程事件,实现模块化、可复用的开发模式。

总的来说,Flutter 与 OpenHarmony 的结合,为跨端应用开发提供了高效、稳定且易维护的解决方案,非常适合现代多终端、多场景的应用需求。

通过 Flutter × OpenHarmony,我们可以快速构建跨端宠物管理应用,实现“我的宠物”模块的展示与日程管理功能。核心在于组件化布局横向滚动列表阴影和圆角设计以及可扩展的自定义 Widget。这种方法不仅适用于宠物应用,也适用于各种跨端信息展示类应用。

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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐