基于 Harmony 6.0 应用的乡村助农直播应用首页实现

前言

助农直播是过去几年最有社会价值的电商形态——农户在自家果园里架起手机,把刚摘的水果卖给城里人。这种应用要把"正在直播 / 即将开播 / 我关注的农户 / 助农故事"四件事在一屏内全部铺到。Harmony 6.0 时代,助农直播应用迎来了几个独特的能力红利——AVCodecKit 提供低延迟视频解码、LocationKit 让"我家乡农户"匹配、PushKit 让关注农户开播提醒、HMS Wallet 让助农订单凭证落袋。本文用 Flutter 在 Harmony 6.0 上实现一个助农直播首页。

背景

助农直播类应用的视觉关键词是"温暖、热闹、淳朴"——橙红 #F97316 配绿色 #16A34A 是这类应用的合适主色——红色给热闹直播感,绿色给田园感。本项目首页 5 个模块:渐变 Header(在播农户数 + 大入口)、热门直播大卡片、按地区分类、即将开播预告、助农排行榜。
在这里插入图片描述

Flutter × Harmony 6.0 跨端开发介绍

Harmony 6.0 在助农直播类应用上的能力栈完整——AVCodecKit 提供低延迟视频解码、LocationKit 让用户和老乡农户精准匹配、PushKit 提供开播推送、HMS Wallet 让助农凭证落袋、超级终端让用户在智慧屏看大画面、HiCloud 让助农数据链上存证。

开发核心代码

代码一:直播总览 Header

Widget _header() {
  return Container(
    padding: const EdgeInsets.all(20),
    decoration: BoxDecoration(
      gradient: const LinearGradient(
        colors: [_primary, _accent],
        begin: Alignment.topLeft, end: Alignment.bottomRight),
      borderRadius: BorderRadius.circular(24),
    ),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Row(children: [
          Icon(Icons.live_tv, color: Colors.white, size: 22),
          SizedBox(width: 8),
          Text('助农直播',
              style: TextStyle(color: Colors.white,
                  fontSize: 18, fontWeight: FontWeight.w800)),
          Spacer(),
          Icon(Icons.search, color: Colors.white, size: 22),
        ]),
        const SizedBox(height: 14),
        const Text('🔴 现在直播',
            style: TextStyle(color: Colors.white70, fontSize: 13)),
        const SizedBox(height: 4),
        const Text('328 位农户在田间直播',
            style: TextStyle(color: Colors.white,
                fontSize: 22, fontWeight: FontWeight.w900)),
        const SizedBox(height: 8),
        Container(padding: const EdgeInsets.symmetric(
            horizontal: 12, vertical: 6),
          decoration: BoxDecoration(
            color: Colors.white.withValues(alpha: 0.22),
            borderRadius: BorderRadius.circular(20)),
          child: const Row(mainAxisSize: MainAxisSize.min,
            children: [
              Icon(Icons.notifications_active,
                  color: Colors.white, size: 14),
              SizedBox(width: 4),
              Text('您家乡 · 云南 12 位农户开播啦',
                  style: TextStyle(color: Colors.white,
                      fontSize: 12, fontWeight: FontWeight.w700)),
            ],
          ),
        ),
      ],
    ),
  );
}

家乡农户匹配通过 LocationKit + 用户的籍贯标签实现——优先推荐"老乡"农户,让助农多一份乡情。
在这里插入图片描述

从「直播总览 Header」的农户互助与情感连接设计角度再补一段。助农直播类应用的 Header 必须传递「真实农户、家乡情怀」的氛围。这段 Header 用主深绿到墨绿的渐变背景,配合「在播 X 场 / 关注农户 X 位」+ 「家乡农户」chip + 「立即逛逛」按钮的多段式排版,让用户感受到「这不是普通带货,是帮助家乡」。鸿蒙 6.0 的 LocationKit + 户籍标签让"老乡帮老乡"的匹配天然成立。

代码二:热门直播大卡片

Widget _hotLive() {
  return Container(
    decoration: BoxDecoration(color: _card,
        borderRadius: BorderRadius.circular(18)),
    child: Column(crossAxisAlignment: CrossAxisAlignment.start,
        children: [
      Container(height: 200,
        decoration: BoxDecoration(
          gradient: LinearGradient(colors: [
            _accent.withValues(alpha: 0.7),
            _primary.withValues(alpha: 0.7),
          ]),
          borderRadius: const BorderRadius.vertical(
              top: Radius.circular(18))),
        child: Stack(children: [
          const Center(child: Text('🌾',
              style: TextStyle(fontSize: 90))),
          Positioned(top: 12, left: 12,
            child: Container(padding: const EdgeInsets.symmetric(
                horizontal: 8, vertical: 4),
              decoration: BoxDecoration(color: _primary,
                  borderRadius: BorderRadius.circular(20)),
              child: const Row(children: [
                Icon(Icons.fiber_manual_record,
                    color: Colors.white, size: 8),
                SizedBox(width: 4),
                Text('LIVE',
                    style: TextStyle(color: Colors.white,
                        fontSize: 11,
                        fontWeight: FontWeight.w800)),
              ]),
            ),
          ),
          Positioned(top: 12, right: 12,
            child: Container(padding: const EdgeInsets.symmetric(
                horizontal: 8, vertical: 4),
              decoration: BoxDecoration(color: Colors.black54,
                  borderRadius: BorderRadius.circular(20)),
              child: const Row(children: [
                Icon(Icons.visibility,
                    color: Colors.white, size: 12),
                SizedBox(width: 4),
                Text('12.6k 在看',
                    style: TextStyle(color: Colors.white,
                        fontSize: 11,
                        fontWeight: FontWeight.w700)),
              ]),
            ),
          ),
        ]),
      ),
      Padding(padding: const EdgeInsets.all(14),
        child: Column(crossAxisAlignment: CrossAxisAlignment.start,
            children: [
          const Text('王大叔的果园 · 现摘苹果直发',
              style: TextStyle(color: _ink,
                  fontSize: 16, fontWeight: FontWeight.w800)),
          const SizedBox(height: 4),
          const Text('云南昭通 · 高原红富士 · 已助农 1.2 万斤',
              style: TextStyle(color: _sub, fontSize: 12)),
          const SizedBox(height: 12),
          Container(width: double.infinity, height: 40,
            decoration: BoxDecoration(color: _primary,
                borderRadius: BorderRadius.circular(20)),
            child: const Center(child: Text('进入直播间 · 一键下单',
                style: TextStyle(color: Colors.white,
                    fontSize: 13, fontWeight: FontWeight.w800))),
          ),
        ]),
      ),
    ]),
  );
}

直播视频通过 AVCodecKit 提供端到端 800ms 内的低延迟解码,超级终端让用户从手机切换到智慧屏看大屏,整个家庭一起助农更有仪式感。

从「热门直播大卡片」的真实农户与情感转化设计角度再补一段。助农直播大卡片的核心是"让用户看到真实的田间地头"——农户在地里直接直播,比演播室带货真实 10 倍。这段卡片用「直播封面(田间实景)+ 农户头像 + 真实姓名 + 在卖商品 + 在线人数 + 进入按钮」六段信息塞在每张大卡里。"农户实名认证"chip 用绿色填充,让用户对农户身份放心。
在这里插入图片描述

代码三:按地区分类

Widget _regions() {
  final items = const [
    ['云南', '🍎', 86, _accent],
    ['四川', '🌶️', 68, _red],
    ['新疆', '🍇', 52, _purple],
    ['山东', '🍅', 48, _orange],
    ['福建', '🍊', 42, _amber],
    ['海南', '🥭', 36, _green],
  ];
  return Container(padding: const EdgeInsets.all(14),
    decoration: BoxDecoration(color: _card,
        borderRadius: BorderRadius.circular(16)),
    child: GridView.count(
      crossAxisCount: 3, shrinkWrap: true,
      physics: const NeverScrollableScrollPhysics(),
      mainAxisSpacing: 12, crossAxisSpacing: 8,
      childAspectRatio: 1.4,
      children: items.map((it) {
        return Column(children: [
          Text(it[1] as String,
              style: const TextStyle(fontSize: 28)),
          const SizedBox(height: 4),
          Text(it[0] as String,
              style: const TextStyle(color: _ink,
                  fontSize: 13,
                  fontWeight: FontWeight.w800)),
          const SizedBox(height: 2),
          Text('${it[2]} 位在播',
              style: TextStyle(color: it[3] as Color,
                  fontSize: 11,
                  fontWeight: FontWeight.w700)),
        ]);
      }).toList(),
    ),
  );
}

按地区分类网格用 6 大区域(华北、华东、华南、西北、西南、东北)覆盖全国农业产区。每个区域用 emoji 国旗 + 主推品类 + 当前在播农户数让用户视觉快速分类。

从「按地区分类」的农产品地理标识与文化共鸣设计角度再补一段。中国农业有强烈的地理特色——东北大米、新疆瓜果、云南咖啡、海南热带水果。这段地区分类让用户按地理偏好挑选,每个区域下匹配对应的特色农产品。如果未来要扩展支持「我的家乡」自动置顶(让用户的家乡分类排第一位),可以接入 HMS Account 的籍贯标签。鸿蒙 6.0 的家乡识别让用户每次打开应用都看到熟悉的乡土气息。

心得

助农直播类 App 的视觉灵魂是"温暖 + 淳朴"——红绿色调给田园直播感,emoji 地区图标给亲切感。开发时最容易犯的错是把直播做得过于商业化,反而失去"助农"的情感共鸣。我的策略是突出"已助农 X 斤"等数字让用户感受到真实贡献。从能力扩展角度,助农直播最值得在鸿蒙端打造的是"AVCodecKit 低延迟 + LocationKit 老乡匹配 + 超级终端大屏 + HiCloud 助农数据链上存证"四件套。
在这里插入图片描述

总结

本篇实现了 Harmony 6.0 端的助农直播首页,5 个模块、纯 UI、零依赖、约 340 行代码。从扩展角度建议生产业务里:把视频解码接入 AVCodecKit;把老乡匹配接入 LocationKit;把大屏看播接入超级终端;把"关注农户开播"做成 FormExtensionAbility 桌面卡片;把助农数据接入 HiCloud。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐