跨端宿舍管理:Flutter × OpenHarmony 实现“宿舍信息概览”

前言

随着高校信息化建设的加速,宿舍管理系统成为校园智能化的重要组成部分。宿舍信息不仅涉及床位分配、入住情况,还关系到安全和资源优化。本文将以“宿舍信息概览”为例,分享如何使用 Flutter × OpenHarmony 构建跨端应用,实现一个简洁、易用且可扩展的宿舍管理模块。

本文将从技术背景、跨端开发特点、核心代码逐行解析,到开发心得,带你深入理解这一系统的实现方式。


在这里插入图片描述

背景

传统的宿舍管理系统通常依赖 PC 端或 Web 端操作,移动端体验差、跨平台开发复杂。随着 OpenHarmony 的兴起,它提供了统一的多设备开发能力,而 Flutter 则擅长快速构建高性能 UI。因此,将 Flutter 与 OpenHarmony 结合,可实现一次开发、多端运行的宿舍管理系统。

在本示例中,我们聚焦“宿舍信息概览”模块,它需要展示如下信息:

  • 宿舍总数
  • 已使用床位数
  • 空闲宿舍数

并且需要一个直观的卡片式 UI,方便管理者快速了解宿舍状态。


Flutter × OpenHarmony 跨端开发介绍

1. Flutter

Flutter 是 Google 推出的 UI 框架,以 声明式 UI、组件化、热重载 为特色。它支持移动端、Web 端和桌面端,并且社区丰富。

主要特点:

  • Widget 化布局:UI 组件可以组合和复用
  • 热重载:修改 UI 后立即预览
  • 跨平台:一次开发,多平台运行

2. OpenHarmony

OpenHarmony 是开源分布式操作系统,强调 多设备协同

  • 跨设备应用:同一套代码可运行在手机、平板、IoT 设备
  • 分布式能力:设备间数据和 UI 可无缝同步
  • HarmonyOS SDK 与 Flutter 可以配合使用,实现多端宿舍管理应用

结合 Flutter 与 OpenHarmony,可以让宿舍管理系统在手机、平板、校园自助机等多终端一致运行。
在这里插入图片描述


开发核心代码解析

下面我们详细解析 “宿舍信息概览”模块的核心实现。代码分为两部分:

  1. 宿舍信息概览整体布局
  2. 概览卡片组件
    在这里插入图片描述

1. 宿舍信息概览布局

Widget _buildDormitoryOverview(ThemeData theme) {
  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Text(
        '宿舍信息概览',
        style: theme.textTheme.titleMedium?.copyWith(
          fontWeight: FontWeight.bold,
        ),
      ),
      const SizedBox(height: 16),
      Row(
        children: [
          Expanded(
            child: _buildOverviewCard(
              theme, '宿舍总数', '45', Icons.home_outlined,
            ),
          ),
          const SizedBox(width: 16),
          Expanded(
            child: _buildOverviewCard(
              theme, '已使用', '38', Icons.check_circle_outlined,
            ),
          ),
          const SizedBox(width: 16),
          Expanded(
            child: _buildOverviewCard(
              theme, '空宿舍', '7', Icons.event_busy_outlined,
            ),
          ),
        ],
      ),
    ],
  );
}
逐行解析
  • Widget _buildDormitoryOverview(ThemeData theme)
    定义一个私有 Widget 方法,用于生成宿舍概览 UI。传入 ThemeData 方便统一主题风格。

  • Column(crossAxisAlignment: CrossAxisAlignment.start, ...)
    使用垂直布局,所有子 Widget 左对齐。

  • Text('宿舍信息概览', ...)
    显示模块标题,字体使用 titleMedium 并加粗。

  • const SizedBox(height: 16)
    添加 16 像素的垂直间距。

  • Row(children: [...])
    横向排列三张卡片,每张卡片显示宿舍总数、已使用、空宿舍。

  • Expanded(child: _buildOverviewCard(...))
    使用 Expanded 让每张卡片平均分配 Row 空间,保证响应式布局。

  • const SizedBox(width: 16)
    卡片间水平间距。


2. 宿舍概览卡片

Widget _buildOverviewCard(ThemeData theme, String title, String value, IconData icon) {
  return Container(
    padding: const EdgeInsets.all(16),
    decoration: BoxDecoration(
      color: theme.colorScheme.surface,
      borderRadius: BorderRadius.circular(12),
      boxShadow: [
        BoxShadow(
          color: Colors.black.withOpacity(0.05),
          spreadRadius: 0,
          blurRadius: 8,
          offset: const Offset(0, 2),
        ),
      ],
    ),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          width: 40,
          height: 40,
          decoration: BoxDecoration(
            color: theme.colorScheme.primary.withOpacity(0.1),
            borderRadius: BorderRadius.circular(12),
          ),
          child: Center(
            child: Icon(icon, color: theme.colorScheme.primary),
          ),
        ),
        const SizedBox(height: 12),
        Text(
          title,
          style: theme.textTheme.bodySmall,
        ),
        const SizedBox(height: 4),
        Text(
          value,
          style: theme.textTheme.titleLarge?.copyWith(
            fontWeight: FontWeight.bold,
          ),
        ),
      ],
    ),
  );
}
逐行解析
  • Container(padding: ..., decoration: ...)
    使用 Container 作为卡片外层容器,设置内边距、圆角、阴影,使卡片具有浮雕效果。

  • BoxDecoration(color: ..., borderRadius: ..., boxShadow: [...])

    • color:使用主题表面色
    • borderRadius:圆角 12 像素
    • boxShadow:轻微阴影,增加层次感
  • Column(crossAxisAlignment: CrossAxisAlignment.start, children: [...])
    卡片内部垂直布局,左对齐。

  • 图标部分:

    Container(
      width: 40,
      height: 40,
      decoration: BoxDecoration(
        color: theme.colorScheme.primary.withOpacity(0.1),
        borderRadius: BorderRadius.circular(12),
      ),
      child: Center(
        child: Icon(icon, color: theme.colorScheme.primary),
      ),
    )
    
    • 使用小方块容器显示图标
    • 背景色为主题主色透明化
    • 图标居中显示,增强视觉识别度
  • Text(title, style: theme.textTheme.bodySmall)
    显示卡片标题,如“宿舍总数”

  • Text(value, style: theme.textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold))
    显示数字信息,字体大且加粗,突出重点数据


3. UI 效果

最终 UI 将呈现如下效果:

宿舍信息概览
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 宿舍总数  │ │ 已使用    │ │ 空宿舍    │
│ 45       │ │ 38       │ │ 7        │
└─────────┘ └─────────┘ └─────────┘

卡片采用 Material 风格,响应式布局,适用于多设备屏幕。


心得

  1. 组件化思想:将每张卡片抽象为 _buildOverviewCard,提高代码复用性。
  2. 主题统一:通过 ThemeData 控制颜色、字体,方便全局风格调整。
  3. 跨端布局:Flutter 的 Expanded、Row、Column 组合保证在手机、平板等不同尺寸屏幕都能良好展示。
  4. OpenHarmony 加持:一套代码即可在多终端运行,减少重复开发成本。
    在这里插入图片描述

总结

通过 Flutter × OpenHarmony,我们可以快速构建跨端宿舍管理系统,实现“宿舍信息概览”模块。核心在于:

  • 使用 Flutter 构建声明式 UI
  • 将 UI 模块化,保证复用性
  • 使用 ThemeData 控制统一风格
  • 利用 OpenHarmony 跨端能力,让系统覆盖手机、平板、IoT 设备

这套方法不仅适用于宿舍管理系统,也可扩展到其他校园信息管理、企业管理系统,实现一次开发、多端运行的目标。

通过本次“宿舍信息概览”模块的开发实践,我们可以看到 Flutter × OpenHarmony 在跨端应用中的优势。Flutter 提供了灵活的声明式 UI 和丰富的组件化能力,使得卡片式信息展示简洁且易于扩展;OpenHarmony 则赋能多设备协同,让同一套代码在手机、平板乃至校园自助机上都能良好运行。模块化设计、主题统一和响应式布局的结合,使得系统既美观又实用,也为后续的宿舍管理功能拓展(如床位分配、入住登记、数据统计等)奠定了坚实基础。整体来看,这种跨端开发模式不仅提升开发效率,也为高校信息化管理提供了高可用、高体验的解决方案。

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

Logo

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

更多推荐