Leo's Studio.

解决Flutter版本不一致的flutterw

字数统计: 469阅读时长: 1 min
2019/06/21

参考

Flutter 混合开发组件化与工程化架构

前言

开发 Flutter 应用的同学都知道,有个痛点就是如果是团队协作开发的话,就会存在使用的 Flutter 版本不一致的问题,就算只是个人开发,如果需要用 ci 打包的话,打包机上的版本也需要去保持一致,比如 A 同学在开发时,发现 Flutter 低版本有个 bug,升级到高版本就可以解决,但 B 同学并没有同步升级,这就导致在两方打出来的包不一样,如果这个 bug 不明显,那这里就会有很大的隐患,使用 ci 同理。

gradlew

如果有使用 gradle 的同学会知道,在使用 gradle 构建应用时,会推荐使用 gradlew,这样会使用在 gradle-wrapper.properties 中配置的 gradle 版本,这就是解决了 gradle 版本差异的问题。

flutterw

同理,我们也可以仿 gradle 这种做法写一个 flutterw 的脚本,我们用 flutterw 来代替 flutter 命令。
首先我们先在 wrapper 目录下创建一个 flutter-wrapper.properties

1
2
3
4
5
distributionUrl=https://github.com/flutter/flutter.git
flutterVersion=1.6.6
flutterChannel=dev
androidDir=.android
iosDir=.ios

上面三个不用解释,androidDir 和 iosDir 是用于指定在哪里生成 flutter.sdkFLUTTER_ROOT 的配置,将 sdk 目录指向我们的固定版本的 Flutter SDK。接下来我们就可以使用 flutterw 来代替 flutter。

flutterw

原理

flutterw 的实现并不麻烦,首先我们从 flutter-wrapper.properties 读取配置,判断是否需要下载 Flutter SDK,我们会将 SDK 下载在 .flutter 目录下,接着判断是否需要切换版本,然后将我们的参数传递给 flutter 脚本,最后设置 SDK 目录。

源码

github

这里我只实现了 sh 脚本,bat 版本后面有空再实现了,或者哪位大佬实现下,提个 PR,感激不尽。

CATALOG
  1. 1. 参考
  2. 2. 前言
  3. 3. gradlew
  4. 4. flutterw
  5. 5. 原理
  6. 6. 源码