# Flutter
# 准备工作
- 开始学习开发 (opens new window)
- Flutter源码地址 (opens new window)
- Flutter代码风格 (opens new window)
- 软件包库 pub.dev (opens new window)
# 推荐框架
# 几种状态管理框架对比
状态管理框架 | Pub like | star | 状态更新 | 共享状态 | 颗粒度 | 说明 |
---|---|---|---|---|---|---|
setState | - | - | Yes | No | - | 适用于较小规模 widget 的暂时性状态的基础管理方法 |
StreamController | - | - | Yes | No | 变量 | 基于流/观察者模式的基础管理方法 |
RxDart | 712 | 2600 | Yes | No | 变量 | 基于流/观察者模式的框架 |
MobX | 224 | 1700 | Yes | No | 变量 | 基于观察及响应的状态管理常用库 |
GetX | 1723 | 1300 | Yes | Yes | 变量 | 轻量级响应式状态管理解决方案 |
provider | 2488 | 3000 | Yes | Yes | 类 | 官方推荐的状态共享框架 |
flutter_bloc | 1236 | 5700 | Yes | Yes | 类 | 基于流/观察者模式的框架 |
flutter_redux | 164 | 1300 | Yes | Yes | 前端开发者较为熟悉的状态容器实现。 | |
fish-Redux | 34 | 6800 | Yes | Yes | 基于Redux状态管理的组合式 Flutter 应用框架 |
# Flutter 打包
# Flutter 打包 apk
指令:flutter build apk
会包含以下三组平台(x86_64 、arm64-v8a 、armeabi-v7a)
正确的做法是:针对平台打包,国内的更多的是arm平台
/// 系统系统拆分不同的abi
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
flutter build apk --release --target-platform android-arm
生成aar包,同理
flutter build aar --release --target-platform android-arm
# Flutter 打包 ipa
flutter build ios --release
# 交付成果
已上线应用商店
技术方案:Flutter + Provider;
- 仿造原生天联共创v0.2.0版本内容,进行技术验证;
- 技术方案:Flutter + Fish Redux;
# 注意事项
# 一、pubspec.yaml 问题
在window环境中;如果 主工程
远程依赖私有git中的项目 nim_ui_kit
,项目 nim_ui_kit
又远程依赖私有git中的项目 amap_base
;会导致window环境下的AndroidStudio编译错误,会提示pubspec.yaml
中的某行中存在格式错误的异常报错bug;
# 主工程 依赖 nim_ui_kit网易云信
nim_ui_kit:
git:
url: http://218.106.157.184:3001/flutter/nim_ui_kit
# nim_ui_kit网易云信 依赖 amap_base地图库
amap_base:
git:
url: http://218.106.157.184:3001/flutter/amap_base
# 二、flutter build apk 找不到libflutter.so的问题
flutter 在android打包时,使用 flutter build apk
打出来的包安装后,打开APP会报上述错误
目前的解决方案是先使用 flutter run apk --release
进行打包
# 三、flutter 使用Dio网络库时,要进行抓包代理,加上以下代码
_dio = Dio(options);
// 抓包代理
(_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
// config the http client
client.findProxy = (uri) {a
//proxy all request to localhost:8888
return "PROXY 192.168.100.33:8888";
};
// you can also create a new HttpClient to dio return new HttpClient();
client.badCertificateCallback = (X509Certificate cert, String host, int port)=>true;
};
# 四、flutter版本控制注意:
如:extended_image: ^0.2.2,
使用命令
flutter upgrade
会升级到最新版本(0.2.9);如果不需要升级版本,请固定版本 extended_image: 0.2.2(^符号是关键)
# 五、flutter构建 IOS
时,产生编译的包错误
1、报错Could not find an option named "track-widget-creation时,在Xcode上进行生产archive之前先在终端运行以下命令行:$flutter build ios --release (当前项目运行 sh buildIOS)。
2、其它编译报错,或编译后的包打黑黑屏等;可以先执行 $flutter clean,在编译。
Dart 基础 →