• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 聊天实例应用
2
3### 介绍
4
5这是一个仿聊天类应用,使用了静态布局搭建了不同的页面。为了优化内存与性能体验,在部分list场景使用了懒加载。
6
7本示例用到了 图片处理能力接口[@ohos.multimedia.image](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-image.md )。
8
9文件存储管理能力接口[@ohos.fileio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-fileio.md)10
11
12### 效果预览
13|主页|通讯录|发现|个人页面|
14|-------|-------|-------|-------|
15|![](screenshots/device/chat_home.png)|![](screenshots/device/chat_address.png)|![](screenshots/device/chat_found.png)|![](screenshots/device/chat_me.png)|
16
17使用说明
18
191.应用包含“聊天”、”通讯录“、”发现“、”我“四个主页面,使用Tabs组件实现模块的切换,“聊天”和“通讯录”模块使用了LazyForEach懒加载功能。
20
212.二级及以上页面左上角都有一个返回按钮。
22
233.聊天内容页面的下方输入框点击可以输入内容,表情的图标点击可以发送图片。
24
254.“发现”页面的“朋友圈”点击会进入“朋友圈”页面。
26
27### 工程目录
28```
29entry/src/main/MainAbility
30|---/common
31|   |---BasicDataSource.ets                // 封装整个FeatureAbility模块启用,监听Ability对应的窗口等逻辑
32|   |---Loggger.ets                        // 封装整个日志
33|   |---MsgBase.ets                        // 组件传值定义页面
34|---/components
35|   |---Header.ets                         // 定义应用头部导航栏
36|---/pages
37|   |---ChatDetailPage.ets                 // 具体的某一聊天页面
38|   |---ChatListPage.ets                   // 整体聊天页面
39|   |---DiscoverPage.ets                   // 发现页面
40|   |---FriendsMomentsPage.ets             // 朋友圈页面
41|   |---FriendsPage.ets                    // 通讯录页面
42|   |---Index.ets                          // 首页
43|   |---SettingPage.ets                    // 我的页面
44|---resources/images                       // 放置图片,icon资源等
45
46```
47#### 相关概念
48
49懒加载:开发框架提供数据懒加载(LazyForEach组件)从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。
50
51### 具体实现
521、定义要跳转子页面:在entry/pages/index.ets中通过TabContent()定义要跳转的子页面,[源码参考](./entry/src/main/ets/pages/Index.ets)
53例如:跳转通讯录界面:TabContent() {
54FriendsPage() }。
552、使用LazyForEach数据懒加载对“聊天”和“通讯录”模块进行数据渲染:当LazyForEach在滚动容器中使用,框架会根据滚动容器可视区域按需创建组件,当组件划出可视区域外时,框架会进行组件销毁回收以降低内存占用,[源码参考](./entry/src/main/ets/pages/FriendsPage.ets )。
563、页面之间的跳转通过在config.json中先配置好相关路由,并通过router.push()进行页面跳转,例如:跳转到搜索页面router.push({ url: 'pages/SearchPage' })。
574、页面组件加载前,通过fileio.readSync以同步的方式读取数据,在EntryAbility生命周期中获取对应的Want信息。
58
59### 相关权限
60
61不涉及。
62
63### 依赖
64
65不涉及。
66
67### 约束与限制
68
691.本示例已适配API version 10版本SDK,版本号:4.0.7.5。
70
712.本示例需要使用DevEco Studio 3.1 Release (Build Version: 3.1.0.500, built on April 28, 2023)及以上才可编译运行。
72
73### 下载
74
75如需单独下载本工程,执行如下命令:
76
77````
78git init
79git config core.sparsecheckout true
80echo code/Solutions/IM/Chat/ > .git/info/sparse-checkout
81git remote add origin https://gitee.com/openharmony/applications_app_samples.git
82git pull origin master
83````