/imboy-flutter

使用erlang做后端、flutter做前端开发的一款开源的即时聊天解决方案(基于erlang/otp的高性能web框架 cowboy 做后端服务,用 "8核16G 主机(100万PPS)"压测,保持100万+TCP稳定在线90分钟以上) 支持基于webrtc 一对一视频通话功能

Primary LanguageDart

imboy

A new Flutter project for imboy.

imboy 的Flutter项目

因为我是**人,所以选择了木兰宽松许可证, 第2版

所有依赖的flutter包大部分是“MIT License” 和 “Apache-2.0 License”(以后陆续补充一个)

APP截图

更多截图来这里

功能树

  • 大概的大大小小功能实现情况:
    • TODO 54
    • OK 144

查看

Version

力求基于“语义化版本控制的规范”(语义化版本 2.0.0)实施版本管理.

Strive to implement version management based on "Specification for Semantic version Control"(Semantic Versioning 2.0.0).

已知待修复待完善的功能

  • “查找聊天记录”列表定位到具体的聊天记录(不在当前页面)的情况下没法定义(暂时没见到解决版本)
  • 聊天界面表情符弹框没法像键盘一样"点击页面其他空白处收缩回去" (已解决)
  • 拍摄视频、上传视频功能(体验不是很好,一分半的视频大小为11M,有待优化)filesize":11649618,"width":640,"height":360,"duration":86876.0
  • 红米A5手机,拍摄视频问题
  • use-flutter-cache-manager-with-video-player 如何边下载、边缓存、边播放 https://stackoverflow.com/questions/68249750/use-flutter-cache-manager-with-video-player
  • 语音消息播放之后红点需要取消(已解决)
  • 一对一视频通话偶尔有问题,需要进一步优化(以优化,可以进一步调整体验)
  • 消息"长按事件"不够灵活(已解决)
  • 群消息读取的时候是直接limit读取的,这样可能对于未读消息数量这块不好处理

多语言

https://github.com/jonataslaw/get_cli/tree/master/translations

flutter pub global activate get_cli
flutter pub global activate --source=git https://github.com/inyong1/get_cli.git

export PATH="$PATH":"$HOME/.pub-cache/bin"

// 生产json文件之后执行下面命令
get generate locales assets/locales on lib/component/locales

System locale

return GetMaterialApp(
    locale: Get.deviceLocale,
);

开发环境遇到的一些问题

参考 FAQ

目录规范与命名

  • 新增 ./lib/page/single/ 目录,所有的 "类单页面" 都放到该目录
  • 避免 master/slave 等术语
Old New 说明
master main 主要的
slave subordinate 从属的
blacklist denylist 拒绝名单
.env
Lib
│
├──page 落地页
│   ├──single 所有的 "类单页面" 都放到该目录
│   └──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 方法导出

init

git clone https://gitee.com/imboy-pub/imboy-flutter.git imboyflutter
cd imboyflutter
cp ./example.env ./.env.dev && cp ./example.env ./.env.pro

cp example_main.dart main.dart

dart run build_runner build --verbose
dart run build_runner build --delete-conflicting-outputs


//修改.env文件时
dart run build_runner clean && dart run build_runner build --delete-conflicting-outputs

open -a Xcode ./ios


plugin

mkdir -p plugin && cd plugin/

git clone https://gitee.com/imboy-tripartite-deps/flutter_chat_ui.git

cd flutter_chat_ui && git fetch origin leeyi && git checkout -f leeyi

然后在 pubspec.yaml 文件添加

  flutter_chat_ui:
    path: plugin/flutter_chat_ui

参考 https://juejin.cn/post/6844903920322478093

macos

open macos/Runner.xcworkspace

分析工具

deps:

arch -x86_64 pod update

arch -x86_64 pod install

cd ios
arch -x86_64 pod update

arch -x86_64 pod update flutter_webrtc

cd ios && rm -rf Podfile.lock pods .symlink Runner.xcworkspace && pod install --repo-update && flutter clean && flutter pub get && pod update && cd ..

deps flutter_dotenv

https://pub.flutter-io.cn/packages/flutter_dotenv

cd imboy-flutter
cp -f assets/example.env assets/.env

// 手动修改相应的配置

deps flutter_native_splash

dart run flutter_native_splash:create

deps flutter_sound_install

https://flutter-sound.canardoux.xyz/flutter_sound_install.html On iOS you need to add usage descriptions to info.plist:

cd ios
pod cache clean --all
rm Podfile.lock
rm -rf .symlinks/
cd ..
flutter clean
flutter pub get
cd ios
pod update
pod repo update
pod install --repo-update
pod update
pod install
cd ..

voice_message_package

mkdir -p plugin && cd plugin/
git clone https://gitee.com/imboy-tripartite-deps/voice_message_player.git voice_message_package