# quanzi-flutter **Repository Path**: jquanzi/quanzi-flutter ## Basic Information - **Project Name**: quanzi-flutter - **Description**: flutter版本的圈子1.0 - **Primary Language**: Dart - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Flutter环境 `flutter doctor -v`: ``` [✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.6 19G2021, locale en-CN) • Flutter version 1.17.5 at /Users/yohom/Library/Flutter/flutter • Framework revision 8af6b2f038 (9 weeks ago), 2020-06-30 12:53:55 -0700 • Engine revision ee76268252 • Dart version 2.8.4 [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2) • Android SDK at /Users/yohom/Library/Android/sdk • Platform android-R, build-tools 29.0.2 • ANDROID_HOME = /Users/yohom/Library/Android/sdk • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 11.6) • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 11.6, Build version 11E708 • CocoaPods version 1.8.4 [!] Android Studio (version 4.0) • Android Studio at /Applications/Android Studio.app/Contents • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593) [!] IntelliJ IDEA Community Edition (version 2020.2.1) • IntelliJ at /Applications/IntelliJ IDEA CE.app • For information about installing plugins, see https://flutter.dev/intellij-setup/#installing-the-plugins [✓] VS Code (version 1.48.2) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.13.2 ``` # 工程架构 本Flutter工程使用BLoC模式, 具体说明请参考 `docs/工程架构`. # 项目信息 ## 工程标识符 - android(ApplicationId): `com.gldcircle.app` - ios(Bundle id): `com.gldcircle.app.ios` ## 文件夹结构 - `lib`: dart源码文件夹; - `src`: - `bloc`: 所有的bloc; - `di`: 依赖注入相关; - `extension`: 已有类的扩展, 一般为工具类; - `mixin`: 提供一些公共组件, 目前抽出了拉流组件和推流组件的公共部分; - `model`: 模型类, 分为领域模型domain model(面向api接口)和视图模型view model(面向widget); - `resource`: 类似android中res文件夹的作用, 引用资源时, 仿照android风格, 例如`R.drawable.xxx`; - `service`: 本地服务(本地存储封装)和远程服务(api接口封装); - `ui`: - `screen`: 所有的页面 - `widget`: 共用的widget - `utils`: 工具类 - `main.dart`: 程序入口 - `android`: android原生项目文件夹; - `ios`: ios原生项目文件夹; - `fonts`: 字体文件夹; - `images`: 图片资源文件夹; - `plugins`: 自定义的三方插件; - `baidu_face_flutter`: 自己开发的百度人脸识别插件; - `flutter_html`: html标签转widget 间接依赖的video_player依赖的播放器和腾讯直播的冲突, 手动统一了原来放在这里; - `fluwx`: ios端与sharesdk_plugin的微信库冲突, 需要统一依赖处理; - `jpush-flutter-plugin`: 处理官方极光插件bug; - `tencent_im_plugin`: 腾讯IM插件; - `tencent_live_fluttify`: 自己开发的腾讯直播插件; - `tencent_rtc_plugin`: 腾讯实时通信插件, 由于腾讯系的三个插件底层有公共依赖, 所需要单独出来合并冲突的内容; - `test`: 测试文件夹; - `docs`: 文档文件夹; - `tools`: 工具文件夹, 执行工具命令时, 先设置对应二进制文件为可执行 - 图片引用生成: 执行命令`tools/res_gen/bin/res_gen images fonts`, 生成后可使用代码`R.drawable.xxx`引用图片; - 组件(即页面模板)生成: 执行命令`tools/feat_template_gen/bin/feat_template_gen componentName 中文组件名`生成模板代码, 然后执行`flutter packages pub run build_runner watch --delete-conflicting-outputs`, 此命令为生成依赖注入需要的代码. 生成过后就可以使用`Navigator.of(context).pushNamed(Routes.component_name)`进入刚生成的页面; - 模型类生成: 执行命令`dart tools/json2dart.dart.snapshot ModelName '{"some_field":"some_value"}'`, 执行后将会把代码复制到粘贴板, 可直接粘贴; ## 路由 所有页面的路由均在`lib/src/app.dart`的`_onGenerateRoute`方法内. # 部署 Android端的打包密钥为`android/quanzi.jks`, 别名以及密码相关信息存放在`android/gradle.properties`下. 控制正式服/测试服切换的值为`lib/src/resource/constants.dart`内的的`kProduction`变量, 开发者接手时, 测试服地址可能已经失效, 请自行搭建测试服. ## 打包 - android: `flutter build apk --target-platform android-arm,android-arm64 --verbose --no-shrink` - ios: `flutter build ios` ## 发布 - android: 可直接发布apk文件 - ios: 参考flutter官方文档 https://flutter.dev/docs/deployment/ios