flr 1.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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)