导语

在之前的实战中,我们虽然实现了网络数据的获取与展示,但“技术资讯”模块依然停留在一个简单的 Demo 阶段: 数据源 为无意义的文字、UI 交互单一(只有列表并无详情)。

为了让 TechHub 名副其实,我们对内容模块进行了重构。我们引入了技术文章数据模型,实现了 Markdown 详情页渲染,并打通了列表到详情的交互闭环,提升了应用的实用性。

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

一、 数据源优化:丰富内容维度

1. 扩展数据模型

为了承载丰富的技术文章信息,我们对 Post 模型进行了扩展,不再局限于简单的 titlebody

// lib/models/post.dart
class Post {
  final int id;
  final String title;
  final String author;      // 新增:作者
  final String category;    // 新增:分类(如 Flutter/OpenHarmony)
  final String publishDate; // 新增:发布时间
  final String imageUrl;    // 新增:封面图
  // ...
}

2. 模拟真实数据流

在后端 API 尚未就绪的情况下,我们在 ApiService 中通过“数据拦截”的方式,将 jsonplaceholder 返回的数据动态替换为模拟的技术文章数据。

// lib/services/api_service.dart
final List<String> _techTitles = [
  'Flutter 3.0 新特性全解析',
  'OpenHarmony 应用开发入门指南',
  'Dart 语言异步编程最佳实践',
  // ...
];

// 在 fetchPosts 中进行 Mock 注入
return data.map((json) {
  return Post(
    // ...
    title: _techTitles[post.id % _techTitles.length],
    category: post.id % 2 == 0 ? 'Flutter 开发' : 'OpenHarmony 实战',
    // ...
  );
}).toList();

这样,用户在列表中看到的不再是乱码,而是“Flutter 性能优化”、“鸿蒙 ArkUI 实战”等贴近开发者场景的内容。

在这里插入图片描述

二、 详情页开发:Markdown 渲染实战

技术文章往往包含大量的代码块、引用和列表,普通的文本组件难以满足展示需求。因此,我们引入了 flutter_markdown 库来提供更好的阅读体验。

1. 依赖添加

pubspec.yaml 中添加依赖:

dependencies:
  flutter_markdown: ^0.6.14

2. 构建 PostDetailPage

新建 lib/pages/post_detail_page.dart,我们使用 Markdown 组件来解析和渲染文章内容,并自定义了样式表(StyleSheet)以匹配 App 的设计语言。

Markdown(
  data: markdownContent,
  styleSheet: MarkdownStyleSheet(
    h1: Theme.of(context).textTheme.headlineMedium,
    code: TextStyle(
      backgroundColor: Colors.grey.shade200,
      fontFamily: 'monospace', // 等宽字体显示代码
    ),
    // ...
  ),
)

现在,文章中的 Dart 代码片段、引用块和图片都能被正常渲染。

在这里插入图片描述

三、 交互升级:从列表到详情

最后,我们改造了列表页的 Card 组件,使用 InkWell 包裹内容,响应用户的点击事件。

// lib/pages/post_list_page.dart
InkWell(
  onTap: () {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => PostDetailPage(post: post),
      ),
    );
  },
  child: Column(
    // ... 更精致的卡片布局:包含作者头像、分类标签等
  ),
)

同时,我们对卡片 UI 进行了升级,增加了作者头像、发布时间和分类标签,使列表信息更加直观。

四、 总结

通过本次重构,TechHub 的资讯模块完成了优化:

  1. 数据真实化:模拟了贴近实际场景的技术内容。
  2. 展示专业化:支持 Markdown 渲染,适合技术文章阅读。
  3. 交互完整化:实现了列表 -> 详情的跳转。

现在的 TechHub,已经不再是一个空壳 Demo,而是一个初具雏形的技术社区客户端。

参考资源:

本项目代码已托管至 AtomGit:https://atomgit.com/Betelgeuse76/my_first_ohos_app

Logo

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

更多推荐