# imboy-flutter
**Repository Path**: outsourcingLife/imboy-flutter
## Basic Information
- **Project Name**: imboy-flutter
- **Description**: 后端服务自研的IM客户端(基于 cowboy 的即时聊天后端服务,使用 "8核16G 主机(100万PPS)"压测,保持100万+TCP稳定在线90分钟以上)
- **Primary Language**: Dart
- **License**: MulanPSL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 29
- **Created**: 2022-05-25
- **Last Updated**: 2022-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# imboy
A new Flutter project for imboy.
imboy 的Flutter项目
因为我是中国人,所以选择了[木兰宽松许可证, 第2版](https://gitee.com/imboy-pub/imboy-flutter/blob/main/LICENSE)
所有依赖的flutter包大部分是“MIT License” 和 “Apache-2.0 License”(以后陆续补充一个)
## APP截图
更多截图[来这里](https://gitee.com/imboy-pub/imboy-images)
## 功能 (单个功能实现了,)
* 用户登录(隐藏密码、显示密码,登录密码传输基于RSA算法加密传输) OK
* “在其他设备登录了”同类型设备强制下线功能(提示"你的账号于19:20在[设备名称]设备上登录了")
* 用户Email注册功能(获取Email验证码,密码传输基于RSA算法加密传输)OK
* 用户通过Email找回密码 OK
* 用户退出 OK
* 文本聊天 数据聊天分页 OK
* 聊天消息长按右键菜单 OK
* 文本聊天 右键菜单之删除消息功能 OK
* 文本聊天 右键菜单之复制消息功能 OK
* 文本聊天 右键菜单之撤回文本消息功能 OK
* 发送消息到服务器,服务判断对端是否在线
* 在线,投递消息给TO, 收到TO的回复后投递给FROM
* 离线,回复消息给From,修正之前的消息(已经投递/未投递),做一个"离线的撤销消息"以便二次投递
* 删除消息、或者撤回消息之后,需要更新对应的会话信息 OK
* 文本聊天 右键菜单之撤回文本消息"重新编辑"功能 OK
* 文本消息双击全屏显示(单击关闭之) OK
* *
* 发送表情消息 OK
* 文本聊天 右键菜单之转发消息功能 TODO
* 文本聊天 右键菜单之收藏消息功能 TODO
* 文本聊天 右键菜单之引用消息功能 TODO
* 文本聊天 右键菜单之多选消息功能 TODO
* 未读消息提醒 OK
* 我的
* 单击头像,预览图像功能 OK
* 个人主页
* 更换用户头像功能 OK
* 更换昵称 TODO
* 更换账号 TODO
* 设置性别 TODO
* 设置地区 TODO
* 修改密码功能 TODO
* 我的地址管理 TODO
* 登录设备列表 TODO
* 修改登录设备备注名称 TODO
* 我的二维码功能 TODO
* 扫描二维码添加好友功能 TODO
* APP启动引导动画 OK (启动时间大概需要6秒,待优化之)
* 删除会话 OK
* 搜索联系人 TODO
* 添加分组、编辑分组、删除分组 TODO
* 发送图片 OK
* 拍摄照片上传 OK
* 聊天界面“单击or双击图片”全屏展示,再单击图片取消全屏 OK
* 压缩上传 OK
* 文件秒传功能(首先通过文件sha1值查询存储服务是否已经上传过,再重新上传) OK
* 发送视频、拍摄短视频 OK
* 发送文件 OK
* 语音消息录音、发送、播放功能 OK
* 删除消息(清理消息对应的缓存附件,删除会话,清理所有会话对应的消息的缓存附件) TODO
* 附件上传进度条 OK (引入 flutter_easyloading: ^3.0.3,体验待优化)
* 修改密码 TODO
* 添加好友 TODO
* 扫描二维码添加好友 TODO
* 修改个人资料基本信息 TODO
* 多语言支持 OK(服务端还没有支持多语言、很多文案还没有配置多语言)
* 创建群 TODO
* 群聊天 TODO
* 群其他功能 TODO
* 以.env文件来管理APP环境相关的常量配置
## 已知待修复待完善的功能
* 聊天界面表情符弹框没法像键盘一样"点击页面其他空白处收缩回去" (已解决)
* 拍摄视频、上传视频功能(体验不是很好,一分半的视频大小为11M,有待优化)filesize":11649618,"width":640,"height":360,"duration":86876.0
* 红米A5手机,拍摄视频问题
* https://github.com/flutter/flutter/issues/40519
* https://github.com/fluttercandies/flutter_wechat_camera_picker/issues/12
* use-flutter-cache-manager-with-video-player 如何边下载、边缓存、边播放 https://stackoverflow.com/questions/68249750/use-flutter-cache-manager-with-video-player
* 语音消息播放之后红点需要取消
* 点击多条语音消息一起播放了,体验不好需要优化,语音消息其他体验测试
## flutter_dotenv
https://pub.flutter-io.cn/packages/flutter_dotenv
```
cd imboy-flutter
cp -f assets/example.env assets/.env
// 手动修改相应的配置
```
## flutter_native_splash
```
flutter pub run flutter_native_splash:create
```
## 多语言
https://github.com/jonataslaw/get_cli/tree/master/translations
```
flutter pub global activate get_cli
export PATH="$PATH":"$HOME/.pub-cache/bin"
mkdir -p assets assets/locales lib/component/locales
// cd assets/locales/
// wget https://raw.githubusercontent.com/jonataslaw/get_cli/master/translations/zh_CN.json
// https://github.com/jonataslaw/get_cli/blob/master/translations/en.json
// 生产json文件之后执行下面命令
get generate locales assets/locales on lib/component/locales
```
## 临时解决 CocoaPods not installed. Skipping pod install
https://github.com/flutter/flutter/issues/97251
```
open /Applications/Android\ Studio\ 4.2\ Preview.app
```
## Dart 在线运行环境
* https://www.nhooo.com/tool/dart/
## 目录规范与命名
```
Lib
│
├──page 落地页
│ └──login 页面落地页文件夹
│ ├──login_binding.dart => class LoginBinding
│ ├──login_logic.dart => class LoginLogic
│ ├──login_state.dart => class LoginState
│ └──login_view.dart => class LoginPage 后缀为page为落地页 唯一入口
├──component 通用组件
│ ├──extension
│ └──get_extension.dart => class GetExtension
│ ├──helper 公共方法
│ └──func.dart => 常规方法、通用方法、全局方法可以用过这个入口export 避免重复引入、可以作用通过用方法入口
│ ├──http HTTP客户端封装
│ └──http.dart =>
│ ├──ui
│ └──common.dart => class UserObject
│ ├──view
│ └──user_object.dart => class UserObject
│ └──widget
│ └──user_object.dart => class UserObject
├──store 数据集中管理
│ ├──index.dart 实例化Provider export model类
│ ├──proto pb协议转换代码
│ ├──service pb协议 yyp协议 等等转义成 dart方法
│ ├──model
│ │ ├──user_model.dart => class UserModel
│ │ └──index.dart => export all models
│ └──object
│ └──user_object.dart => class UserObject
├──config 配置中心
│ ├──index.dart 配置变量与切换方法
└──router 路由
└── 页面映射配置、observe 方法导出
```
## plugin
```
cd plugin/
git submodule add https://gitee.com/imboy-tripartite-deps/flutter_chat_ui.git flutter_chat_ui
cd flutter_chat_ui/
git fetch origin leeyi && git checkout -f leeyi
git submodule add https://gitee.com/imboy-tripartite-deps/popup_menu.git popup_menu
```
然后在 pubspec.yaml 文件添加
```
flutter_chat_ui:
path: plugin/flutter_chat_ui
popup_menu:
path: plugin/popup_menu
```
参考 https://juejin.cn/post/6844903920322478093
## 分析工具
* https://pub.flutter-io.cn/packages/fps_monitor 这是一个能在 profile/debug 模式下,直观帮助我们评估页面流畅度的工具!!