flr 1.0.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: edfe0b5dab4b4dda94c17168b8178f80a0903ccb989f498253dca53041b4d751
4
- data.tar.gz: 9e83742e89792aeba9f52a0b68e793afa633c0bc84261a1deb3aff8741ed08c2
3
+ metadata.gz: 316ebc8040b9907879cfd70d48163feb0804aba01ee376b21a7cb2c3dfa84347
4
+ data.tar.gz: a45282c1106560d8d4b0c7acb35a0f221a2e0e3fe057977aa339d78f80af43f1
5
5
  SHA512:
6
- metadata.gz: 722245bb8985fe6c2d29116d4cc8b3f8434a21aea05af0acbfcf6e2c62cf9ed1236a2ceea57c389a74f54b39c6f9699bddd631701bb45eff7d6e6a13a186c705
7
- data.tar.gz: a8a4136d3e6146eca5f81488ae8adbb3a6307f2bbfa7d952ddebd8ed81f9358ed81d5b87cd652445676bfa47fbfd89305c483b0cccd5c1e6ebb9ee8ee7a079ca
6
+ metadata.gz: ff1cd35e4be19a8b82af8c27c996ab67e7d37106fd3fcc2f843ea04cb01d89a6b5a65c437308d16cf79d02c9d9b171e6e6d994393ccd05fbf2fdb735b7b9b2c4
7
+ data.tar.gz: be14c260f62e3421587569ec97f091278e98443474f3e074e7ccb1efcb6ee95d36c6293269c95c593472522859a88b487a43bac23bf77111b29d3f0200189b53
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  .rbenv-version
8
8
  .rbx/
9
9
  /concatenated.*
10
+ build/
10
11
 
11
12
  # Yardoc
12
13
  /.yardoc
@@ -36,4 +37,5 @@
36
37
  # Local Pubspec Tests
37
38
  pubspec.yaml
38
39
  pubspec.lock
39
- .packages
40
+ .packages
41
+ .dart_tool/
data/CHANGELOG.md CHANGED
@@ -1,4 +1,41 @@
1
+ ## 3.2.0
2
+
3
+ - Support for nullsafety-feature of Dart 2.12
4
+
5
+ ## 3.1.0
6
+
7
+ - Support for processing (init/generate/monitor) multi projects (the main project and its sub projects in one workspace)
8
+
9
+ - Support for auto merging old asset specifications when specifying new assets
10
+
11
+ > This is can help you to auto keep the manually added asset specifications.
12
+
13
+ ## 3.0.0
14
+
15
+ - Support for processing non-implied resource file
16
+
17
+ > - non-implied resource file: the resource file which is outside of `lib/` directory, for example:
18
+ > - `~/path/to/flutter_r_demo/assets/images/test.png`
19
+ > - `~/path/to/flutter_r_demo/assets/images/3.0x/test.png`
20
+ > - implied resource file: the resource file which is inside of `lib/` directory, for example:
21
+ > - `~/path/to/flutter_r_demo/lib/assets/images/hot_foot_N.png`
22
+ > - `~/path/to/flutter_r_demo/lib/assets/images/3.0x/hot_foot_N.png`
23
+
24
+ - New recommended flutter resource structure
25
+
26
+ ## 2.0.0
27
+
28
+ - New asset generation algorithm to support all kinds of standard or nonstandard image/text resource structure
29
+ - New asset-id generation algorithm to support assets with the same filename but different path
30
+ - New recommended flutter resource structure
31
+
32
+ ## 1.1.0
33
+
34
+ - Improve generate-capability to support nonstandard image resource structure
35
+ - Add recommend-capability to display the recommended flutter resource structure
36
+
1
37
  ## 1.0.0
38
+
2
39
  - Support for processing font assets ( `.ttf`, `.otf`, `.ttc`)
3
40
  - Improve robustness
4
41
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flr (1.0.0)
4
+ flr (3.2.0)
5
5
  bundler (~> 2.0, >= 2.0.2)
6
6
  listen (~> 3.0, >= 3.2.1)
7
7
  thor (~> 1.0, >= 1.0.1)
data/lib/flr.rb CHANGED
@@ -42,7 +42,7 @@ More details see https://github.com/Fly-Mix/flr-cli
42
42
 
43
43
  LONGDESC
44
44
  def init
45
- Command.init
45
+ Command.init_all
46
46
  end
47
47
 
48
48
  desc "run [--auto]", "Scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\""
@@ -62,10 +62,18 @@ More details see https://github.com/Fly-Mix/flr-cli
62
62
  LONGDESC
63
63
  option :auto, :type => :boolean
64
64
  def run_command
65
- options[:auto] ? Command.start_monitor : Command.generate
65
+ options[:auto] ? Command.start_monitor : Command.generate_all
66
66
  end
67
-
68
67
  map 'run' => :run_command
69
68
 
69
+ desc "recommend", "Display the recommended flutter resource structure"
70
+ long_desc <<-LONGDESC
71
+ Display the good flutter resource structure which is recommended by Flr.
72
+
73
+ LONGDESC
74
+ def recommend
75
+ Command.display_recommended_flutter_resource_structure
76
+ end
77
+
70
78
  end
71
79
  end
data/lib/flr/checker.rb CHANGED
@@ -4,7 +4,7 @@ module Flr
4
4
  # 条件检测器,提供检测各种条件是否合法的方法
5
5
  class Checker
6
6
 
7
- # check_pubspec_file_is_existed(flutter_dir) -> true
7
+ # check_pubspec_file_is_existed(flutter_project_dir) -> true
8
8
  #
9
9
  # 检测当前flutter工程目录是否存在pubspec.yaml文件
10
10
  # 若存在,返回true
@@ -12,16 +12,16 @@ module Flr
12
12
  #
13
13
  # === Examples
14
14
  #
15
- # flutter_dir = "~/path/to/flutter_project/pubspec.yaml"
16
- # Checker.check_pubspec_file_is_existed(flutter_dir)
15
+ # flutter_project_dir = "~path/to/flutter_r_demo"
16
+ # Checker.check_pubspec_file_is_existed(flutter_project_dir)
17
17
  #
18
- def self.check_pubspec_file_is_existed(flutter_dir)
19
- pubspec_file_path = flutter_dir + "/pubspec.yaml"
18
+ def self.check_pubspec_file_is_existed(flutter_project_dir)
19
+ pubspec_file_path = flutter_project_dir + "/pubspec.yaml"
20
20
 
21
21
  if File.exist?(pubspec_file_path) == false
22
22
  message = <<-MESSAGE
23
23
  #{"[x]: #{pubspec_file_path} not found".error_style}
24
- #{"[*]: please make sure pubspec.yaml is existed in #{flutter_dir}".tips_style}
24
+ #{"[*]: please make sure pubspec.yaml is existed in #{flutter_project_dir}".tips_style}
25
25
  MESSAGE
26
26
 
27
27
  raise(message)
@@ -63,7 +63,7 @@ module Flr
63
63
  return true
64
64
  end
65
65
 
66
- # check_flr_assets_is_legal(flr_config) -> resource_dir_result_tuple
66
+ # check_flr_assets_is_legal(flutter_project_dir, flr_config) -> resource_dir_result_tuple
67
67
  #
68
68
  # 检测当前flr配置信息中的assets配置是否合法
69
69
  # 若合法,返回资源目录结果三元组 resource_dir_result_triplet
@@ -88,11 +88,12 @@ module Flr
88
88
  # 判断flr的assets配置合法的标准是:assets配置的resource_dir数组中的legal_resource_dir数量大于0。
89
89
  #
90
90
  # === Examples
91
- # assets_legal_resource_dir_array = ["lib/assets/images", "lib/assets/texts"]
92
- # fonts_legal_resource_dir_array = ["lib/assets/fonts"]
93
- # illegal_resource_dir_array = ["wrong/path/to/non-existed_folder"]
91
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
92
+ # assets_legal_resource_dir_array = ["~/path/to/flutter_r_demo/lib/assets/images", "~/path/to/flutter_r_demo/lib/assets/texts"]
93
+ # fonts_legal_resource_dir_array = ["~/path/to/flutter_r_demo/lib/assets/fonts"]
94
+ # illegal_resource_dir_array = ["~/path/to/flutter_r_demo/to/non-existed_folder"]
94
95
  #
95
- def self.check_flr_assets_is_legal(flr_config)
96
+ def self.check_flr_assets_is_legal(flutter_project_dir, flr_config)
96
97
  core_version = flr_config["core_version"]
97
98
  dartfmt_line_length = flr_config["dartfmt_line_length"]
98
99
  assets_resource_dir_array = flr_config["assets"]
@@ -119,7 +120,8 @@ module Flr
119
120
  fonts_legal_resource_dir_array = []
120
121
  illegal_resource_dir_array = []
121
122
 
122
- assets_resource_dir_array.each do |resource_dir|
123
+ assets_resource_dir_array.each do |relative_resource_dir|
124
+ resource_dir = flutter_project_dir + "/" + relative_resource_dir
123
125
  if File.exist?(resource_dir) == true
124
126
  assets_legal_resource_dir_array.push(resource_dir)
125
127
  else
@@ -127,7 +129,8 @@ module Flr
127
129
  end
128
130
  end
129
131
 
130
- fonts_resource_dir_array.each do |resource_dir|
132
+ fonts_resource_dir_array.each do |relative_resource_dir|
133
+ resource_dir = flutter_project_dir + "/" + relative_resource_dir
131
134
  if File.exist?(resource_dir) == true
132
135
  fonts_legal_resource_dir_array.push(resource_dir)
133
136
  else
data/lib/flr/command.rb CHANGED
@@ -27,12 +27,118 @@ module Flr
27
27
  # Listen Class Instance
28
28
  @@listener = nil
29
29
 
30
- # show the version of flr
30
+ # display the version of flr
31
31
  def self.version
32
32
  version_desc = "Flr version #{Flr::VERSION}\nCoreLogic version #{Flr::CORE_VERSION}"
33
33
  puts(version_desc)
34
34
  end
35
35
 
36
+ # display recommended flutter resource structure
37
+ def self.display_recommended_flutter_resource_structure
38
+ message = <<-MESSAGE
39
+ Flr recommends the following flutter resource structure schemes:
40
+
41
+ #{"------------------------------ scheme 1 ------------------------------".bold.bg_red}
42
+
43
+ flutter_project_root_dir
44
+ ├── build
45
+ │ ├── ..
46
+ ├── lib
47
+ │ ├── assets
48
+ │ │ ├── images #{"// image resource directory of all modules".red}
49
+ │ │ │ ├── \#{module} #{"// image resource directory of a module".red}
50
+ │ │ │ │ ├── \#{main_image_asset}
51
+ │ │ │ │ ├── \#{variant-dir} #{"// image resource directory of a variant".red}
52
+ │ │ │ │ │ ├── \#{image_asset_variant}
53
+ │ │ │ │
54
+ │ │ │ ├── home #{"// image resource directory of home module".red}
55
+ │ │ │ │ ├── home_badge.svg
56
+ │ │ │ │ ├── home_icon.png
57
+ │ │ │ │ ├── 3.0x #{"// image resource directory of a 3.0x-ratio-variant".red}
58
+ │ │ │ │ │ ├── home_icon.png
59
+ │ │ │ │
60
+ │ │ ├── texts #{"// text resource directory".red}
61
+ │ │ │ │ #{"// (you can also break it down further by module)".red}
62
+ │ │ │ └── test.json
63
+ │ │ │ └── test.yaml
64
+ │ │ │ │
65
+ │ │ ├── fonts #{"// font resource directory of all font-families".red}
66
+ │ │ │ ├── \#{font-family} #{"// font resource directory of a font-family".red}
67
+ │ │ │ │ ├── \#{font-family}-\#{font_weight_or_style}.ttf
68
+ │ │ │ │
69
+ │ │ │ ├── Amiri #{"// font resource directory of Amiri font-family".red}
70
+ │ │ │ │ ├── Amiri-Regular.ttf
71
+ │ │ │ │ ├── Amiri-Bold.ttf
72
+ │ │ │ │ ├── Amiri-Italic.ttf
73
+ │ │ │ │ ├── Amiri-BoldItalic.ttf
74
+ │ ├── ..
75
+
76
+ #{"[*]: Then config the resource directories that need to be scanned as follows:".tips_style}
77
+
78
+ #{"flr:".tips_style}
79
+ #{"core_version: #{Flr::CORE_VERSION}".tips_style}
80
+ #{"dartfmt_line_length: #{Flr::DARTFMT_LINE_LENGTH}".tips_style}
81
+ #{"# config the image and text resource directories that need to be scanned".tips_style}
82
+ #{"assets:".tips_style}
83
+ #{"- lib/assets/images".tips_style}
84
+ #{"- lib/assets/texts".tips_style}
85
+ #{"# config the font resource directories that need to be scanned".tips_style}
86
+ #{"fonts:".tips_style}
87
+ #{"- lib/assets/fonts".tips_style}
88
+
89
+ #{"------------------------------ scheme 2 ------------------------------".bold.bg_red}
90
+
91
+ flutter_project_root_dir
92
+ ├── build
93
+ │ ├── ..
94
+ ├── lib
95
+ │ ├── ..
96
+ ├── assets
97
+ │ ├── images #{"// image resource directory of all modules".red}
98
+ │ │ ├── \#{module} #{"// image resource directory of a module".red}
99
+ │ │ │ ├── \#{main_image_asset}
100
+ │ │ │ ├── \#{variant-dir} #{"// image resource directory of a variant".red}
101
+ │ │ │ │ ├── \#{image_asset_variant}
102
+ │ │ │
103
+ │ │ ├── home #{"// image resource directory of home module".red}
104
+ │ │ │ ├── home_badge.svg
105
+ │ │ │ ├── home_icon.png
106
+ │ │ │ ├── 3.0x #{"// image resource directory of a 3.0x-ratio-variant".red}
107
+ │ │ │ │ ├── home_icon.png
108
+ │ │ │
109
+ │ ├── texts #{"// text resource directory".red}
110
+ │ │ │ #{"// (you can also break it down further by module)".red}
111
+ │ │ └── test.json
112
+ │ │ └── test.yaml
113
+ │ │ │
114
+ │ ├── fonts #{"// font resource directory of all font-families".red}
115
+ │ │ ├── \#{font-family} #{"// font resource directory of a font-family".red}
116
+ │ │ │ ├── \#{font-family}-\#{font_weight_or_style}.ttf
117
+ │ │ │
118
+ │ │ ├── Amiri #{"// font resource directory of Amiri font-family".red}
119
+ │ │ │ ├── Amiri-Regular.ttf
120
+ │ │ │ ├── Amiri-Bold.ttf
121
+ │ │ │ ├── Amiri-Italic.ttf
122
+ │ │ │ ├── Amiri-BoldItalic.ttf
123
+ │ ├── ..
124
+
125
+ #{"[*]: Then config the resource directories that need to be scanned as follows:".tips_style}
126
+
127
+ #{"flr:".tips_style}
128
+ #{"core_version: #{Flr::CORE_VERSION}".tips_style}
129
+ #{"dartfmt_line_length: #{Flr::DARTFMT_LINE_LENGTH}".tips_style}
130
+ #{"# config the image and text resource directories that need to be scanned".tips_style}
131
+ #{"assets:".tips_style}
132
+ #{"- assets/images".tips_style}
133
+ #{"- assets/texts".tips_style}
134
+ #{"# config the font resource directories that need to be scanned".tips_style}
135
+ #{"fonts:".tips_style}
136
+ #{"- assets/fonts".tips_style}
137
+ MESSAGE
138
+
139
+ puts(message)
140
+ end
141
+
36
142
  # get the right version of r_dart_library package based on flutter's version
37
143
  # to get more detail, see https://github.com/YK-Unit/r_dart_library#dependency-relationship-table
38
144
  def self.get_r_dart_library_version
@@ -48,48 +154,115 @@ module Flr
48
154
  return r_dart_library_version
49
155
  end
50
156
 
51
- version_with_hotfix_str = flutter_version_result.split(" ")[1]
52
- version_without_hotfix_str = version_with_hotfix_str.split("+")[0]
157
+ flutter_version_with_hotfix_str = flutter_version_result.split(" ")[1]
158
+ flutter_version_without_hotfix_str = flutter_version_with_hotfix_str.split("+")[0]
159
+
160
+ dart_version_str = flutter_version_result.split("Dart")[1]
161
+ dart_version_str.strip!
53
162
 
54
- if Version.new(version_with_hotfix_str) >= Version.new("1.10.15")
163
+ puts("the flutter development environment is:")
164
+ puts(" - Flutter SDK Version: #{flutter_version_with_hotfix_str}")
165
+ puts(" - Dart SDK Version: #{dart_version_str}")
166
+
167
+ if Version.new(flutter_version_with_hotfix_str) >= Version.new("1.10.15")
55
168
  r_dart_library_version = "0.2.1"
169
+ if Version.new(dart_version_str) >= Version.new("2.12.0")
170
+ r_dart_library_version = "0.4.0-nullsafety.0"
171
+ end
56
172
  end
57
173
 
58
174
  return r_dart_library_version
59
175
  end
60
176
 
61
- # 对 flutter 工程进行初始化
62
- def self.init
63
- flutter_project_root_dir = FileUtil.get_cur_flutter_project_root_dir
177
+ def self.init_all
178
+ flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
64
179
 
65
180
  # ----- Step-1 Begin -----
66
- # 进行环境检测:
67
- # - 检测当前 flutter 工程根目录是否存在 pubspec.yaml
181
+ # 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程
182
+ # - 检测当前flutter主工程根目录是否存在 pubspec.yaml
68
183
  #
69
184
 
70
185
  begin
71
- Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
186
+ Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
187
+ rescue Exception => e
188
+ puts(e.message)
189
+ return
190
+ end
72
191
 
73
- pubspec_file_path = FileUtil.get_pubspec_file_path
192
+ # ----- Step-1 End -----
74
193
 
75
- pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
194
+ puts("init all flutter projects now...")
195
+
196
+ # ----- Step-2 Begin -----
197
+ # 获取主工程和其所有子工程,对它们进行init_one操作
198
+ # - 获取flutter主工程根目录下所有的子工程目录
199
+ # - 初始化主工程
200
+ # - 初始化所有子工程
201
+ #
202
+ flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
203
+
204
+ puts("")
205
+ init_one(flutter_main_project_root_dir)
206
+
207
+ flutter_sub_project_root_dir_array.each do |flutter_project_root_dir|
208
+ puts("")
209
+ init_one(flutter_project_root_dir)
210
+ end
211
+
212
+ # ----- Step-2 End -----
213
+
214
+ # ----- Step-3 Begin -----
215
+ # 调用 flutter 工具,为主工程和所有子工程获取依赖
216
+ #
217
+ puts("")
218
+ puts("get dependencies for all flutter projects via execute \"flutter pub get\" now ...")
76
219
 
220
+ get_flutter_pub_cmd = "flutter pub get"
221
+ system(get_flutter_pub_cmd)
222
+
223
+ puts("[√]: get dependencies for all flutter projects done !!!")
224
+
225
+ # ----- Step-3 End -----
226
+ puts("")
227
+ puts("[√]: init all flutter projects done !!!")
228
+
229
+ puts("")
230
+ puts("[*]: if you want to know how to make a good resource structure for your flutter project, please run \"flr recommend\" ".tips_style)
231
+ end
232
+
233
+ # 对指定 flutter 工程进行初始化
234
+ def self.init_one(flutter_project_root_dir)
235
+ puts("------------------------------- init specified project -------------------------------")
236
+
237
+ puts("init #{flutter_project_root_dir} now...")
238
+
239
+ # ----- Step-1 Begin -----
240
+ # 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程
241
+ # - 检测 pubspec.yaml 是否存在
242
+ # - 检测 pubspec.yaml 是否合法
243
+ #
244
+ begin
245
+ Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
246
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
247
+ pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
77
248
  rescue Exception => e
78
249
  puts(e.message)
250
+ puts("[x]: init #{flutter_project_root_dir} failed".error_style)
251
+ puts("--------------------------------------------------------------------------------------")
79
252
  return
80
253
  end
81
254
 
82
255
  # ----- Step-1 End -----
83
256
 
84
- puts("init #{flutter_project_root_dir} now...")
85
-
86
257
  # ----- Step-2 Begin -----
87
258
  # 添加 flr_config 和 r_dart_library 的依赖声明到 pubspec.yaml
88
259
  #
89
260
 
90
261
  dependencies_config = pubspec_config["dependencies"]
91
262
 
92
- # 添加 flr_config pubspec.yaml
263
+ # 添加flr_config到pubspec.yaml:检测当前是否存在flr_config;若不存在,则添加flr_config;若存在,则按照以下步骤处理:
264
+ # - 读取dartfmt_line_length选项、assets选项和fonts选项的值(这些选项值若存在,则应用于新建的flr_config;需要注意,使用前需要判断选项值是否合法:dartfmt_line_length选项值 >=80;assets选项和fonts选项的值为数组)
265
+ # - 新建flr_config,然后使用旧值或者默认值设置各个选项
93
266
  #
94
267
  # flr_config: Flr的配置信息
95
268
  # ```yaml
@@ -99,7 +272,33 @@ module Flr
99
272
  # assets: []
100
273
  # fonts: []
101
274
  # ```
102
- flr_config = Hash["core_version" => "#{Flr::CORE_VERSION}", "dartfmt_line_length" => Flr::DARTFMT_LINE_LENGTH, "assets" => [], "fonts" => []]
275
+
276
+ dartfmt_line_length = Flr::DARTFMT_LINE_LENGTH
277
+ asset_resource_dir_array = []
278
+ font_resource_dir_array = []
279
+
280
+ old_flr_config = pubspec_config["flr"]
281
+ if old_flr_config.is_a?(Hash)
282
+ dartfmt_line_length = old_flr_config["dartfmt_line_length"]
283
+ if dartfmt_line_length.nil? or dartfmt_line_length.is_a?(Integer) == false
284
+ dartfmt_line_length = Flr::DARTFMT_LINE_LENGTH
285
+ end
286
+ if dartfmt_line_length < Flr::DARTFMT_LINE_LENGTH
287
+ dartfmt_line_length = Flr::DARTFMT_LINE_LENGTH
288
+ end
289
+
290
+ asset_resource_dir_array = old_flr_config["assets"]
291
+ if asset_resource_dir_array.nil? or asset_resource_dir_array.is_a?(Array) == false
292
+ asset_resource_dir_array = []
293
+ end
294
+
295
+ font_resource_dir_array = old_flr_config["fonts"]
296
+ if font_resource_dir_array.nil? or font_resource_dir_array.is_a?(Array) == false
297
+ font_resource_dir_array = []
298
+ end
299
+ end
300
+
301
+ flr_config = Hash["core_version" => "#{Flr::CORE_VERSION}", "dartfmt_line_length" => dartfmt_line_length, "assets" => asset_resource_dir_array, "fonts" => font_resource_dir_array]
103
302
  pubspec_config["flr"] = flr_config
104
303
 
105
304
  # 添加 r_dart_library(https://github.com/YK-Unit/r_dart_library)的依赖声明
@@ -108,14 +307,10 @@ module Flr
108
307
  #
109
308
  # r_dart_library的依赖声明:
110
309
  # ```yaml
111
- # r_dart_library:
112
- # git:
113
- # url: "https://github.com/YK-Unit/r_dart_library.git"
114
- # ref: 0.1.1
310
+ # r_dart_library: 0.1.1
115
311
  # ```
116
312
  r_dart_library_version = get_r_dart_library_version
117
- r_dart_library_config = Hash["git" => Hash["url" => "https://github.com/YK-Unit/r_dart_library.git", "ref" => r_dart_library_version]]
118
- dependencies_config["r_dart_library"] = r_dart_library_config
313
+ dependencies_config["r_dart_library"] = r_dart_library_version
119
314
  pubspec_config["dependencies"] = dependencies_config
120
315
 
121
316
  puts("add flr configuration into pubspec.yaml done!")
@@ -130,6 +325,9 @@ module Flr
130
325
  #
131
326
 
132
327
  flutter_config = pubspec_config["flutter"]
328
+ if flutter_config.nil?
329
+ flutter_config = {}
330
+ end
133
331
 
134
332
  flutter_assets = flutter_config["assets"]
135
333
  should_rm_flutter_assets_Key = true
@@ -156,25 +354,67 @@ module Flr
156
354
  # 保存 pubspec.yaml
157
355
  FileUtil.dump_pubspec_config_to_file(pubspec_config, pubspec_file_path)
158
356
 
159
- puts("get dependency \"r_dart_library\" via execute \"flutter pub get\" now ...")
357
+ puts("[√]: init #{flutter_project_root_dir} done !!!")
358
+ puts("--------------------------------------------------------------------------------------")
160
359
 
161
- # ----- Step-4 Begin -----
162
- # 调用 flutter 工具,为 flutter 工程获取依赖
360
+ end
361
+
362
+ def self.generate_all
363
+ flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
364
+
365
+ # ----- Step-1 Begin -----
366
+ # 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程。
367
+ # - 检测当前flutter主工程根目录是否存在 pubspec.yaml
368
+ #
369
+ begin
370
+ Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
371
+ rescue Exception => e
372
+ puts(e.message)
373
+ return
374
+ end
375
+
376
+ # ----- Step-1 End -----
377
+
378
+ puts("generate for all flutter projects now...")
379
+
380
+ # ----- Step-2 Begin -----
381
+ # 获取主工程和其所有子工程,对它们进行generate_one操作
382
+ # - 获取flutter主工程根目录下所有的子工程目录
383
+ # - 对主工程执行generate_one操作
384
+ # - 对所有子工程执行generate_one操作
385
+ #
386
+ flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
387
+
388
+ puts("")
389
+ generate_one(flutter_main_project_root_dir)
390
+
391
+ flutter_sub_project_root_dir_array.each do |flutter_project_root_dir|
392
+ puts("")
393
+ generate_one(flutter_project_root_dir)
394
+ end
395
+
396
+ # ----- Step-2 End -----
397
+
398
+ # ----- Step-3 Begin -----
399
+ # 调用 flutter 工具,为主工程和所有子工程获取依赖
400
+ #
401
+ puts("")
402
+ puts("get dependencies for all flutter projects via execute \"flutter pub get\" now ...")
163
403
 
164
404
  get_flutter_pub_cmd = "flutter pub get"
165
405
  system(get_flutter_pub_cmd)
166
406
 
167
- puts("get dependency \"r_dart_library\" done !!!")
168
-
169
- # ----- Step-4 End -----
407
+ puts("[√]: get dependencies for all flutter projects done !!!")
170
408
 
171
- puts("[√]: init done !!!")
409
+ # ----- Step-3 End -----
410
+ puts("")
411
+ puts("[√]: generate for all flutter projects done !!!")
172
412
  end
173
413
 
174
- # 扫描资源目录,自动为资源添加声明到 pubspec.yaml 和生成 r.g.dart
175
- def self.generate
176
-
177
- flutter_project_root_dir = FileUtil.get_cur_flutter_project_root_dir
414
+ # 为指定 flutter 工程扫描资源目录,自动为资源添加声明到 pubspec.yaml 和生成 r.g.dart
415
+ def self.generate_one(flutter_project_root_dir)
416
+ puts("--------------------------- generate for specified project ---------------------------")
417
+ puts("generate for #{flutter_project_root_dir} now...")
178
418
 
179
419
  # 警告日志数组
180
420
  warning_messages = []
@@ -190,7 +430,7 @@ module Flr
190
430
  begin
191
431
  Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
192
432
 
193
- pubspec_file_path = FileUtil.get_pubspec_file_path
433
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
194
434
 
195
435
  pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
196
436
 
@@ -198,20 +438,26 @@ module Flr
198
438
 
199
439
  flr_config = pubspec_config["flr"]
200
440
 
201
- resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flr_config)
441
+ resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flutter_project_root_dir, flr_config)
202
442
 
203
443
  rescue Exception => e
204
444
  puts(e.message)
445
+ puts("[x]: generate for #{flutter_project_root_dir} failed".error_style)
446
+ puts("--------------------------------------------------------------------------------------")
205
447
  return
206
448
  end
207
449
 
450
+ is_package_project_type = FileUtil.is_package_project_type?(flutter_project_root_dir)
208
451
  package_name = pubspec_config["name"]
209
452
 
210
453
  # ----- Step-1 End -----
211
454
 
212
455
  # ----- Step-2 Begin -----
213
456
  # 进行核心逻辑版本检测:
214
- # 检测Flr配置中的核心逻辑版本号和当前工具的核心逻辑版本号是否一致;若不一致,则生成“核心逻辑版本不一致”的警告日志,存放到警告日志数组
457
+ # 检测flr_config中的core_version和当前工具的core_version是否一致;若不一致,则按照以下规则处理:
458
+ # - 更新flr_config中的core_version的值为当前工具的core_version;
459
+ # - 生成“核心逻辑版本不一致”的警告日志,存放到警告日志数组。
460
+ #
215
461
 
216
462
  flr_core_version = flr_config["core_version"]
217
463
 
@@ -220,9 +466,13 @@ module Flr
220
466
  end
221
467
 
222
468
  if flr_core_version != Flr::CORE_VERSION
469
+ flr_config["core_version"] = Flr::CORE_VERSION
470
+
223
471
  message = <<-MESSAGE
224
- #{"[!]: warning, the core logic version of the configured Flr tool is #{flr_core_version}, while the core logic version of the currently used Flr tool is #{Flr::CORE_VERSION}".warning_style}
225
- #{"[*]: to fix it, you should make sure that the core logic version of the Flr tool you are currently using is consistent with the configuration".tips_style}
472
+ #{"[!]: warning, some team members may be using Flr tool with core_version #{flr_core_version}, while you are using Flr tool with core_version #{Flr::CORE_VERSION}".warning_style}
473
+ #{"[*]: to fix it, you and your team members should use the Flr tool with same core_version".tips_style}
474
+ #{"[*]: \"core_version\" is the core logic version of Flr tool, you can run \"flr version\" to get it".tips_style}
475
+
226
476
  MESSAGE
227
477
 
228
478
  warning_messages.push(message)
@@ -257,16 +507,18 @@ module Flr
257
507
  puts("scan assets now ...")
258
508
 
259
509
  # ----- Step-4 Begin -----
260
- # 扫描assets_legal_resource_dir数组中的legal_resource_dir,输出image_asset数组和illegal_image_file数组:
510
+ # 扫描assets_legal_resource_dir数组中的legal_resource_dir,输出有序的image_asset数组、non_svg_image_asset数组、svg_image_asset数组、illegal_image_file数组:
261
511
  # - 创建image_asset数组、illegal_image_file数组;
262
512
  # - 遍历assets_legal_resource_dir数组,按照如下处理每个资源目录:
263
- # - 扫描当前资源目录和其第1级的子目录,查找所有image_file;
513
+ # - 扫描当前资源目录和其所有层级的子目录,查找所有image_file;
264
514
  # - 根据legal_resource_file的标准,筛选查找结果生成legal_image_file子数组和illegal_image_file子数组;illegal_image_file子数组合并到illegal_image_file数组;
265
515
  # - 根据image_asset的定义,遍历legal_image_file子数组,生成image_asset子数;组;image_asset子数组合并到image_asset数组。
266
516
  # - 对image_asset数组做去重处理;
267
517
  # - 按照字典顺序对image_asset数组做升序排列(一般使用开发语言提供的默认的sort算法即可);
268
- # - 输出image_asset数组和illegal_image_file数组。
269
- #
518
+ # - 按照SVG分类,从image_asset数组筛选得到有序的non_svg_image_asset数组和svg_image_asset数组:
519
+ # - 按照SVG分类,从image_asset数组筛选得到non_svg_image_asset数组和svg_image_asset数组;
520
+ # - 按照字典顺序对non_svg_image_asset数组和svg_image_asset数组做升序排列(一般使用开发语言提供的默认的sort算法即可);
521
+ # - 输出有序的image_asset数组、non_svg_image_asset数组、svg_image_asset数组、illegal_image_file数组。
270
522
 
271
523
  image_asset_array = []
272
524
  illegal_image_file_array = []
@@ -278,13 +530,28 @@ module Flr
278
530
 
279
531
  illegal_image_file_array += illegal_image_file_subarray
280
532
 
281
- image_asset_subarray = AssetUtil.generate_image_assets(legal_image_file_subarray, resource_dir, package_name)
533
+ image_asset_subarray = AssetUtil.generate_image_assets(flutter_project_root_dir, package_name, legal_image_file_subarray)
282
534
  image_asset_array += image_asset_subarray
283
535
  end
284
536
 
285
537
  image_asset_array.uniq!
286
538
  image_asset_array.sort!
287
539
 
540
+ non_svg_image_asset_array = []
541
+ svg_image_asset_array = []
542
+
543
+ image_asset_array.each do |image_asset|
544
+ if FileUtil.is_svg_image_resource_file?(image_asset)
545
+ svg_image_asset_array.push(image_asset)
546
+ else
547
+ non_svg_image_asset_array.push(image_asset)
548
+ end
549
+
550
+ end
551
+
552
+ non_svg_image_asset_array.sort!
553
+ svg_image_asset_array.sort!
554
+
288
555
  # ----- Step-4 End -----
289
556
 
290
557
  # ----- Step-5 Begin -----
@@ -309,7 +576,7 @@ module Flr
309
576
 
310
577
  illegal_text_file_array += illegal_text_file_subarray
311
578
 
312
- text_asset_subarray = AssetUtil.generate_text_assets(legal_text_file_subarray, resource_dir, package_name)
579
+ text_asset_subarray = AssetUtil.generate_text_assets(flutter_project_root_dir, package_name, legal_text_file_subarray)
313
580
  text_asset_array += text_asset_subarray
314
581
  end
315
582
 
@@ -353,7 +620,7 @@ module Flr
353
620
  next
354
621
  end
355
622
 
356
- font_asset_config_array = AssetUtil.generate_font_asset_configs(legal_font_file_array, font_family_dir, package_name)
623
+ font_asset_config_array = AssetUtil.generate_font_asset_configs(flutter_project_root_dir, package_name, legal_font_file_array)
357
624
  font_asset_config_array.sort!{|a, b| a["asset"] <=> b["asset"]}
358
625
 
359
626
  font_family_config = Hash["family" => font_family_name , "fonts" => font_asset_config_array]
@@ -389,23 +656,36 @@ module Flr
389
656
 
390
657
  # ----- Step-8 Begin -----
391
658
  # 为扫描得到的legal_resource_file添加资源声明到pubspec.yaml:
392
- # - 合并image_asset数组和text_asset数组为asset数组(image_asset数组元素在前);
659
+ # - 合并image_asset数组和text_asset数组为new_asset_array(image_asset数组元素在前);
660
+ # - 读取pubspec.yaml中flutter-assets配置,获得old_asset_array,然后和new_asset_array合并为asset数组;
393
661
  # - 修改pubspec.yaml中flutter-assets配置的值为asset数组;
394
662
  # - 修改pubspec.yaml中flutter-fonts配置的值为font_family_config数组。
395
663
 
396
- asset_array = image_asset_array + text_asset_array
664
+ flutter_config = pubspec_config["flutter"]
665
+ if flutter_config.nil?
666
+ flutter_config = {}
667
+ end
668
+
669
+ new_asset_array = image_asset_array + text_asset_array
670
+ old_asset_array = flutter_config["assets"]
671
+ if old_asset_array.nil? or old_asset_array.is_a?(Array) == false
672
+ old_asset_array = []
673
+ end
674
+
675
+ asset_array = AssetUtil.mergeFlutterAssets(flutter_project_root_dir, package_name, new_asset_array, old_asset_array)
397
676
  if asset_array.length > 0
398
- pubspec_config["flutter"]["assets"] = asset_array
677
+ flutter_config["assets"] = asset_array
399
678
  else
400
- pubspec_config["flutter"].delete("assets")
679
+ flutter_config.delete("assets")
401
680
  end
402
681
 
403
682
  if font_family_config_array.length > 0
404
- pubspec_config["flutter"]["fonts"] = font_family_config_array
683
+ flutter_config["fonts"] = font_family_config_array
405
684
  else
406
- pubspec_config["flutter"].delete("fonts")
685
+ flutter_config.delete("fonts")
407
686
  end
408
687
 
688
+ pubspec_config["flutter"] = flutter_config
409
689
  FileUtil.dump_pubspec_config_to_file(pubspec_config, pubspec_file_path)
410
690
 
411
691
  # ----- Step-8 End -----
@@ -413,26 +693,31 @@ module Flr
413
693
  puts("specify scanned assets in pubspec.yaml done !!!")
414
694
 
415
695
  # ----- Step-9 Begin -----
416
- # 按照SVG分类,从image_asset数组筛选得到有序的non_svg_image_asset数组和svg_image_asset数组:
417
- # - 按照SVG分类,从image_asset数组筛选得到non_svg_image_asset数组和svg_image_asset数组;
418
- # - 按照字典顺序对non_svg_image_asset数组和svg_image_asset数组做升序排列(一般使用开发语言提供的默认的sort算法即可);
696
+ # 分别遍历non_svg_image_asset数组、svg_image_asset数组、text_asset数组,
697
+ # 根据asset_id生成算法,分别输出non_svg_image_asset_id字典、svg_image_asset_id 字典、text_asset_id字典。
698
+ # 字典的key为asset,value为asset_id。
419
699
  #
700
+ non_svg_image_asset_id_dict = Hash[]
701
+ svg_image_asset_id_dict = Hash[]
702
+ text_asset_id_dict = Hash[]
703
+
704
+ non_svg_image_asset_array.each do |asset|
705
+ used_asset_id_array = non_svg_image_asset_id_dict.values
706
+ asset_id = CodeUtil.generate_asset_id(asset, used_asset_id_array, Flr::PRIOR_NON_SVG_IMAGE_FILE_TYPE)
707
+ non_svg_image_asset_id_dict[asset] = asset_id
708
+ end
420
709
 
421
- non_svg_image_asset_array = []
422
- svg_image_asset_array = []
423
-
424
- image_asset_array.each do |image_asset|
425
- file_extname = File.extname(image_asset).downcase
426
-
427
- if file_extname.eql?(".svg")
428
- svg_image_asset_array.push(image_asset)
429
- else
430
- non_svg_image_asset_array.push(image_asset)
431
- end
710
+ svg_image_asset_array.each do |asset|
711
+ used_asset_id_array = svg_image_asset_id_dict.values
712
+ asset_id = CodeUtil.generate_asset_id(asset, used_asset_id_array, Flr::PRIOR_SVG_IMAGE_FILE_TYPE)
713
+ svg_image_asset_id_dict[asset] = asset_id
432
714
  end
433
715
 
434
- non_svg_image_asset_array.sort!
435
- svg_image_asset_array.sort!
716
+ text_asset_array.each do |asset|
717
+ used_asset_id_array = text_asset_id_dict.values
718
+ asset_id = CodeUtil.generate_asset_id(asset, used_asset_id_array, Flr::PRIOR_TEXT_FILE_TYPE)
719
+ text_asset_id_dict[asset] = asset_id
720
+ end
436
721
 
437
722
  # ----- Step-9 End -----
438
723
 
@@ -471,7 +756,7 @@ module Flr
471
756
  #
472
757
 
473
758
  r_dart_file.puts("\n")
474
- g__R_Image_AssetResource_class_code = CodeUtil.generate__R_Image_AssetResource_class(non_svg_image_asset_array, package_name)
759
+ g__R_Image_AssetResource_class_code = CodeUtil.generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name, is_package_project_type)
475
760
  r_dart_file.puts(g__R_Image_AssetResource_class_code)
476
761
 
477
762
  # ----- Step-13 End -----
@@ -481,7 +766,7 @@ module Flr
481
766
  #
482
767
 
483
768
  r_dart_file.puts("\n")
484
- g__R_Svg_AssetResource_class_code = CodeUtil.generate__R_Svg_AssetResource_class(svg_image_asset_array, package_name)
769
+ g__R_Svg_AssetResource_class_code = CodeUtil.generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name, is_package_project_type)
485
770
  r_dart_file.puts(g__R_Svg_AssetResource_class_code)
486
771
 
487
772
  # ----- Step-14 End -----
@@ -491,7 +776,7 @@ module Flr
491
776
  #
492
777
 
493
778
  r_dart_file.puts("\n")
494
- g__R_Text_AssetResource_class_code = CodeUtil.generate__R_Text_AssetResource_class(text_asset_array, package_name)
779
+ g__R_Text_AssetResource_class_code = CodeUtil.generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name, is_package_project_type)
495
780
  r_dart_file.puts(g__R_Text_AssetResource_class_code)
496
781
 
497
782
  # ----- Step-15 End -----
@@ -502,7 +787,7 @@ module Flr
502
787
  #
503
788
 
504
789
  r_dart_file.puts("\n")
505
- g__R_Image_class_code = CodeUtil.generate__R_Image_class(non_svg_image_asset_array, package_name)
790
+ g__R_Image_class_code = CodeUtil.generate__R_Image_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name)
506
791
  r_dart_file.puts(g__R_Image_class_code)
507
792
 
508
793
  # ----- Step-16 End -----
@@ -512,7 +797,7 @@ module Flr
512
797
  #
513
798
 
514
799
  r_dart_file.puts("\n")
515
- g__R_Svg_class_code = CodeUtil.generate__R_Svg_class(svg_image_asset_array, package_name)
800
+ g__R_Svg_class_code = CodeUtil.generate__R_Svg_class(svg_image_asset_array, svg_image_asset_id_dict, package_name)
516
801
  r_dart_file.puts(g__R_Svg_class_code)
517
802
 
518
803
  # ----- Step-17 End -----
@@ -522,7 +807,7 @@ module Flr
522
807
  #
523
808
 
524
809
  r_dart_file.puts("\n")
525
- g__R_Text_class_code = CodeUtil.generate__R_Text_class(text_asset_array, package_name)
810
+ g__R_Text_class_code = CodeUtil.generate__R_Text_class(text_asset_array, text_asset_id_dict, package_name)
526
811
  r_dart_file.puts(g__R_Text_class_code)
527
812
 
528
813
  # ----- Step-18 End -----
@@ -566,19 +851,6 @@ module Flr
566
851
  # ----- Step-21 End -----
567
852
 
568
853
  # ----- Step-22 Begin -----
569
- # 调用flutter工具,为flutter工程获取依赖
570
- #
571
-
572
- get_flutter_pub_cmd = "flutter pub get"
573
- puts("execute \"#{get_flutter_pub_cmd}\" now ...")
574
- system(get_flutter_pub_cmd)
575
- puts("execute \"#{get_flutter_pub_cmd}\" done !!!")
576
-
577
- # ----- Step-22 End -----
578
-
579
- puts("[√]: generate done !!!")
580
-
581
- # ----- Step-23 Begin -----
582
854
  # 判断警告日志数组是否为空,若不为空,输出所有警告日志
583
855
  #
584
856
 
@@ -589,87 +861,125 @@ module Flr
589
861
  end
590
862
  end
591
863
 
592
- # ----- Step-23 End -----
864
+ # ----- Step-22 End -----
865
+
866
+ puts("[√]: generate for #{flutter_project_root_dir} done !!!")
867
+ puts("--------------------------------------------------------------------------------------")
593
868
 
594
869
  end
595
870
 
596
- # 启动一个资源变化监控服务,若检测到有资源变化,就自动执行generate操作;手动输入`Ctrl-C`,可终止当前服务
871
+ # 启动一个资源变化监控服务,若检测到flutter主工程和其子工程有资源变化,就自动执行generate_all操作;
872
+ # 手动输入`Ctrl-C`,可终止当前服务
597
873
  def self.start_monitor
598
874
 
599
- flutter_project_root_dir = FileUtil.get_cur_flutter_project_root_dir
875
+ flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
600
876
 
601
877
  # ----- Step-1 Begin -----
602
- # 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程:
603
- # - 检测当前flutter工程根目录是否存在pubspec.yaml
604
- # - 检测当前pubspec.yaml中是否存在Flr的配置
605
- # - 检测当前flr_config中的resource_dir配置是否合法:
606
- # 判断合法的标准是:assets配置或者fonts配置了至少1个legal_resource_dir
878
+ # 对flutter主工程进行环境检测:
879
+ # - 检测当前flutter主工程根目录是否存在 pubspec.yaml
607
880
  #
608
881
 
609
882
  begin
610
- Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
611
-
612
- pubspec_file_path = FileUtil.get_pubspec_file_path
613
-
614
- pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
615
-
616
- Checker.check_flr_config_is_existed(pubspec_config)
617
-
618
- flr_config = pubspec_config["flr"]
619
-
620
- resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flr_config)
621
-
883
+ Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
622
884
  rescue Exception => e
623
885
  puts(e.message)
624
886
  return
625
887
  end
626
888
 
627
- package_name = pubspec_config["name"]
628
-
629
889
  # ----- Step-1 End -----
630
890
 
891
+
631
892
  # ----- Step-2 Begin -----
632
- # 执行一次 flr generate 操作
893
+ # 对flutter工程进行合法资源目录检测:
894
+ # - 获取主工程的所有子工程根目录,生成工程根目录数组flutter_project_root_dir_array
895
+ # - 遍历flutter_project_root_dir_array,获取每个工程的legal_resource_dir数组:
896
+ # - 从flr_config中的assets配置获取assets_legal_resource_dir数组;
897
+ # - 从flr_config中的fonts配置获取fonts_legal_resource_dir数组;
898
+ # - 合并assets_legal_resource_dir数组和fonts_legal_resource_dir数组到legal_resource_dir数组。
899
+ # - 检测legal_resource_dir数组是否为空,为空则结束运行。
633
900
  #
901
+ puts("")
902
+ puts("get the valid resource directories of all projects now ...")
634
903
 
635
- now_str = Time.now.to_s
636
- puts("--------------------------- #{now_str} ---------------------------")
637
- puts("scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\" now ...")
638
- puts("\n")
639
- generate
640
- puts("\n")
641
- puts("scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\" done !!!")
642
- puts("---------------------------------------------------------------------------------")
643
- puts("\n")
904
+ flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
905
+ flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
906
+
907
+ flutter_project_root_dir_array = []
908
+ flutter_project_root_dir_array.push(flutter_main_project_root_dir)
909
+ flutter_project_root_dir_array += flutter_sub_project_root_dir_array
910
+
911
+ # 合法的资源目录数组
912
+ legal_resource_dir_array = []
913
+ # 非法的资源目录数组
914
+ illegal_resource_dir_array = []
915
+
916
+ flutter_project_root_dir_array.each do |flutter_project_root_dir|
917
+ begin
918
+ puts("")
919
+ puts("--------------------------- get info of specified project ----------------------------")
920
+ puts("get the valid resource directories from #{flutter_project_root_dir} now...")
921
+
922
+ Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
923
+
924
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
925
+
926
+ pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
927
+
928
+ Checker.check_flr_config_is_existed(pubspec_config)
929
+
930
+ flr_config = pubspec_config["flr"]
931
+
932
+ resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flutter_project_root_dir, flr_config)
933
+
934
+ assets_legal_resource_dir_array = resource_dir_result_tuple[0]
935
+ fonts_legal_resource_dir_array = resource_dir_result_tuple[1]
936
+ legal_resource_dir_array += (assets_legal_resource_dir_array + fonts_legal_resource_dir_array)
937
+
938
+ illegal_resource_dir_array += resource_dir_result_tuple[2]
939
+ puts("get the valid resource directories from #{flutter_project_root_dir} done !!!")
940
+ puts("--------------------------------------------------------------------------------------")
941
+ rescue Exception => e
942
+ puts(e.message)
943
+ puts("[x]: #{flutter_project_root_dir} has no valid resource directories".error_style)
944
+ puts("--------------------------------------------------------------------------------------")
945
+ end
946
+ end
947
+
948
+ if legal_resource_dir_array.length <= 0
949
+ puts("")
950
+ puts("[x]: have no valid resource directories to be monitored".error_style)
951
+ return
952
+ end
953
+
954
+ puts("")
955
+ puts("get the valid resource directories of all projects done !!!")
644
956
 
645
957
  # ----- Step-2 End -----
646
958
 
959
+
647
960
  # ----- Step-3 Begin -----
648
- # 获取legal_resource_dir数组:
649
- # - 从flr_config中的assets配置获取assets_legal_resource_dir数组;
650
- # - 从flr_config中的fonts配置获取fonts_legal_resource_dir数组;
651
- # - 合并assets_legal_resource_dir数组和fonts_legal_resource_dir数组为legal_resource_dir数组。
961
+ # 执行一次 generate_all 操作
652
962
  #
653
963
 
654
- # 合法的资源目录数组
655
- assets_legal_resource_dir_array = resource_dir_result_tuple[0]
656
- fonts_legal_resource_dir_array = resource_dir_result_tuple[1]
657
-
658
- legal_resource_dir_array = assets_legal_resource_dir_array + fonts_legal_resource_dir_array
659
-
660
- # 非法的资源目录数组
661
- illegal_resource_dir_array = resource_dir_result_tuple[2]
964
+ puts("")
965
+ puts("now generate for all projects once before launching the monitoring service ...")
966
+ puts("")
967
+ generate_all
968
+ puts("")
969
+ puts("did generate for all projects, now is going to launching the monitoring service ...")
662
970
 
663
971
  # ----- Step-3 End -----
664
972
 
973
+
665
974
  # ----- Step-4 Begin -----
666
975
  # 启动资源监控服务
667
976
  # - 启动一个文件监控服务,对 legal_resource_dir 数组中的资源目录进行文件监控
668
977
  # - 若服务检测到资源变化(资源目录下的发生增/删/改文件),则执行一次 flr generate 操作
669
978
  #
670
979
 
980
+ puts("")
671
981
  now_str = Time.now.to_s
672
- puts("--------------------------- #{now_str} ---------------------------")
982
+ puts("----------------------------- #{now_str} -----------------------------")
673
983
  puts("launch a monitoring service now ...")
674
984
  puts("launching ...")
675
985
  # stop the monitoring service if exists
@@ -686,7 +996,7 @@ module Flr
686
996
  puts(" - #{resource_dir}".warning_style)
687
997
  end
688
998
  end
689
- puts("---------------------------------------------------------------------------------")
999
+ puts("--------------------------------------------------------------------------------------")
690
1000
  puts("\n")
691
1001
 
692
1002
  # Allow array of directories as input #92
@@ -694,16 +1004,16 @@ module Flr
694
1004
  @@listener = Listen.to(*legal_resource_dir_array, ignore: [/\.DS_Store/], latency: 0.5, wait_for_delay: 5, relative: true) do |modified, added, removed|
695
1005
  # for example: 2013-03-30 03:13:14 +0900
696
1006
  now_str = Time.now.to_s
697
- puts("--------------------------- #{now_str} ---------------------------")
1007
+ puts("----------------------------- #{now_str} -----------------------------")
698
1008
  puts("modified resource files: #{modified}")
699
1009
  puts("added resource files: #{added}")
700
1010
  puts("removed resource files: #{removed}")
701
- puts("scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\" now ...")
1011
+ puts("generate for all projects now ...")
702
1012
  puts("\n")
703
- generate
1013
+ generate_all
704
1014
  puts("\n")
705
- puts("scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\" done !!!")
706
- puts("---------------------------------------------------------------------------------")
1015
+ puts("generate for all projects done !!!")
1016
+ puts("--------------------------------------------------------------------------------------")
707
1017
  puts("\n")
708
1018
  puts("[*]: the monitoring service is monitoring the asset changes, and then auto scan assets, specifies assets and generates \"r.g.dart\" ...".tips_style)
709
1019
  puts("[*]: you can press \"Ctrl-C\" to terminate it".tips_style)