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 +4 -4
- data/.gitignore +3 -1
- data/CHANGELOG.md +37 -0
- data/Gemfile.lock +1 -1
- data/lib/flr.rb +11 -3
- data/lib/flr/checker.rb +16 -13
- data/lib/flr/command.rb +447 -137
- data/lib/flr/constant.rb +5 -1
- data/lib/flr/util/asset_util.rb +325 -32
- data/lib/flr/util/code_util.rb +226 -47
- data/lib/flr/util/file_util.rb +154 -22
- data/lib/flr/version.rb +2 -2
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 316ebc8040b9907879cfd70d48163feb0804aba01ee376b21a7cb2c3dfa84347
         | 
| 4 | 
            +
              data.tar.gz: a45282c1106560d8d4b0c7acb35a0f221a2e0e3fe057977aa339d78f80af43f1
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ff1cd35e4be19a8b82af8c27c996ab67e7d37106fd3fcc2f843ea04cb01d89a6b5a65c437308d16cf79d02c9d9b171e6e6d994393ccd05fbf2fdb735b7b9b2c4
         | 
| 7 | 
            +
              data.tar.gz: be14c260f62e3421587569ec97f091278e98443474f3e074e7ccb1efcb6ee95d36c6293269c95c593472522859a88b487a43bac23bf77111b29d3f0200189b53
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        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
    
    
    
        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. | 
| 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. | 
| 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( | 
| 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 | 
            -
                #  | 
| 16 | 
            -
                # Checker.check_pubspec_file_is_existed( | 
| 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( | 
| 19 | 
            -
                  pubspec_file_path =  | 
| 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 #{ | 
| 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 | 
            -
                #  | 
| 92 | 
            -
                #  | 
| 93 | 
            -
                #  | 
| 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 | | 
| 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 | | 
| 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 | 
            -
                #  | 
| 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 | 
            -
                   | 
| 52 | 
            -
                   | 
| 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 | 
            -
                   | 
| 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 | 
            -
                 | 
| 62 | 
            -
             | 
| 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 | 
            -
                  #  - 检测当前 | 
| 181 | 
            +
                  # 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程
         | 
| 182 | 
            +
                  #  - 检测当前flutter主工程根目录是否存在 pubspec.yaml
         | 
| 68 183 | 
             
                  #
         | 
| 69 184 |  | 
| 70 185 | 
             
                  begin
         | 
| 71 | 
            -
                    Checker.check_pubspec_file_is_existed( | 
| 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 | 
            -
             | 
| 192 | 
            +
                  # ----- Step-1 End -----
         | 
| 74 193 |  | 
| 75 | 
            -
             | 
| 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 | 
            -
                  # 添加 | 
| 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 | 
            -
             | 
| 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 | 
            -
                   | 
| 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(" | 
| 357 | 
            +
                  puts("[√]: init #{flutter_project_root_dir} done !!!")
         | 
| 358 | 
            +
                  puts("--------------------------------------------------------------------------------------")
         | 
| 160 359 |  | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 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  | 
| 168 | 
            -
             | 
| 169 | 
            -
                  # ----- Step-4 End -----
         | 
| 407 | 
            +
                  puts("[√]: get dependencies for all flutter projects done !!!")
         | 
| 170 408 |  | 
| 171 | 
            -
                   | 
| 409 | 
            +
                  # ----- Step-3 End -----
         | 
| 410 | 
            +
                  puts("")
         | 
| 411 | 
            +
                  puts("[√]: generate for all flutter projects done !!!")
         | 
| 172 412 | 
             
                end
         | 
| 173 413 |  | 
| 174 | 
            -
                #  | 
| 175 | 
            -
                def self. | 
| 176 | 
            -
             | 
| 177 | 
            -
                  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 | 
            -
                  # 检测 | 
| 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,  | 
| 225 | 
            -
            #{"[*]: to fix it, you  | 
| 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 | 
| 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 | 
            -
                  #  -  | 
| 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 | 
            -
                  # -  | 
| 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( | 
| 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( | 
| 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( | 
| 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数组为 | 
| 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 | 
            -
                   | 
| 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 | 
            -
                     | 
| 677 | 
            +
                    flutter_config["assets"] = asset_array
         | 
| 399 678 | 
             
                  else
         | 
| 400 | 
            -
                     | 
| 679 | 
            +
                    flutter_config.delete("assets")
         | 
| 401 680 | 
             
                  end
         | 
| 402 681 |  | 
| 403 682 | 
             
                  if font_family_config_array.length > 0
         | 
| 404 | 
            -
                     | 
| 683 | 
            +
                    flutter_config["fonts"] = font_family_config_array
         | 
| 405 684 | 
             
                  else
         | 
| 406 | 
            -
                     | 
| 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 | 
            -
                  #  | 
| 417 | 
            -
                  # | 
| 418 | 
            -
                  # | 
| 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 | 
            -
                   | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 424 | 
            -
             | 
| 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 | 
            -
                   | 
| 435 | 
            -
             | 
| 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- | 
| 864 | 
            +
                  # ----- Step-22 End -----
         | 
| 865 | 
            +
             | 
| 866 | 
            +
                  puts("[√]: generate for #{flutter_project_root_dir} done !!!")
         | 
| 867 | 
            +
                  puts("--------------------------------------------------------------------------------------")
         | 
| 593 868 |  | 
| 594 869 | 
             
                end
         | 
| 595 870 |  | 
| 596 | 
            -
                #  | 
| 871 | 
            +
                # 启动一个资源变化监控服务,若检测到flutter主工程和其子工程有资源变化,就自动执行generate_all操作;
         | 
| 872 | 
            +
                # 手动输入`Ctrl-C`,可终止当前服务
         | 
| 597 873 | 
             
                def self.start_monitor
         | 
| 598 874 |  | 
| 599 | 
            -
                   | 
| 875 | 
            +
                  flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
         | 
| 600 876 |  | 
| 601 877 | 
             
                  # ----- Step-1 Begin -----
         | 
| 602 | 
            -
                  #  | 
| 603 | 
            -
                  # | 
| 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( | 
| 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 | 
            -
                  #  | 
| 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 | 
            -
                   | 
| 636 | 
            -
                   | 
| 637 | 
            -
             | 
| 638 | 
            -
                   | 
| 639 | 
            -
                   | 
| 640 | 
            -
                   | 
| 641 | 
            -
             | 
| 642 | 
            -
                   | 
| 643 | 
            -
                   | 
| 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 | 
            -
                  #  | 
| 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 | 
            -
                   | 
| 656 | 
            -
                   | 
| 657 | 
            -
             | 
| 658 | 
            -
                   | 
| 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(" | 
| 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(" | 
| 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(" | 
| 1011 | 
            +
                    puts("generate for all projects now ...")
         | 
| 702 1012 | 
             
                    puts("\n")
         | 
| 703 | 
            -
                     | 
| 1013 | 
            +
                    generate_all
         | 
| 704 1014 | 
             
                    puts("\n")
         | 
| 705 | 
            -
                    puts(" | 
| 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)
         |