├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── contributors.yml │ ├── format.yml │ └── test.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .pre-commit-hooks.yaml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── bin ├── import_sorter.dart └── main.dart ├── example ├── README.md └── example_app │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── example_app │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ └── launch_background.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle │ ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ ├── lib │ ├── anotherFile.dart │ ├── anotherFile2.dart │ └── main.dart │ ├── macos │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ └── app_icon_64.png │ │ ├── Base.lproj │ │ └── MainMenu.xib │ │ ├── Configs │ │ ├── AppInfo.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── Warnings.xcconfig │ │ ├── DebugProfile.entitlements │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ ├── pubspec.yaml │ └── web │ ├── favicon.png │ ├── icons │ ├── Icon-192.png │ └── Icon-512.png │ ├── index.html │ └── manifest.json ├── lib ├── args.dart ├── files.dart └── sort.dart ├── pubspec.yaml └── test └── sort_test.dart /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: 'bug' 6 | assignees: '@gleich' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | What command or actions did you take to produce this error? 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Meta Information:** 23 | - Dart Version: 24 | - `import_sorter` Version: 25 | - Is it a Flutter project? 26 | - What version of Flutter are you using (if flutter project): 27 | 28 | **Additional context** 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/contributors.yml: -------------------------------------------------------------------------------- 1 | name: contributors 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | contributor_list: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout Repository 13 | uses: actions/checkout@v4 14 | - name: Contributor List 15 | uses: cjdenio/contributor_list@master 16 | with: 17 | commit_message: 📝 Update contributors list 18 | max_contributors: 10 19 | -------------------------------------------------------------------------------- /.github/workflows/format.yml: -------------------------------------------------------------------------------- 1 | name: format 2 | 3 | on: 4 | - push 5 | - pull_request 6 | 7 | jobs: 8 | format: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout Repository 12 | uses: actions/checkout@v4 13 | - name: Setup Flutter SDK 14 | uses: subosito/flutter-action@v2 15 | with: 16 | sdk: stable 17 | - name: Run pub get 18 | run: dart pub get 19 | working-directory: ./example/example_app 20 | - name: Run format 21 | run: dart format --set-exit-if-changed . 22 | 23 | import_sorter: 24 | runs-on: ubuntu-latest 25 | steps: 26 | - name: Checkout Repository 27 | uses: actions/checkout@v4 28 | - name: Setup Dart SDK 29 | uses: dart-lang/setup-dart@v1 30 | with: 31 | sdk: stable 32 | - name: Run import_sorter 33 | run: | 34 | dart pub get 35 | dart run import_sorter --exit-if-changed 36 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | - push 5 | - pull_request 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Checkout Repository 13 | uses: actions/checkout@v4 14 | - name: Setup Dart SDK 15 | uses: dart-lang/setup-dart@v1 16 | with: 17 | sdk: stable 18 | - name: Install dependencies 19 | run: dart pub get 20 | - name: Run tests 21 | run: dart pub run test 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | 13 | # Editor and IDE files 14 | .idea/ 15 | .vscode/ 16 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: . 3 | rev: "master" 4 | hooks: 5 | - id: dart-import-sorter 6 | -------------------------------------------------------------------------------- /.pre-commit-hooks.yaml: -------------------------------------------------------------------------------- 1 | - &dart 2 | id: dart-import-sorter 3 | name: Dart Import Sorter 4 | entry: dart pub run import_sorter 5 | language: system 6 | types: [dart] 7 | require_serial: true 8 | description: | 9 | Dart package to automatically organize your dart imports. Any dart project supported! 10 | Will sort imports alphabetically and then group them in the following order: 11 | 1. Dart imports 12 | 2. Flutter imports 13 | 3. Package imports 14 | 4. Project imports 15 | - << : *dart 16 | id: flutter-import-sorter 17 | name: Flutter Import Sorter 18 | entry: flutter pub run import_sorter 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 4.6.0 2 | 3 | - Fix generated_plugin_registrant.dart not being ignored ([#52](https://github.com/fluttercommunity/import_sorter/pull/52)) 4 | - Only print "Sorted Imports for ..." for the files that were changed ([#54](https://github.com/fluttercommunity/import_sorter/pull/54)) 5 | 6 | ## 4.5.1 7 | 8 | - Fix problem with single line files ([#42](https://github.com/fluttercommunity/import_sorter/issues/42)) 9 | 10 | ## 4.5.0 11 | 12 | - No longer rely on pubspec.yaml for getting dependency imports ([#34](https://github.com/fluttercommunity/import_sorter/issues/34)) 13 | - Improve formatting 14 | 15 | ## 4.4.3 16 | 17 | - Fix packages that are prefixed with `flutter` ([#34](https://github.com/fluttercommunity/import_sorter/issues/34)) 18 | 19 | ## 4.4.2 20 | 21 | - Add null-safety support ([#49](https://github.com/fluttercommunity/import_sorter/issues/49)) 22 | 23 | ## 4.4.1 24 | 25 | - Fix return when there are 0 imports ([#37](https://github.com/fluttercommunity/import_sorter/issues/37)) 26 | 27 | ## 4.4.0 28 | 29 | - The name of a file is yellow if it isn't changed. ([#36](https://github.com/fluttercommunity/import_sorter/issues/36)) 30 | - Display the number of imports sorted out of the total number of imports for a file. ([#36](https://github.com/fluttercommunity/import_sorter/issues/36)) 31 | 32 | ## 4.3.1 33 | 34 | - Remove analyzer CI 35 | 36 | ## 4.3.0 37 | 38 | - Filter what files get sorted on the fly with arguments ([#27](https://github.com/fluttercommunity/import_sorter/issues/27)) 39 | - Upgrade all dependencies 40 | 41 | ## 4.2.2 42 | 43 | - Add test_driver folder ([#30](https://github.com/fluttercommunity/import_sorter/issues/30)) 44 | 45 | ## 4.2.1 46 | 47 | - Replace relative import with package import 48 | 49 | ## 4.2.0 50 | 51 | - Have relative imports come other imports ([#25](https://github.com/fluttercommunity/import_sorter/issues/25)) 52 | 53 | ## 4.1.0 54 | 55 | - Sort imports alphabetically ([#23](https://github.com/fluttercommunity/import_sorter/issues/23)) 56 | 57 | ## 4.0.0 58 | 59 | - Add `--no-comments` flag ([#20](https://github.com/fluttercommunity/import_sorter/issues/20)) 60 | - Add `--exit-if-changed` flag ([#21](https://github.com/fluttercommunity/import_sorter/issues/21)) 61 | 62 | ## 3.1.0 63 | 64 | - Use regex for the `ignored_files` option. 65 | 66 | ## 3.0.6 67 | 68 | - Remove pub get feature. Was causing problems on linux ([#14](https://github.com/fluttercommunity/import_sorter/issues/14)) 69 | 70 | ## 3.0.5 71 | 72 | - Improve cli doc 73 | - Change flutter emoji to 🐦 74 | 75 | ## 3.0.4 76 | 77 | - Actually exit the program when pub get fails 78 | 79 | ## 3.0.3 80 | 81 | - Fix removal of blank line when no imports 82 | 83 | ## 3.0.2 84 | 85 | - Improve user output 86 | 87 | ## 3.0.1 88 | 89 | - Move issue templates to correct location 90 | 91 | ## 3.0.0 92 | 93 | - Fix problem with imports in multiline strings. 94 | - Fix problem with code before imports. 95 | - Add GitHub issue templates. 96 | - Use args for arguments. This brings the addition of the `--help` flag. 97 | - Add some sick looking terminal with colors. File names are now in green so its easier to see. 98 | 99 | ## 2.0.3 100 | 101 | - Fix problem when no `dev_dependencies are present` 102 | 103 | ## 2.0.2 104 | 105 | - Drop process_run dependant 106 | - Change run emoji 107 | 108 | ## 2.0.1 109 | 110 | - Resolve minor linting issues 111 | 112 | ## 2.0.0 113 | 114 | - Add `pubspec.yaml` config option 115 | - Improve terminal output 116 | - Clean up code 117 | - Add ignore_files file options in config 118 | 119 | ## 1.0.10 120 | 121 | - Moved package to Flutter Community 122 | 123 | ## 1.0.9 124 | 125 | - Resolve issue #3 with commented out files 126 | 127 | ## 1.0.8 128 | 129 | - Resolve issue #2 with transitive dependencies 130 | 131 | ## 1.0.7 132 | 133 | - Fix duplicate imports when contain same package name 134 | 135 | ## 1.0.6 136 | 137 | - Ignore /lib/generated_plugin_registrant.dart for flutter projects 138 | 139 | ## 1.0.5 140 | 141 | - Update documentation 142 | - Add emoji flag 143 | 144 | ## 1.0.4 145 | 146 | - Fix spacing of import blocks 147 | 148 | ## 1.0.3 149 | 150 | - Fix dev dependency problem 151 | - Add new line to end of file even if there are no imports 152 | 153 | ## 1.0.2 154 | 155 | - Resolve dart lint issues 156 | 157 | ## 1.0.1 158 | 159 | - Remove double call to sort 160 | - Add pub badge to `README.md` 161 | 162 | ## 1.0.0 163 | 164 | - Initial release 165 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2021 Matthew Gleich 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ```txt 4 | ___ _____ ______ ________ ________ ________ _________ 5 | |\ \|\ _ \ _ \|\ __ \|\ __ \|\ __ \|\___ ___\ 6 | \ \ \ \ \\\__\ \ \ \ \|\ \ \ \|\ \ \ \|\ \|___ \ \_| 7 | \ \ \ \ \\|__| \ \ \ ____\ \ \\\ \ \ _ _\ \ \ \ 8 | \ \ \ \ \ \ \ \ \ \___|\ \ \\\ \ \ \\ \| \ \ \ 9 | \ \__\ \__\ \ \__\ \__\ \ \_______\ \__\\ _\ \ \__\ 10 | \|__|\|__| \|__|\|__| \|_______|\|__|\|__| \|__| 11 | ________ ________ ________ _________ _______ ________ 12 | |\ ____\|\ __ \|\ __ \|\___ ___\\ ___ \ |\ __ \ 13 | \ \ \___|\ \ \|\ \ \ \|\ \|___ \ \_\ \ __/|\ \ \|\ \ 14 | \ \_____ \ \ \\\ \ \ _ _\ \ \ \ \ \ \_|/_\ \ _ _\ 15 | \|____|\ \ \ \\\ \ \ \\ \| \ \ \ \ \ \_|\ \ \ \\ \| 16 | ____\_\ \ \_______\ \__\\ _\ \ \__\ \ \_______\ \__\\ _\ 17 | |\_________\|_______|\|__|\|__| \|__| \|_______|\|__|\|__| 18 | \|_________| 19 | ``` 20 | 21 | # Request for a Maintainer 22 | 23 | This project needs a maintainer as I no longer work with dart and flutter. Please see [the issue thread](https://github.com/fluttercommunity/import_sorter/issues/63) for more information. 24 | 25 | # [import_sorter](https://pub.dev/packages/import_sorter) ![Pub Version](https://img.shields.io/pub/v/import_sorter) 26 | 27 | [![Flutter Community: import_sorter](https://fluttercommunity.dev/_github/header/import_sorter)](https://github.com/fluttercommunity/community) 28 | 29 | ![test](https://github.com/fluttercommunity/import_sorter/workflows/test/badge.svg) 30 | ![format](https://github.com/fluttercommunity/import_sorter/workflows/format/badge.svg) 31 | 32 | 🎯 Dart package to automatically organize your dart imports. Any dart project supported! Will sorts imports alphabetically and then group them in the following order: 33 | 34 | 1. Dart imports 35 | 2. Flutter imports 36 | 3. Package imports 37 | 4. Project imports 38 | 39 | Below is an example: 40 | 41 | ### Before 42 | 43 | ```dart 44 | import 'package:flutter/material.dart'; 45 | import 'package:flutter/cupertino.dart'; 46 | import 'package:flutter/physics.dart'; 47 | import 'package:flutter/painting.dart'; 48 | import 'package:intl/intl.dart'; 49 | import 'package:mdi/mdi.dart'; 50 | import 'package:provider/provider.dart'; 51 | import 'anotherFile.dart'; 52 | import 'package:example_app/anotherFile2.dart'; 53 | import 'dart:async'; 54 | import 'dart:io'; 55 | import 'dart:js'; 56 | ``` 57 | 58 | ### After 59 | 60 | ```dart 61 | // Dart imports: 62 | import 'dart:async'; 63 | import 'dart:io'; 64 | import 'dart:js'; 65 | 66 | // Flutter imports: 67 | import 'package:flutter/cupertino.dart'; 68 | import 'package:flutter/material.dart'; 69 | import 'package:flutter/painting.dart'; 70 | import 'package:flutter/physics.dart'; 71 | 72 | // Package imports: 73 | import 'package:intl/intl.dart'; 74 | import 'package:mdi/mdi.dart'; 75 | import 'package:provider/provider.dart'; 76 | 77 | // Project imports: 78 | import 'package:example_app/anotherFile2.dart'; 79 | import 'anotherFile.dart'; 80 | ``` 81 | 82 | ## 🚀 Installing 83 | 84 | Simply add `import_sorter: ^4.6.0` to your `pubspec.yaml`'s `dev_dependencies`. 85 | 86 | ## 🏃‍♂️ Running 87 | 88 | Once you've installed it simply run `flutter pub run import_sorter` (`pub run import_sorter` if normal dart application) to format every file dart file in your lib, bin, test, and tests folder! Don't worry if these folders don't exist. 89 | 90 | ## 💻 Command Line 91 | 92 | - Add the `-e` flag to the run command and have emojis added to your imports 😄. 93 | - If you're using a config in the `pubspec.yaml` you can have the program ignore it by adding `--ignore-config`. 94 | - Want to make sure your files are sorted? Add `--exit-if-changed` to make sure the files are sorted. Good for things like CI. 95 | - Have no comments before your imports by adding the `--no-comments` flag. 96 | - Add the `-h` flag if you need any help from the command line! 97 | - You can only run import_sorter on certain files by passing in a regular expression(s) that will only sort certain files. Below are two examples: 98 | - `pub run import_sorter bin/main.dart lib/args.dart` (only sorts bin/main.dart and lib/args.dart) 99 | - `pub run import_sorter lib\/* test\/*` (only sorts files in the lib and test folders) 100 | 101 | ## 🏗️ Config 102 | 103 | If you use import_sorter a lot or need to ignore certain files you should look at using the config you put in your `pubspec.yaml`. Ignored files are in the format of regex. This regex is then applied to the project root path (the one outputted to the terminal). Below is an example config setting emojis to true and ignoring all files in the lib folder: 104 | 105 | ```yaml 106 | import_sorter: 107 | emojis: true # Optional, defaults to false 108 | comments: false # Optional, defaults to true 109 | ignored_files: # Optional, defaults to [] 110 | - \/lib\/* 111 | ``` 112 | 113 | If you need another example check the [example app's import_sorter configuration](https://github.com/fluttercommunity/import_sorter/blob/master/example/example_app/pubspec.yaml#L76). 114 | 115 | ## 🚨 [`pre-commit`](https://pre-commit.com/) Hook 116 | 117 | There are two pre-commit hooks available: `dart-import-sorter` and `flutter-import-sorter`. They use `pub run` and `flutter pub run` respectively. Use the former for a generic Dart project and the latter for a Flutter project. 118 | 119 | Using pre-commit hooks in your project: 120 | 121 | - Install and configure `pre-commit`. 122 | - Install and configure `import_sorter` using instructions above. 123 | - Add the following to the `repos` section of your `.pre-commit-config.yaml`: 124 | 125 | ```yaml 126 | - repo: https://github.com/fluttercommunity/import_sorter 127 | rev: 'master' 128 | hooks: 129 | - id: dart-import-sorter # use `flutter-import-sorter` for a Flutter project 130 | ``` 131 | 132 | - Run initial sort: 133 | 134 | ```shell 135 | pre-commit run --all-files 136 | ``` 137 | 138 | ## 🙋‍♀️🙋‍♂️ Contributing 139 | 140 | All contributions are welcome! Just make sure that it's not an already existing issue or pull request. 141 | 142 | 143 | ## 👥 Contributors 144 | 145 | 146 | - **[@gleich](https://github.com/gleich)** 147 | 148 | - **[@mrgnhnt96](https://github.com/mrgnhnt96)** 149 | 150 | - **[@lig](https://github.com/lig)** 151 | 152 | - **[@vkammerer](https://github.com/vkammerer)** 153 | 154 | - **[@bartekpacia](https://github.com/bartekpacia)** 155 | 156 | - **[@pythonhubdev](https://github.com/pythonhubdev)** 157 | 158 | - **[@ImgBotApp](https://github.com/ImgBotApp)** 159 | 160 | - **[@jlnrrg](https://github.com/jlnrrg)** 161 | 162 | - **[@vHanda](https://github.com/vHanda)** 163 | 164 | 165 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:lints/recommended.yaml 2 | 3 | 4 | analyzer: 5 | errors: 6 | prefer_const_constructors: error 7 | annotate_overrides: error 8 | prefer_single_quotes: error 9 | sort_pub_dependencies: error 10 | invalid_annotation_target: ignore 11 | 12 | linter: 13 | rules: 14 | prefer_double_quotes: false 15 | sort_pub_dependencies: true 16 | annotate_overrides: true 17 | file_names: false 18 | overridden_fields: false 19 | prefer_single_quotes: true -------------------------------------------------------------------------------- /bin/import_sorter.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:io'; 3 | 4 | // 📦 Package imports: 5 | import 'package:args/args.dart'; 6 | import 'package:tint/tint.dart'; 7 | import 'package:yaml/yaml.dart'; 8 | 9 | // 🌎 Project imports: 10 | import 'package:import_sorter/args.dart' as local_args; 11 | import 'package:import_sorter/files.dart' as files; 12 | import 'package:import_sorter/sort.dart' as sort; 13 | 14 | void main(List args) { 15 | // Parsing arguments 16 | final parser = ArgParser(); 17 | parser.addFlag('emojis', abbr: 'e', negatable: false); 18 | parser.addFlag('ignore-config', negatable: false); 19 | parser.addFlag('help', abbr: 'h', negatable: false); 20 | parser.addFlag('exit-if-changed', negatable: false); 21 | parser.addFlag('no-comments', negatable: false); 22 | final argResults = parser.parse(args).arguments; 23 | if (argResults.contains('-h') || argResults.contains('--help')) { 24 | local_args.outputHelp(); 25 | } 26 | 27 | final currentPath = Directory.current.path; 28 | /* 29 | Getting the package name and dependencies/dev_dependencies 30 | Package name is one factor used to identify project imports 31 | Dependencies/dev_dependencies names are used to identify package imports 32 | */ 33 | final pubspecYamlFile = File('$currentPath/pubspec.yaml'); 34 | final pubspecYaml = loadYaml(pubspecYamlFile.readAsStringSync()); 35 | 36 | // Getting all dependencies and project package name 37 | final packageName = pubspecYaml['name']; 38 | final dependencies = []; 39 | 40 | final stopwatch = Stopwatch(); 41 | stopwatch.start(); 42 | 43 | final pubspecLockFile = File('$currentPath/pubspec.lock'); 44 | final pubspecLock = loadYaml(pubspecLockFile.readAsStringSync()); 45 | dependencies.addAll(pubspecLock['packages'].keys); 46 | 47 | var emojis = false; 48 | var noComments = false; 49 | final ignoredFiles = []; 50 | 51 | // Reading from config in pubspec.yaml safely 52 | if (!argResults.contains('--ignore-config')) { 53 | if (pubspecYaml.containsKey('import_sorter')) { 54 | final config = pubspecYaml['import_sorter']; 55 | if (config.containsKey('emojis')) emojis = config['emojis']; 56 | if (config.containsKey('comments')) noComments = !config['comments']; 57 | if (config.containsKey('ignored_files')) { 58 | ignoredFiles.addAll(config['ignored_files']); 59 | } 60 | } 61 | } 62 | 63 | // Setting values from args 64 | if (!emojis) emojis = argResults.contains('-e'); 65 | if (!noComments) noComments = argResults.contains('--no-comments'); 66 | final exitOnChange = argResults.contains('--exit-if-changed'); 67 | 68 | // Getting all the dart files for the project 69 | final dartFiles = files.dartFiles(currentPath, args); 70 | final containsFlutter = dependencies.contains('flutter'); 71 | final containsRegistrant = dartFiles 72 | .containsKey('$currentPath/lib/generated_plugin_registrant.dart'); 73 | 74 | stdout.writeln('contains flutter: $containsFlutter'); 75 | stdout.writeln('contains registrant: $containsRegistrant'); 76 | 77 | if (containsFlutter && containsRegistrant) { 78 | dartFiles.remove('$currentPath/lib/generated_plugin_registrant.dart'); 79 | } 80 | 81 | for (final pattern in ignoredFiles) { 82 | dartFiles.removeWhere((key, _) => 83 | RegExp(pattern).hasMatch(key.replaceFirst(currentPath, ''))); 84 | } 85 | 86 | stdout.write('┏━━ Sorting ${dartFiles.length} dart files'); 87 | 88 | // Sorting and writing to files 89 | final sortedFiles = []; 90 | final success = '✔'.green(); 91 | 92 | for (final filePath in dartFiles.keys) { 93 | final file = dartFiles[filePath]; 94 | if (file == null) { 95 | continue; 96 | } 97 | 98 | final sortedFile = sort.sortImports( 99 | file.readAsLinesSync(), packageName, emojis, exitOnChange, noComments); 100 | if (!sortedFile.updated) { 101 | continue; 102 | } 103 | dartFiles[filePath]?.writeAsStringSync(sortedFile.sortedFile); 104 | sortedFiles.add(filePath); 105 | } 106 | 107 | stopwatch.stop(); 108 | 109 | // Outputting results 110 | if (sortedFiles.length > 1) { 111 | stdout.write('\n'); 112 | } 113 | for (int i = 0; i < sortedFiles.length; i++) { 114 | final file = dartFiles[sortedFiles[i]]; 115 | stdout.write( 116 | '${sortedFiles.length == 1 ? '\n' : ''}┃ ${i == sortedFiles.length - 1 ? '┗' : '┣'}━━ $success Sorted imports for ${file?.path.replaceFirst(currentPath, '')}/'); 117 | String filename = file!.path.split(Platform.pathSeparator).last; 118 | stdout.write('$filename\n'); 119 | } 120 | 121 | if (sortedFiles.isEmpty) { 122 | stdout.write('\n'); 123 | } 124 | stdout.write( 125 | '┗━━ $success Sorted ${sortedFiles.length} files in ${stopwatch.elapsed.inSeconds}.${stopwatch.elapsedMilliseconds} seconds\n'); 126 | } 127 | -------------------------------------------------------------------------------- /bin/main.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:io'; 3 | 4 | // 📦 Package imports: 5 | import 'package:tint/tint.dart'; 6 | 7 | // 🌎 Project imports: 8 | import './import_sorter.dart' as import_sorter; 9 | 10 | void main(List args) { 11 | stdout.writeln( 12 | '\n' 13 | '${'WARNING:'.yellow()} This command is deprecated, ' 14 | 'please use ${'import_sorter'.green()} instead' 15 | '\n', 16 | ); 17 | 18 | import_sorter.main(args); 19 | } 20 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Before 2 | 3 | ```dart 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter/cupertino.dart'; 6 | import 'package:flutter/physics.dart'; 7 | import 'package:flutter/painting.dart'; 8 | import 'package:intl/intl.dart'; 9 | import 'package:mdi/mdi.dart'; 10 | import 'package:provider/provider.dart'; 11 | import 'anotherFile.dart'; 12 | import 'package:example_app/anotherFile2.dart'; 13 | import 'dart:async'; 14 | import 'dart:io'; 15 | import 'dart:js'; 16 | ``` 17 | 18 | # After 19 | 20 | ```dart 21 | // Dart imports: 22 | import 'dart:async'; 23 | import 'dart:io'; 24 | import 'dart:js'; 25 | 26 | // Flutter imports: 27 | import 'package:flutter/material.dart'; 28 | import 'package:flutter/cupertino.dart'; 29 | import 'package:flutter/physics.dart'; 30 | import 'package:flutter/painting.dart'; 31 | 32 | // Package imports: 33 | import 'package:intl/intl.dart'; 34 | import 'package:mdi/mdi.dart'; 35 | import 'package:provider/provider.dart'; 36 | 37 | // Project imports: 38 | import 'anotherFile.dart'; 39 | import 'package:example_app/anotherFile2.dart'; 40 | ``` 41 | 42 | # [Example Application](https://github.com/fluttercommunity/import_sorter/tree/master/example/example_app) 43 | 44 | Example flutter app using `import_sorter` 45 | -------------------------------------------------------------------------------- /example/example_app/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Exceptions to above rules. 44 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 45 | -------------------------------------------------------------------------------- /example/example_app/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: f35b673f2b7ea7800c97d9ec096153fcca6091f2 8 | channel: master 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /example/example_app/README.md: -------------------------------------------------------------------------------- 1 | # example_app 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /example/example_app/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | analyzer: 2 | errors: 3 | unused_import: ignore 4 | unnecessary_import: ignore -------------------------------------------------------------------------------- /example/example_app/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | -------------------------------------------------------------------------------- /example/example_app/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 28 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.example_app" 42 | minSdkVersion 16 43 | targetSdkVersion 28 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | } 47 | 48 | buildTypes { 49 | release { 50 | // TODO: Add your own signing config for the release build. 51 | // Signing with the debug keys for now, so `flutter run --release` works. 52 | signingConfig signingConfigs.debug 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 63 | } 64 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/kotlin/com/example/example_app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.example_app 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/example_app/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /example/example_app/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example_app/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /example/example_app/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /example/example_app/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /example/example_app/android/settings.gradle: -------------------------------------------------------------------------------- 1 | // Copyright 2014 The Flutter Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | include ':app' 6 | 7 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 8 | def properties = new Properties() 9 | 10 | assert localPropertiesFile.exists() 11 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 12 | 13 | def flutterSdkPath = properties.getProperty("flutter.sdk") 14 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 15 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 16 | -------------------------------------------------------------------------------- /example/example_app/ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /example/example_app/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/example_app/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/example_app/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 97C146F11CF9000F007C117D /* Supporting Files */, 94 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 95 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 96 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 97 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 98 | ); 99 | path = Runner; 100 | sourceTree = ""; 101 | }; 102 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | ); 106 | name = "Supporting Files"; 107 | sourceTree = ""; 108 | }; 109 | /* End PBXGroup section */ 110 | 111 | /* Begin PBXNativeTarget section */ 112 | 97C146ED1CF9000F007C117D /* Runner */ = { 113 | isa = PBXNativeTarget; 114 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 115 | buildPhases = ( 116 | 9740EEB61CF901F6004384FC /* Run Script */, 117 | 97C146EA1CF9000F007C117D /* Sources */, 118 | 97C146EB1CF9000F007C117D /* Frameworks */, 119 | 97C146EC1CF9000F007C117D /* Resources */, 120 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 121 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 122 | ); 123 | buildRules = ( 124 | ); 125 | dependencies = ( 126 | ); 127 | name = Runner; 128 | productName = Runner; 129 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 130 | productType = "com.apple.product-type.application"; 131 | }; 132 | /* End PBXNativeTarget section */ 133 | 134 | /* Begin PBXProject section */ 135 | 97C146E61CF9000F007C117D /* Project object */ = { 136 | isa = PBXProject; 137 | attributes = { 138 | LastUpgradeCheck = 1020; 139 | ORGANIZATIONNAME = ""; 140 | TargetAttributes = { 141 | 97C146ED1CF9000F007C117D = { 142 | CreatedOnToolsVersion = 7.3.1; 143 | LastSwiftMigration = 1100; 144 | }; 145 | }; 146 | }; 147 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 148 | compatibilityVersion = "Xcode 9.3"; 149 | developmentRegion = en; 150 | hasScannedForEncodings = 0; 151 | knownRegions = ( 152 | en, 153 | Base, 154 | ); 155 | mainGroup = 97C146E51CF9000F007C117D; 156 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 157 | projectDirPath = ""; 158 | projectRoot = ""; 159 | targets = ( 160 | 97C146ED1CF9000F007C117D /* Runner */, 161 | ); 162 | }; 163 | /* End PBXProject section */ 164 | 165 | /* Begin PBXResourcesBuildPhase section */ 166 | 97C146EC1CF9000F007C117D /* Resources */ = { 167 | isa = PBXResourcesBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 171 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 172 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 173 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 174 | ); 175 | runOnlyForDeploymentPostprocessing = 0; 176 | }; 177 | /* End PBXResourcesBuildPhase section */ 178 | 179 | /* Begin PBXShellScriptBuildPhase section */ 180 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 181 | isa = PBXShellScriptBuildPhase; 182 | buildActionMask = 2147483647; 183 | files = ( 184 | ); 185 | inputPaths = ( 186 | ); 187 | name = "Thin Binary"; 188 | outputPaths = ( 189 | ); 190 | runOnlyForDeploymentPostprocessing = 0; 191 | shellPath = /bin/sh; 192 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 193 | }; 194 | 9740EEB61CF901F6004384FC /* Run Script */ = { 195 | isa = PBXShellScriptBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | ); 199 | inputPaths = ( 200 | ); 201 | name = "Run Script"; 202 | outputPaths = ( 203 | ); 204 | runOnlyForDeploymentPostprocessing = 0; 205 | shellPath = /bin/sh; 206 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 207 | }; 208 | /* End PBXShellScriptBuildPhase section */ 209 | 210 | /* Begin PBXSourcesBuildPhase section */ 211 | 97C146EA1CF9000F007C117D /* Sources */ = { 212 | isa = PBXSourcesBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 216 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 217 | ); 218 | runOnlyForDeploymentPostprocessing = 0; 219 | }; 220 | /* End PBXSourcesBuildPhase section */ 221 | 222 | /* Begin PBXVariantGroup section */ 223 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C146FB1CF9000F007C117D /* Base */, 227 | ); 228 | name = Main.storyboard; 229 | sourceTree = ""; 230 | }; 231 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 232 | isa = PBXVariantGroup; 233 | children = ( 234 | 97C147001CF9000F007C117D /* Base */, 235 | ); 236 | name = LaunchScreen.storyboard; 237 | sourceTree = ""; 238 | }; 239 | /* End PBXVariantGroup section */ 240 | 241 | /* Begin XCBuildConfiguration section */ 242 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 243 | isa = XCBuildConfiguration; 244 | buildSettings = { 245 | ALWAYS_SEARCH_USER_PATHS = NO; 246 | CLANG_ANALYZER_NONNULL = YES; 247 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 248 | CLANG_CXX_LIBRARY = "libc++"; 249 | CLANG_ENABLE_MODULES = YES; 250 | CLANG_ENABLE_OBJC_ARC = YES; 251 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 252 | CLANG_WARN_BOOL_CONVERSION = YES; 253 | CLANG_WARN_COMMA = YES; 254 | CLANG_WARN_CONSTANT_CONVERSION = YES; 255 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 256 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 257 | CLANG_WARN_EMPTY_BODY = YES; 258 | CLANG_WARN_ENUM_CONVERSION = YES; 259 | CLANG_WARN_INFINITE_RECURSION = YES; 260 | CLANG_WARN_INT_CONVERSION = YES; 261 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 262 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 263 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 264 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 265 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 266 | CLANG_WARN_STRICT_PROTOTYPES = YES; 267 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 268 | CLANG_WARN_UNREACHABLE_CODE = YES; 269 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 270 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 271 | COPY_PHASE_STRIP = NO; 272 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 273 | ENABLE_NS_ASSERTIONS = NO; 274 | ENABLE_STRICT_OBJC_MSGSEND = YES; 275 | GCC_C_LANGUAGE_STANDARD = gnu99; 276 | GCC_NO_COMMON_BLOCKS = YES; 277 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 278 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 279 | GCC_WARN_UNDECLARED_SELECTOR = YES; 280 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 281 | GCC_WARN_UNUSED_FUNCTION = YES; 282 | GCC_WARN_UNUSED_VARIABLE = YES; 283 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 284 | MTL_ENABLE_DEBUG_INFO = NO; 285 | SDKROOT = iphoneos; 286 | SUPPORTED_PLATFORMS = iphoneos; 287 | TARGETED_DEVICE_FAMILY = "1,2"; 288 | VALIDATE_PRODUCT = YES; 289 | }; 290 | name = Profile; 291 | }; 292 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 293 | isa = XCBuildConfiguration; 294 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 295 | buildSettings = { 296 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 297 | CLANG_ENABLE_MODULES = YES; 298 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 299 | ENABLE_BITCODE = NO; 300 | FRAMEWORK_SEARCH_PATHS = ( 301 | "$(inherited)", 302 | "$(PROJECT_DIR)/Flutter", 303 | ); 304 | INFOPLIST_FILE = Runner/Info.plist; 305 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 306 | LIBRARY_SEARCH_PATHS = ( 307 | "$(inherited)", 308 | "$(PROJECT_DIR)/Flutter", 309 | ); 310 | PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; 311 | PRODUCT_NAME = "$(TARGET_NAME)"; 312 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 313 | SWIFT_VERSION = 5.0; 314 | VERSIONING_SYSTEM = "apple-generic"; 315 | }; 316 | name = Profile; 317 | }; 318 | 97C147031CF9000F007C117D /* Debug */ = { 319 | isa = XCBuildConfiguration; 320 | buildSettings = { 321 | ALWAYS_SEARCH_USER_PATHS = NO; 322 | CLANG_ANALYZER_NONNULL = YES; 323 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 324 | CLANG_CXX_LIBRARY = "libc++"; 325 | CLANG_ENABLE_MODULES = YES; 326 | CLANG_ENABLE_OBJC_ARC = YES; 327 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 328 | CLANG_WARN_BOOL_CONVERSION = YES; 329 | CLANG_WARN_COMMA = YES; 330 | CLANG_WARN_CONSTANT_CONVERSION = YES; 331 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 332 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 333 | CLANG_WARN_EMPTY_BODY = YES; 334 | CLANG_WARN_ENUM_CONVERSION = YES; 335 | CLANG_WARN_INFINITE_RECURSION = YES; 336 | CLANG_WARN_INT_CONVERSION = YES; 337 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 338 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 339 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 340 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 341 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 342 | CLANG_WARN_STRICT_PROTOTYPES = YES; 343 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 344 | CLANG_WARN_UNREACHABLE_CODE = YES; 345 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 346 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 347 | COPY_PHASE_STRIP = NO; 348 | DEBUG_INFORMATION_FORMAT = dwarf; 349 | ENABLE_STRICT_OBJC_MSGSEND = YES; 350 | ENABLE_TESTABILITY = YES; 351 | GCC_C_LANGUAGE_STANDARD = gnu99; 352 | GCC_DYNAMIC_NO_PIC = NO; 353 | GCC_NO_COMMON_BLOCKS = YES; 354 | GCC_OPTIMIZATION_LEVEL = 0; 355 | GCC_PREPROCESSOR_DEFINITIONS = ( 356 | "DEBUG=1", 357 | "$(inherited)", 358 | ); 359 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 360 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 361 | GCC_WARN_UNDECLARED_SELECTOR = YES; 362 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 363 | GCC_WARN_UNUSED_FUNCTION = YES; 364 | GCC_WARN_UNUSED_VARIABLE = YES; 365 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 366 | MTL_ENABLE_DEBUG_INFO = YES; 367 | ONLY_ACTIVE_ARCH = YES; 368 | SDKROOT = iphoneos; 369 | TARGETED_DEVICE_FAMILY = "1,2"; 370 | }; 371 | name = Debug; 372 | }; 373 | 97C147041CF9000F007C117D /* Release */ = { 374 | isa = XCBuildConfiguration; 375 | buildSettings = { 376 | ALWAYS_SEARCH_USER_PATHS = NO; 377 | CLANG_ANALYZER_NONNULL = YES; 378 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 379 | CLANG_CXX_LIBRARY = "libc++"; 380 | CLANG_ENABLE_MODULES = YES; 381 | CLANG_ENABLE_OBJC_ARC = YES; 382 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 383 | CLANG_WARN_BOOL_CONVERSION = YES; 384 | CLANG_WARN_COMMA = YES; 385 | CLANG_WARN_CONSTANT_CONVERSION = YES; 386 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 387 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 388 | CLANG_WARN_EMPTY_BODY = YES; 389 | CLANG_WARN_ENUM_CONVERSION = YES; 390 | CLANG_WARN_INFINITE_RECURSION = YES; 391 | CLANG_WARN_INT_CONVERSION = YES; 392 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 393 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 394 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 395 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 396 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 397 | CLANG_WARN_STRICT_PROTOTYPES = YES; 398 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 399 | CLANG_WARN_UNREACHABLE_CODE = YES; 400 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 401 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 402 | COPY_PHASE_STRIP = NO; 403 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 404 | ENABLE_NS_ASSERTIONS = NO; 405 | ENABLE_STRICT_OBJC_MSGSEND = YES; 406 | GCC_C_LANGUAGE_STANDARD = gnu99; 407 | GCC_NO_COMMON_BLOCKS = YES; 408 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 409 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 410 | GCC_WARN_UNDECLARED_SELECTOR = YES; 411 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 412 | GCC_WARN_UNUSED_FUNCTION = YES; 413 | GCC_WARN_UNUSED_VARIABLE = YES; 414 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 415 | MTL_ENABLE_DEBUG_INFO = NO; 416 | SDKROOT = iphoneos; 417 | SUPPORTED_PLATFORMS = iphoneos; 418 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 419 | TARGETED_DEVICE_FAMILY = "1,2"; 420 | VALIDATE_PRODUCT = YES; 421 | }; 422 | name = Release; 423 | }; 424 | 97C147061CF9000F007C117D /* Debug */ = { 425 | isa = XCBuildConfiguration; 426 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 427 | buildSettings = { 428 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 429 | CLANG_ENABLE_MODULES = YES; 430 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 431 | ENABLE_BITCODE = NO; 432 | FRAMEWORK_SEARCH_PATHS = ( 433 | "$(inherited)", 434 | "$(PROJECT_DIR)/Flutter", 435 | ); 436 | INFOPLIST_FILE = Runner/Info.plist; 437 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 438 | LIBRARY_SEARCH_PATHS = ( 439 | "$(inherited)", 440 | "$(PROJECT_DIR)/Flutter", 441 | ); 442 | PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; 443 | PRODUCT_NAME = "$(TARGET_NAME)"; 444 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 445 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 446 | SWIFT_VERSION = 5.0; 447 | VERSIONING_SYSTEM = "apple-generic"; 448 | }; 449 | name = Debug; 450 | }; 451 | 97C147071CF9000F007C117D /* Release */ = { 452 | isa = XCBuildConfiguration; 453 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 454 | buildSettings = { 455 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 456 | CLANG_ENABLE_MODULES = YES; 457 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 458 | ENABLE_BITCODE = NO; 459 | FRAMEWORK_SEARCH_PATHS = ( 460 | "$(inherited)", 461 | "$(PROJECT_DIR)/Flutter", 462 | ); 463 | INFOPLIST_FILE = Runner/Info.plist; 464 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 465 | LIBRARY_SEARCH_PATHS = ( 466 | "$(inherited)", 467 | "$(PROJECT_DIR)/Flutter", 468 | ); 469 | PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; 470 | PRODUCT_NAME = "$(TARGET_NAME)"; 471 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 472 | SWIFT_VERSION = 5.0; 473 | VERSIONING_SYSTEM = "apple-generic"; 474 | }; 475 | name = Release; 476 | }; 477 | /* End XCBuildConfiguration section */ 478 | 479 | /* Begin XCConfigurationList section */ 480 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 481 | isa = XCConfigurationList; 482 | buildConfigurations = ( 483 | 97C147031CF9000F007C117D /* Debug */, 484 | 97C147041CF9000F007C117D /* Release */, 485 | 249021D3217E4FDB00AE95B9 /* Profile */, 486 | ); 487 | defaultConfigurationIsVisible = 0; 488 | defaultConfigurationName = Release; 489 | }; 490 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 491 | isa = XCConfigurationList; 492 | buildConfigurations = ( 493 | 97C147061CF9000F007C117D /* Debug */, 494 | 97C147071CF9000F007C117D /* Release */, 495 | 249021D4217E4FDB00AE95B9 /* Profile */, 496 | ); 497 | defaultConfigurationIsVisible = 0; 498 | defaultConfigurationName = Release; 499 | }; 500 | /* End XCConfigurationList section */ 501 | }; 502 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 503 | } 504 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | example_app 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /example/example_app/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /example/example_app/lib/anotherFile.dart: -------------------------------------------------------------------------------- 1 | enum HomeEvent { showInfo, showDiscover, showProfile } 2 | -------------------------------------------------------------------------------- /example/example_app/lib/anotherFile2.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /example/example_app/lib/main.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:async'; 3 | import 'dart:io'; 4 | import 'dart:js'; 5 | 6 | // 🐦 Flutter imports: 7 | import 'package:flutter/cupertino.dart'; 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter/painting.dart'; 10 | import 'package:flutter/physics.dart'; 11 | 12 | // 📦 Package imports: 13 | import 'package:intl/intl.dart'; 14 | import 'package:provider/provider.dart'; 15 | 16 | // 🌎 Project imports: 17 | import 'package:example_app/anotherFile2.dart'; 18 | import 'anotherFile.dart'; 19 | -------------------------------------------------------------------------------- /example/example_app/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/xcuserdata/ 7 | -------------------------------------------------------------------------------- /example/example_app/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/example_app/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/example_app/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | 9 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 10 | } 11 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 51; 7 | objects = { 8 | 9 | /* Begin PBXAggregateTarget section */ 10 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { 11 | isa = PBXAggregateTarget; 12 | buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; 13 | buildPhases = ( 14 | 33CC111E2044C6BF0003C045 /* ShellScript */, 15 | ); 16 | dependencies = ( 17 | ); 18 | name = "Flutter Assemble"; 19 | productName = FLX; 20 | }; 21 | /* End PBXAggregateTarget section */ 22 | 23 | /* Begin PBXBuildFile section */ 24 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 25 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 26 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 27 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 28 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; 29 | 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; 30 | 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 31 | D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; }; 32 | D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 33 | /* End PBXBuildFile section */ 34 | 35 | /* Begin PBXContainerItemProxy section */ 36 | 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = 33CC10E52044A3C60003C045 /* Project object */; 39 | proxyType = 1; 40 | remoteGlobalIDString = 33CC111A2044C6BA0003C045; 41 | remoteInfo = FLX; 42 | }; 43 | /* End PBXContainerItemProxy section */ 44 | 45 | /* Begin PBXCopyFilesBuildPhase section */ 46 | 33CC110E2044A8840003C045 /* Bundle Framework */ = { 47 | isa = PBXCopyFilesBuildPhase; 48 | buildActionMask = 2147483647; 49 | dstPath = ""; 50 | dstSubfolderSpec = 10; 51 | files = ( 52 | D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */, 53 | 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, 54 | ); 55 | name = "Bundle Framework"; 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXCopyFilesBuildPhase section */ 59 | 60 | /* Begin PBXFileReference section */ 61 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 62 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 63 | 33CC10ED2044A3C60003C045 /* example_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example_app.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 65 | 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 66 | 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 67 | 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; 68 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; 69 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 70 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 71 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; 72 | 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; 73 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 74 | 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 75 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 76 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 77 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; 78 | D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; }; 79 | /* End PBXFileReference section */ 80 | 81 | /* Begin PBXFrameworksBuildPhase section */ 82 | 33CC10EA2044A3C60003C045 /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | D73912F022F37F9E000D13A0 /* App.framework in Frameworks */, 87 | 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | /* End PBXFrameworksBuildPhase section */ 92 | 93 | /* Begin PBXGroup section */ 94 | 33BA886A226E78AF003329D5 /* Configs */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 33E5194F232828860026EE4D /* AppInfo.xcconfig */, 98 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 99 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 100 | 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, 101 | ); 102 | path = Configs; 103 | sourceTree = ""; 104 | }; 105 | 33CC10E42044A3C60003C045 = { 106 | isa = PBXGroup; 107 | children = ( 108 | 33FAB671232836740065AC1E /* Runner */, 109 | 33CEB47122A05771004F2AC0 /* Flutter */, 110 | 33CC10EE2044A3C60003C045 /* Products */, 111 | D73912EC22F37F3D000D13A0 /* Frameworks */, 112 | ); 113 | sourceTree = ""; 114 | }; 115 | 33CC10EE2044A3C60003C045 /* Products */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 33CC10ED2044A3C60003C045 /* example_app.app */, 119 | ); 120 | name = Products; 121 | sourceTree = ""; 122 | }; 123 | 33CC11242044D66E0003C045 /* Resources */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | 33CC10F22044A3C60003C045 /* Assets.xcassets */, 127 | 33CC10F42044A3C60003C045 /* MainMenu.xib */, 128 | 33CC10F72044A3C60003C045 /* Info.plist */, 129 | ); 130 | name = Resources; 131 | path = ..; 132 | sourceTree = ""; 133 | }; 134 | 33CEB47122A05771004F2AC0 /* Flutter */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, 138 | 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 139 | 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 140 | 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, 141 | D73912EF22F37F9E000D13A0 /* App.framework */, 142 | 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, 143 | ); 144 | path = Flutter; 145 | sourceTree = ""; 146 | }; 147 | 33FAB671232836740065AC1E /* Runner */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 33CC10F02044A3C60003C045 /* AppDelegate.swift */, 151 | 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, 152 | 33E51913231747F40026EE4D /* DebugProfile.entitlements */, 153 | 33E51914231749380026EE4D /* Release.entitlements */, 154 | 33CC11242044D66E0003C045 /* Resources */, 155 | 33BA886A226E78AF003329D5 /* Configs */, 156 | ); 157 | path = Runner; 158 | sourceTree = ""; 159 | }; 160 | D73912EC22F37F3D000D13A0 /* Frameworks */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | ); 164 | name = Frameworks; 165 | sourceTree = ""; 166 | }; 167 | /* End PBXGroup section */ 168 | 169 | /* Begin PBXNativeTarget section */ 170 | 33CC10EC2044A3C60003C045 /* Runner */ = { 171 | isa = PBXNativeTarget; 172 | buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; 173 | buildPhases = ( 174 | 33CC10E92044A3C60003C045 /* Sources */, 175 | 33CC10EA2044A3C60003C045 /* Frameworks */, 176 | 33CC10EB2044A3C60003C045 /* Resources */, 177 | 33CC110E2044A8840003C045 /* Bundle Framework */, 178 | 3399D490228B24CF009A79C7 /* ShellScript */, 179 | ); 180 | buildRules = ( 181 | ); 182 | dependencies = ( 183 | 33CC11202044C79F0003C045 /* PBXTargetDependency */, 184 | ); 185 | name = Runner; 186 | productName = Runner; 187 | productReference = 33CC10ED2044A3C60003C045 /* example_app.app */; 188 | productType = "com.apple.product-type.application"; 189 | }; 190 | /* End PBXNativeTarget section */ 191 | 192 | /* Begin PBXProject section */ 193 | 33CC10E52044A3C60003C045 /* Project object */ = { 194 | isa = PBXProject; 195 | attributes = { 196 | LastSwiftUpdateCheck = 0920; 197 | LastUpgradeCheck = 0930; 198 | ORGANIZATIONNAME = "The Flutter Authors"; 199 | TargetAttributes = { 200 | 33CC10EC2044A3C60003C045 = { 201 | CreatedOnToolsVersion = 9.2; 202 | LastSwiftMigration = 1100; 203 | ProvisioningStyle = Automatic; 204 | SystemCapabilities = { 205 | com.apple.Sandbox = { 206 | enabled = 1; 207 | }; 208 | }; 209 | }; 210 | 33CC111A2044C6BA0003C045 = { 211 | CreatedOnToolsVersion = 9.2; 212 | ProvisioningStyle = Manual; 213 | }; 214 | }; 215 | }; 216 | buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; 217 | compatibilityVersion = "Xcode 8.0"; 218 | developmentRegion = en; 219 | hasScannedForEncodings = 0; 220 | knownRegions = ( 221 | en, 222 | Base, 223 | ); 224 | mainGroup = 33CC10E42044A3C60003C045; 225 | productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; 226 | projectDirPath = ""; 227 | projectRoot = ""; 228 | targets = ( 229 | 33CC10EC2044A3C60003C045 /* Runner */, 230 | 33CC111A2044C6BA0003C045 /* Flutter Assemble */, 231 | ); 232 | }; 233 | /* End PBXProject section */ 234 | 235 | /* Begin PBXResourcesBuildPhase section */ 236 | 33CC10EB2044A3C60003C045 /* Resources */ = { 237 | isa = PBXResourcesBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, 241 | 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, 242 | ); 243 | runOnlyForDeploymentPostprocessing = 0; 244 | }; 245 | /* End PBXResourcesBuildPhase section */ 246 | 247 | /* Begin PBXShellScriptBuildPhase section */ 248 | 3399D490228B24CF009A79C7 /* ShellScript */ = { 249 | isa = PBXShellScriptBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | ); 253 | inputFileListPaths = ( 254 | ); 255 | inputPaths = ( 256 | ); 257 | outputFileListPaths = ( 258 | ); 259 | outputPaths = ( 260 | ); 261 | runOnlyForDeploymentPostprocessing = 0; 262 | shellPath = /bin/sh; 263 | shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n"; 264 | }; 265 | 33CC111E2044C6BF0003C045 /* ShellScript */ = { 266 | isa = PBXShellScriptBuildPhase; 267 | buildActionMask = 2147483647; 268 | files = ( 269 | ); 270 | inputFileListPaths = ( 271 | Flutter/ephemeral/FlutterInputs.xcfilelist, 272 | ); 273 | inputPaths = ( 274 | Flutter/ephemeral/tripwire, 275 | ); 276 | outputFileListPaths = ( 277 | Flutter/ephemeral/FlutterOutputs.xcfilelist, 278 | ); 279 | outputPaths = ( 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | shellPath = /bin/sh; 283 | shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; 284 | }; 285 | /* End PBXShellScriptBuildPhase section */ 286 | 287 | /* Begin PBXSourcesBuildPhase section */ 288 | 33CC10E92044A3C60003C045 /* Sources */ = { 289 | isa = PBXSourcesBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, 293 | 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, 294 | 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | /* End PBXSourcesBuildPhase section */ 299 | 300 | /* Begin PBXTargetDependency section */ 301 | 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { 302 | isa = PBXTargetDependency; 303 | target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; 304 | targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; 305 | }; 306 | /* End PBXTargetDependency section */ 307 | 308 | /* Begin PBXVariantGroup section */ 309 | 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { 310 | isa = PBXVariantGroup; 311 | children = ( 312 | 33CC10F52044A3C60003C045 /* Base */, 313 | ); 314 | name = MainMenu.xib; 315 | path = Runner; 316 | sourceTree = ""; 317 | }; 318 | /* End PBXVariantGroup section */ 319 | 320 | /* Begin XCBuildConfiguration section */ 321 | 338D0CE9231458BD00FA5F75 /* Profile */ = { 322 | isa = XCBuildConfiguration; 323 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 324 | buildSettings = { 325 | ALWAYS_SEARCH_USER_PATHS = NO; 326 | CLANG_ANALYZER_NONNULL = YES; 327 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 328 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 329 | CLANG_CXX_LIBRARY = "libc++"; 330 | CLANG_ENABLE_MODULES = YES; 331 | CLANG_ENABLE_OBJC_ARC = YES; 332 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 333 | CLANG_WARN_BOOL_CONVERSION = YES; 334 | CLANG_WARN_CONSTANT_CONVERSION = YES; 335 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 336 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 337 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 338 | CLANG_WARN_EMPTY_BODY = YES; 339 | CLANG_WARN_ENUM_CONVERSION = YES; 340 | CLANG_WARN_INFINITE_RECURSION = YES; 341 | CLANG_WARN_INT_CONVERSION = YES; 342 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 343 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 344 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 345 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 346 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 347 | CODE_SIGN_IDENTITY = "-"; 348 | COPY_PHASE_STRIP = NO; 349 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 350 | ENABLE_NS_ASSERTIONS = NO; 351 | ENABLE_STRICT_OBJC_MSGSEND = YES; 352 | GCC_C_LANGUAGE_STANDARD = gnu11; 353 | GCC_NO_COMMON_BLOCKS = YES; 354 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 355 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 356 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 357 | GCC_WARN_UNUSED_FUNCTION = YES; 358 | GCC_WARN_UNUSED_VARIABLE = YES; 359 | MACOSX_DEPLOYMENT_TARGET = 10.11; 360 | MTL_ENABLE_DEBUG_INFO = NO; 361 | SDKROOT = macosx; 362 | SWIFT_COMPILATION_MODE = wholemodule; 363 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 364 | }; 365 | name = Profile; 366 | }; 367 | 338D0CEA231458BD00FA5F75 /* Profile */ = { 368 | isa = XCBuildConfiguration; 369 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; 370 | buildSettings = { 371 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 372 | CLANG_ENABLE_MODULES = YES; 373 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; 374 | CODE_SIGN_STYLE = Automatic; 375 | COMBINE_HIDPI_IMAGES = YES; 376 | FRAMEWORK_SEARCH_PATHS = ( 377 | "$(inherited)", 378 | "$(PROJECT_DIR)/Flutter/ephemeral", 379 | ); 380 | INFOPLIST_FILE = Runner/Info.plist; 381 | LD_RUNPATH_SEARCH_PATHS = ( 382 | "$(inherited)", 383 | "@executable_path/../Frameworks", 384 | ); 385 | PROVISIONING_PROFILE_SPECIFIER = ""; 386 | SWIFT_VERSION = 5.0; 387 | }; 388 | name = Profile; 389 | }; 390 | 338D0CEB231458BD00FA5F75 /* Profile */ = { 391 | isa = XCBuildConfiguration; 392 | buildSettings = { 393 | CODE_SIGN_STYLE = Manual; 394 | PRODUCT_NAME = "$(TARGET_NAME)"; 395 | }; 396 | name = Profile; 397 | }; 398 | 33CC10F92044A3C60003C045 /* Debug */ = { 399 | isa = XCBuildConfiguration; 400 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 401 | buildSettings = { 402 | ALWAYS_SEARCH_USER_PATHS = NO; 403 | CLANG_ANALYZER_NONNULL = YES; 404 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 405 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 406 | CLANG_CXX_LIBRARY = "libc++"; 407 | CLANG_ENABLE_MODULES = YES; 408 | CLANG_ENABLE_OBJC_ARC = YES; 409 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 410 | CLANG_WARN_BOOL_CONVERSION = YES; 411 | CLANG_WARN_CONSTANT_CONVERSION = YES; 412 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 413 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 414 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 415 | CLANG_WARN_EMPTY_BODY = YES; 416 | CLANG_WARN_ENUM_CONVERSION = YES; 417 | CLANG_WARN_INFINITE_RECURSION = YES; 418 | CLANG_WARN_INT_CONVERSION = YES; 419 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 420 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 421 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 422 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 423 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 424 | CODE_SIGN_IDENTITY = "-"; 425 | COPY_PHASE_STRIP = NO; 426 | DEBUG_INFORMATION_FORMAT = dwarf; 427 | ENABLE_STRICT_OBJC_MSGSEND = YES; 428 | ENABLE_TESTABILITY = YES; 429 | GCC_C_LANGUAGE_STANDARD = gnu11; 430 | GCC_DYNAMIC_NO_PIC = NO; 431 | GCC_NO_COMMON_BLOCKS = YES; 432 | GCC_OPTIMIZATION_LEVEL = 0; 433 | GCC_PREPROCESSOR_DEFINITIONS = ( 434 | "DEBUG=1", 435 | "$(inherited)", 436 | ); 437 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 438 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 439 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 440 | GCC_WARN_UNUSED_FUNCTION = YES; 441 | GCC_WARN_UNUSED_VARIABLE = YES; 442 | MACOSX_DEPLOYMENT_TARGET = 10.11; 443 | MTL_ENABLE_DEBUG_INFO = YES; 444 | ONLY_ACTIVE_ARCH = YES; 445 | SDKROOT = macosx; 446 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 447 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 448 | }; 449 | name = Debug; 450 | }; 451 | 33CC10FA2044A3C60003C045 /* Release */ = { 452 | isa = XCBuildConfiguration; 453 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 454 | buildSettings = { 455 | ALWAYS_SEARCH_USER_PATHS = NO; 456 | CLANG_ANALYZER_NONNULL = YES; 457 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 458 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 459 | CLANG_CXX_LIBRARY = "libc++"; 460 | CLANG_ENABLE_MODULES = YES; 461 | CLANG_ENABLE_OBJC_ARC = YES; 462 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 463 | CLANG_WARN_BOOL_CONVERSION = YES; 464 | CLANG_WARN_CONSTANT_CONVERSION = YES; 465 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 466 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 467 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 468 | CLANG_WARN_EMPTY_BODY = YES; 469 | CLANG_WARN_ENUM_CONVERSION = YES; 470 | CLANG_WARN_INFINITE_RECURSION = YES; 471 | CLANG_WARN_INT_CONVERSION = YES; 472 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 473 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 474 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 475 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 476 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 477 | CODE_SIGN_IDENTITY = "-"; 478 | COPY_PHASE_STRIP = NO; 479 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 480 | ENABLE_NS_ASSERTIONS = NO; 481 | ENABLE_STRICT_OBJC_MSGSEND = YES; 482 | GCC_C_LANGUAGE_STANDARD = gnu11; 483 | GCC_NO_COMMON_BLOCKS = YES; 484 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 485 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 486 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 487 | GCC_WARN_UNUSED_FUNCTION = YES; 488 | GCC_WARN_UNUSED_VARIABLE = YES; 489 | MACOSX_DEPLOYMENT_TARGET = 10.11; 490 | MTL_ENABLE_DEBUG_INFO = NO; 491 | SDKROOT = macosx; 492 | SWIFT_COMPILATION_MODE = wholemodule; 493 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 494 | }; 495 | name = Release; 496 | }; 497 | 33CC10FC2044A3C60003C045 /* Debug */ = { 498 | isa = XCBuildConfiguration; 499 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; 500 | buildSettings = { 501 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 502 | CLANG_ENABLE_MODULES = YES; 503 | CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; 504 | CODE_SIGN_STYLE = Automatic; 505 | COMBINE_HIDPI_IMAGES = YES; 506 | FRAMEWORK_SEARCH_PATHS = ( 507 | "$(inherited)", 508 | "$(PROJECT_DIR)/Flutter/ephemeral", 509 | ); 510 | INFOPLIST_FILE = Runner/Info.plist; 511 | LD_RUNPATH_SEARCH_PATHS = ( 512 | "$(inherited)", 513 | "@executable_path/../Frameworks", 514 | ); 515 | PROVISIONING_PROFILE_SPECIFIER = ""; 516 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 517 | SWIFT_VERSION = 5.0; 518 | }; 519 | name = Debug; 520 | }; 521 | 33CC10FD2044A3C60003C045 /* Release */ = { 522 | isa = XCBuildConfiguration; 523 | baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; 524 | buildSettings = { 525 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 526 | CLANG_ENABLE_MODULES = YES; 527 | CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; 528 | CODE_SIGN_STYLE = Automatic; 529 | COMBINE_HIDPI_IMAGES = YES; 530 | FRAMEWORK_SEARCH_PATHS = ( 531 | "$(inherited)", 532 | "$(PROJECT_DIR)/Flutter/ephemeral", 533 | ); 534 | INFOPLIST_FILE = Runner/Info.plist; 535 | LD_RUNPATH_SEARCH_PATHS = ( 536 | "$(inherited)", 537 | "@executable_path/../Frameworks", 538 | ); 539 | PROVISIONING_PROFILE_SPECIFIER = ""; 540 | SWIFT_VERSION = 5.0; 541 | }; 542 | name = Release; 543 | }; 544 | 33CC111C2044C6BA0003C045 /* Debug */ = { 545 | isa = XCBuildConfiguration; 546 | buildSettings = { 547 | CODE_SIGN_STYLE = Manual; 548 | PRODUCT_NAME = "$(TARGET_NAME)"; 549 | }; 550 | name = Debug; 551 | }; 552 | 33CC111D2044C6BA0003C045 /* Release */ = { 553 | isa = XCBuildConfiguration; 554 | buildSettings = { 555 | CODE_SIGN_STYLE = Automatic; 556 | PRODUCT_NAME = "$(TARGET_NAME)"; 557 | }; 558 | name = Release; 559 | }; 560 | /* End XCBuildConfiguration section */ 561 | 562 | /* Begin XCConfigurationList section */ 563 | 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { 564 | isa = XCConfigurationList; 565 | buildConfigurations = ( 566 | 33CC10F92044A3C60003C045 /* Debug */, 567 | 33CC10FA2044A3C60003C045 /* Release */, 568 | 338D0CE9231458BD00FA5F75 /* Profile */, 569 | ); 570 | defaultConfigurationIsVisible = 0; 571 | defaultConfigurationName = Release; 572 | }; 573 | 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { 574 | isa = XCConfigurationList; 575 | buildConfigurations = ( 576 | 33CC10FC2044A3C60003C045 /* Debug */, 577 | 33CC10FD2044A3C60003C045 /* Release */, 578 | 338D0CEA231458BD00FA5F75 /* Profile */, 579 | ); 580 | defaultConfigurationIsVisible = 0; 581 | defaultConfigurationName = Release; 582 | }; 583 | 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { 584 | isa = XCConfigurationList; 585 | buildConfigurations = ( 586 | 33CC111C2044C6BA0003C045 /* Debug */, 587 | 33CC111D2044C6BA0003C045 /* Release */, 588 | 338D0CEB231458BD00FA5F75 /* Profile */, 589 | ); 590 | defaultConfigurationIsVisible = 0; 591 | defaultConfigurationName = Release; 592 | }; 593 | /* End XCConfigurationList section */ 594 | }; 595 | rootObject = 33CC10E52044A3C60003C045 /* Project object */; 596 | } 597 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "app_icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "app_icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "app_icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "app_icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "app_icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "app_icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "app_icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "app_icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "app_icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "app_icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = example_app 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2020 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController.init() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/example_app/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/example_app/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: example_app 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.12.0 <4.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | provider: ^6.1.1 27 | intl: ^0.19.0 28 | 29 | # The following adds the Cupertino Icons font to your application. 30 | # Use with the CupertinoIcons class for iOS style icons. 31 | cupertino_icons: ^1.0.6 32 | 33 | dev_dependencies: 34 | flutter_test: 35 | sdk: flutter 36 | import_sorter: ^4.6.0 37 | 38 | # For information on the generic Dart part of this file, see the 39 | # following page: https://dart.dev/tools/pub/pubspec 40 | 41 | # The following section is specific to Flutter. 42 | flutter: 43 | # The following line ensures that the Material Icons font is 44 | # included with your application, so that you can use the icons in 45 | # the material Icons class. 46 | uses-material-design: true 47 | # To add assets to your application, add an assets section, like this: 48 | # assets: 49 | # - images/a_dot_burr.jpeg 50 | # - images/a_dot_ham.jpeg 51 | # An image asset can refer to one or more resolution-specific "variants", see 52 | # https://flutter.dev/assets-and-images/#resolution-aware. 53 | # For details regarding adding assets from package dependencies, see 54 | # https://flutter.dev/assets-and-images/#from-packages 55 | # To add custom fonts to your application, add a fonts section here, 56 | # in this "flutter" section. Each entry in this list should have a 57 | # "family" key with the font family name, and a "fonts" key with a 58 | # list giving the asset and other descriptors for the font. For 59 | # example: 60 | # fonts: 61 | # - family: Schyler 62 | # fonts: 63 | # - asset: fonts/Schyler-Regular.ttf 64 | # - asset: fonts/Schyler-Italic.ttf 65 | # style: italic 66 | # - family: Trajan Pro 67 | # fonts: 68 | # - asset: fonts/TrajanPro.ttf 69 | # - asset: fonts/TrajanPro_Bold.ttf 70 | # weight: 700 71 | # 72 | # For details regarding fonts from package dependencies, 73 | # see https://flutter.dev/custom-fonts/#from-packages 74 | 75 | import_sorter: 76 | emojis: true 77 | -------------------------------------------------------------------------------- /example/example_app/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/web/favicon.png -------------------------------------------------------------------------------- /example/example_app/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/web/icons/Icon-192.png -------------------------------------------------------------------------------- /example/example_app/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluttercommunity/import_sorter/641f363d40a4ffb42ab577a43433fc48c5059b19/example/example_app/web/icons/Icon-512.png -------------------------------------------------------------------------------- /example/example_app/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | example_app 18 | 19 | 20 | 21 | 24 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /example/example_app/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example_app", 3 | "short_name": "example_app", 4 | "start_url": ".", 5 | "display": "minimal-ui", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /lib/args.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:io'; 3 | 4 | void outputHelp() { 5 | final fancyAsciiTitle = ''' 6 | ___ _____ ______ ________ ________ ________ _________ 7 | |\\ \\|\\ _ \\ _ \\|\\ __ \\|\\ __ \\|\\ __ \\|\\___ ___\\ 8 | \\ \\ \\ \\ \\\\\\__\\ \\ \\ \\ \\|\\ \\ \\ \\|\\ \\ \\ \\|\\ \\|___ \\ \\_| 9 | \\ \\ \\ \\ \\\\|__| \\ \\ \\ ____\\ \\ \\\\\\ \\ \\ _ _\\ \\ \\ \\ 10 | \\ \\ \\ \\ \\ \\ \\ \\ \\ \\___|\\ \\ \\\\\\ \\ \\ \\\\ \\| \\ \\ \\ 11 | \\ \\__\\ \\__\\ \\ \\__\\ \\__\\ \\ \\_______\\ \\__\\\\ _\\ \\ \\__\\ 12 | \\|__|\\|__| \\|__|\\|__| \\|_______|\\|__|\\|__| \\|__| 13 | 14 | ________ ________ ________ _________ _______ ________ 15 | |\\ ____\\|\\ __ \\|\\ __ \\|\\___ ___\\\\ ___ \\ |\\ __ \\ 16 | \\ \\ \\___|\\ \\ \\|\\ \\ \\ \\|\\ \\|___ \\ \\_\\ \\ __/|\\ \\ \\|\\ \\ 17 | \\ \\_____ \\ \\ \\\\\\ \\ \\ _ _\\ \\ \\ \\ \\ \\ \\_|/_\\ \\ _ _\\ 18 | \\|____|\\ \\ \\ \\\\\\ \\ \\ \\\\ \\| \\ \\ \\ \\ \\ \\_|\\ \\ \\ \\\\ \\| 19 | ____\\_\\ \\ \\_______\\ \\__\\\\ _\\ \\ \\__\\ \\ \\_______\\ \\__\\\\ _\\ 20 | |\\_________\\|_______|\\|__|\\|__| \\|__| \\|_______|\\|__|\\|__| 21 | \\|_________| 22 | '''; 23 | 24 | stdout.write(fancyAsciiTitle); 25 | stdout.write('\nFlags:'); 26 | stdout.write('\n --emojis, -e Add emojis to import comments.'); 27 | stdout.write('\n --help, -h Display this help command.'); 28 | stdout.write( 29 | '\n --ignore-config Ignore configuration in pubspec.yaml (if there is any).'); 30 | stdout.write( 31 | "\n --exit-if-changed Return an error if any file isn't sorted. Good for CI."); 32 | stdout.write( 33 | "\n --no-comments Don't put any comments before the imports.\n"); 34 | exit(0); 35 | } 36 | -------------------------------------------------------------------------------- /lib/files.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:io'; 3 | 4 | /// Get all the dart files for the project and the contents 5 | Map dartFiles(String currentPath, List args) { 6 | final dartFiles = {}; 7 | final allContents = [ 8 | ..._readDir(currentPath, 'lib'), 9 | ..._readDir(currentPath, 'bin'), 10 | ..._readDir(currentPath, 'test'), 11 | ..._readDir(currentPath, 'tests'), 12 | ..._readDir(currentPath, 'test_driver'), 13 | ..._readDir(currentPath, 'integration_test'), 14 | ]; 15 | 16 | for (final fileOrDir in allContents) { 17 | if (fileOrDir is File && fileOrDir.path.endsWith('.dart')) { 18 | dartFiles[fileOrDir.path] = fileOrDir; 19 | } 20 | } 21 | 22 | // If there are only certain files given via args filter the others out 23 | var onlyCertainFiles = false; 24 | for (final arg in args) { 25 | if (!onlyCertainFiles) { 26 | onlyCertainFiles = arg.endsWith('dart'); 27 | } 28 | } 29 | 30 | if (onlyCertainFiles) { 31 | final patterns = args.where((arg) => !arg.startsWith('-')); 32 | final filesToKeep = {}; 33 | 34 | for (final fileName in dartFiles.keys) { 35 | var keep = false; 36 | for (final pattern in patterns) { 37 | if (RegExp(pattern).hasMatch(fileName)) { 38 | keep = true; 39 | break; 40 | } 41 | } 42 | if (keep) { 43 | filesToKeep[fileName] = File(fileName); 44 | } 45 | } 46 | return filesToKeep; 47 | } 48 | 49 | return dartFiles; 50 | } 51 | 52 | List _readDir(String currentPath, String name) { 53 | if (Directory('$currentPath/$name').existsSync()) { 54 | return Directory('$currentPath/$name').listSync(recursive: true); 55 | } 56 | return []; 57 | } 58 | -------------------------------------------------------------------------------- /lib/sort.dart: -------------------------------------------------------------------------------- 1 | // 🎯 Dart imports: 2 | import 'dart:io'; 3 | 4 | /// Sort the imports 5 | /// Returns the sorted file as a string at 6 | /// index 0 and the number of sorted imports 7 | /// at index 1 8 | ImportSortData sortImports( 9 | List lines, 10 | String packageName, 11 | bool emojis, 12 | bool exitIfChanged, 13 | bool noComments, { 14 | String? filePath, 15 | }) { 16 | String dartImportComment(bool emojis) => 17 | '//${emojis ? ' 🎯 ' : ' '}Dart imports:'; 18 | String flutterImportComment(bool emojis) => 19 | '//${emojis ? ' 🐦 ' : ' '}Flutter imports:'; 20 | String packageImportComment(bool emojis) => 21 | '//${emojis ? ' 📦 ' : ' '}Package imports:'; 22 | String projectImportComment(bool emojis) => 23 | '//${emojis ? ' 🌎 ' : ' '}Project imports:'; 24 | 25 | final beforeImportLines = []; 26 | final afterImportLines = []; 27 | 28 | final dartImports = []; 29 | final flutterImports = []; 30 | final packageImports = []; 31 | final projectRelativeImports = []; 32 | final projectImports = []; 33 | 34 | bool noImports() => 35 | dartImports.isEmpty && 36 | flutterImports.isEmpty && 37 | packageImports.isEmpty && 38 | projectImports.isEmpty && 39 | projectRelativeImports.isEmpty; 40 | 41 | var isMultiLineString = false; 42 | 43 | for (var i = 0; i < lines.length; i++) { 44 | // Check if line is in multiline string 45 | if (_timesContained(lines[i], "'''") == 1 || 46 | _timesContained(lines[i], '"""') == 1) { 47 | isMultiLineString = !isMultiLineString; 48 | } 49 | 50 | // If line is an import line 51 | if (lines[i].startsWith('import ') && 52 | lines[i].endsWith(';') && 53 | !isMultiLineString) { 54 | if (lines[i].contains('dart:')) { 55 | dartImports.add(lines[i]); 56 | } else if (lines[i].contains('package:flutter/')) { 57 | flutterImports.add(lines[i]); 58 | } else if (lines[i].contains('package:$packageName/')) { 59 | projectImports.add(lines[i]); 60 | } else if (lines[i].contains('package:')) { 61 | packageImports.add(lines[i]); 62 | } else { 63 | projectRelativeImports.add(lines[i]); 64 | } 65 | } else if (i != lines.length - 1 && 66 | (lines[i] == dartImportComment(false) || 67 | lines[i] == flutterImportComment(false) || 68 | lines[i] == packageImportComment(false) || 69 | lines[i] == projectImportComment(false) || 70 | lines[i] == dartImportComment(true) || 71 | lines[i] == flutterImportComment(true) || 72 | lines[i] == packageImportComment(true) || 73 | lines[i] == projectImportComment(true) || 74 | lines[i] == '// 📱 Flutter imports:') && 75 | lines[i + 1].startsWith('import ') && 76 | lines[i + 1].endsWith(';')) { 77 | } else if (noImports()) { 78 | beforeImportLines.add(lines[i]); 79 | } else { 80 | afterImportLines.add(lines[i]); 81 | } 82 | } 83 | 84 | // If no imports return original string of lines 85 | if (noImports()) { 86 | var joinedLines = lines.join('\n'); 87 | if (joinedLines.endsWith('\n') && !joinedLines.endsWith('\n\n')) { 88 | joinedLines += '\n'; 89 | } else if (!joinedLines.endsWith('\n')) { 90 | joinedLines += '\n'; 91 | } 92 | return ImportSortData(joinedLines, false); 93 | } 94 | 95 | // Remove spaces 96 | if (beforeImportLines.isNotEmpty) { 97 | if (beforeImportLines.last.trim() == '') { 98 | beforeImportLines.removeLast(); 99 | } 100 | } 101 | 102 | final sortedLines = [...beforeImportLines]; 103 | 104 | // Adding content conditionally 105 | if (beforeImportLines.isNotEmpty) { 106 | sortedLines.add(''); 107 | } 108 | if (dartImports.isNotEmpty) { 109 | if (!noComments) sortedLines.add(dartImportComment(emojis)); 110 | dartImports.sort(); 111 | sortedLines.addAll(dartImports); 112 | } 113 | if (flutterImports.isNotEmpty) { 114 | if (dartImports.isNotEmpty) sortedLines.add(''); 115 | if (!noComments) sortedLines.add(flutterImportComment(emojis)); 116 | flutterImports.sort(); 117 | sortedLines.addAll(flutterImports); 118 | } 119 | if (packageImports.isNotEmpty) { 120 | if (dartImports.isNotEmpty || flutterImports.isNotEmpty) { 121 | sortedLines.add(''); 122 | } 123 | if (!noComments) sortedLines.add(packageImportComment(emojis)); 124 | packageImports.sort(); 125 | sortedLines.addAll(packageImports); 126 | } 127 | if (projectImports.isNotEmpty || projectRelativeImports.isNotEmpty) { 128 | if (dartImports.isNotEmpty || 129 | flutterImports.isNotEmpty || 130 | packageImports.isNotEmpty) { 131 | sortedLines.add(''); 132 | } 133 | if (!noComments) sortedLines.add(projectImportComment(emojis)); 134 | projectImports.sort(); 135 | projectRelativeImports.sort(); 136 | sortedLines.addAll(projectImports); 137 | sortedLines.addAll(projectRelativeImports); 138 | } 139 | 140 | sortedLines.add(''); 141 | 142 | var addedCode = false; 143 | for (var j = 0; j < afterImportLines.length; j++) { 144 | if (afterImportLines[j] != '') { 145 | sortedLines.add(afterImportLines[j]); 146 | addedCode = true; 147 | } 148 | if (addedCode && afterImportLines[j] == '') { 149 | sortedLines.add(afterImportLines[j]); 150 | } 151 | } 152 | sortedLines.add(''); 153 | 154 | final sortedFile = sortedLines.join('\n'); 155 | final original = '${lines.join('\n')}\n'; 156 | if (exitIfChanged && original != sortedFile) { 157 | if (filePath != null) { 158 | stdout 159 | .writeln('\n┗━━🚨 File $filePath does not have its imports sorted.'); 160 | } 161 | exit(1); 162 | } 163 | if (original == sortedFile) { 164 | return ImportSortData(original, false); 165 | } 166 | 167 | return ImportSortData(sortedFile, true); 168 | } 169 | 170 | /// Get the number of times a string contains another 171 | /// string 172 | int _timesContained(String string, String looking) => 173 | string.split(looking).length - 1; 174 | 175 | /// Data to return from a sort 176 | class ImportSortData { 177 | final String sortedFile; 178 | final bool updated; 179 | 180 | const ImportSortData(this.sortedFile, this.updated); 181 | } 182 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: import_sorter 2 | description: Automatically organize your dart imports 3 | version: 4.6.0 4 | repository: "https://github.com/fluttercommunity/import_sorter" 5 | homepage: "https://mattglei.ch" 6 | maintainer: Matthew Gleich (@gleich) 7 | 8 | environment: 9 | sdk: ">=2.12.0 <4.0.0" 10 | 11 | dependencies: 12 | args: ^2.4.2 13 | tint: ^2.0.1 14 | yaml: ^3.1.2 15 | 16 | dev_dependencies: 17 | lints: ^3.0.0 18 | test: ^1.16.7 19 | 20 | 21 | import_sorter: 22 | emojis: true 23 | -------------------------------------------------------------------------------- /test/sort_test.dart: -------------------------------------------------------------------------------- 1 | // 📦 Package imports: 2 | import 'package:test/test.dart'; 3 | 4 | // 🌎 Project imports: 5 | import 'package:import_sorter/sort.dart'; 6 | 7 | void switcher(bool emojis, bool noComments) { 8 | const packageName = 'import_sorter_test'; 9 | 10 | // Imports: 11 | const dartImports = ''' 12 | import 'dart:async'; 13 | import 'dart:io'; 14 | import 'dart:js'; 15 | '''; 16 | const flutterImports = ''' 17 | import 'package:flutter/cupertino.dart'; 18 | import 'package:flutter/material.dart'; 19 | import 'package:flutter/painting.dart'; 20 | import 'package:flutter/physics.dart'; 21 | '''; 22 | const packageImports = ''' 23 | import 'package:intl/intl.dart'; 24 | import 'package:provider/provider.dart'; 25 | '''; 26 | const projectImports = ''' 27 | import 'package:import_sorter_test/anotherFile2.dart'; 28 | import 'anotherFile.dart' as af; 29 | '''; 30 | 31 | const sampleProgram = ''' 32 | void main(List args) async { 33 | final stopwatch = Stopwatch(); 34 | stopwatch.start(); 35 | 36 | final currentPath = Directory.current.path; 37 | /* 38 | Getting the package name and dependencies/dev_dependencies 39 | Package name is one factor used to identify project imports 40 | Dependencies/dev_dependencies names are used to identify package imports 41 | */ 42 | final pubspecYamlFile = File('\${currentPath}/pubspec.yaml'); 43 | final pubspecYaml = loadYaml(pubspecYamlFile.readAsStringSync()); 44 | }'''; 45 | 46 | final dartImportComment = 47 | noComments ? '' : '// ${emojis ? '🎯 ' : ''}Dart imports:\n'; 48 | final flutterImportComment = 49 | noComments ? '' : '// ${emojis ? '🐦 ' : ''}Flutter imports:\n'; 50 | final packageImportComment = 51 | noComments ? '' : '// ${emojis ? '📦 ' : ''}Package imports:\n'; 52 | final projectImportComment = 53 | noComments ? '' : '// ${emojis ? '🌎 ' : ''}Project imports:\n'; 54 | 55 | test( 56 | 'No imports and no code', 57 | () { 58 | expect( 59 | sortImports( 60 | [], 61 | packageName, 62 | emojis, 63 | false, 64 | noComments, 65 | ).sortedFile, 66 | '\n', 67 | ); 68 | }, 69 | ); 70 | test( 71 | 'Single code line', 72 | () { 73 | expect( 74 | sortImports( 75 | ['enum HomeEvent { showInfo, showDiscover, showProfile }', ''], 76 | packageName, 77 | emojis, 78 | false, 79 | noComments, 80 | ).sortedFile, 81 | 'enum HomeEvent { showInfo, showDiscover, showProfile }\n\n', 82 | ); 83 | }, 84 | ); 85 | test( 86 | 'No code, only imports', 87 | () { 88 | expect( 89 | sortImports( 90 | '$projectImports\n$packageImports\n$dartImports\n$flutterImports\n' 91 | .split('\n'), 92 | packageName, 93 | emojis, 94 | false, 95 | noComments, 96 | ).sortedFile, 97 | '$dartImportComment$dartImports\n$flutterImportComment$flutterImports\n$packageImportComment$packageImports\n$projectImportComment$projectImports\n', 98 | ); 99 | }, 100 | ); 101 | test( 102 | 'No imports', 103 | () { 104 | expect( 105 | sortImports( 106 | sampleProgram.split('\n'), 107 | packageName, 108 | emojis, 109 | false, 110 | noComments, 111 | ).sortedFile, 112 | '$sampleProgram\n'); 113 | }, 114 | ); 115 | test( 116 | 'Dart Imports', 117 | () { 118 | expect( 119 | sortImports( 120 | '$dartImports\n$sampleProgram'.split('\n'), 121 | packageName, 122 | emojis, 123 | false, 124 | noComments, 125 | ).sortedFile, 126 | '$dartImportComment$dartImports\n$sampleProgram\n', 127 | ); 128 | }, 129 | ); 130 | test( 131 | 'Flutter Imports', 132 | () { 133 | expect( 134 | sortImports( 135 | '$flutterImports\n$sampleProgram'.split('\n'), 136 | packageName, 137 | emojis, 138 | false, 139 | noComments, 140 | ).sortedFile, 141 | '$flutterImportComment$flutterImports\n$sampleProgram\n', 142 | ); 143 | }, 144 | ); 145 | test( 146 | 'Package Imports', 147 | () { 148 | expect( 149 | sortImports( 150 | '$packageImports\n$sampleProgram'.split('\n'), 151 | packageName, 152 | emojis, 153 | false, 154 | noComments, 155 | ).sortedFile, 156 | '$packageImportComment$packageImports\n$sampleProgram\n', 157 | ); 158 | }, 159 | ); 160 | test( 161 | 'Project Imports', 162 | () { 163 | expect( 164 | sortImports( 165 | '$projectImports\n$sampleProgram'.split('\n'), 166 | packageName, 167 | emojis, 168 | false, 169 | noComments, 170 | ).sortedFile, 171 | '$projectImportComment$projectImports\n$sampleProgram\n', 172 | ); 173 | }, 174 | ); 175 | test( 176 | 'All Imports', 177 | () { 178 | expect( 179 | sortImports( 180 | '$projectImports\n$packageImports\n$dartImports\n$flutterImports\n$sampleProgram' 181 | .split('\n'), 182 | packageName, 183 | emojis, 184 | false, 185 | noComments, 186 | ).sortedFile, 187 | '$dartImportComment$dartImports\n$flutterImportComment$flutterImports\n$packageImportComment$packageImports\n$projectImportComment$projectImports\n$sampleProgram\n', 188 | ); 189 | }, 190 | ); 191 | test( 192 | 'Code before all imports', 193 | () { 194 | expect( 195 | sortImports( 196 | 'library import_sorter;\n$projectImports\n$packageImports\n$dartImports\n$flutterImports\n$sampleProgram' 197 | .split('\n'), 198 | packageName, 199 | emojis, 200 | false, 201 | noComments, 202 | ).sortedFile, 203 | 'library import_sorter;\n\n$dartImportComment$dartImports\n$flutterImportComment$flutterImports\n$packageImportComment$packageImports\n$projectImportComment$projectImports\n$sampleProgram\n', 204 | ); 205 | }, 206 | ); 207 | } 208 | 209 | void main() { 210 | group( 211 | 'No Emojis and Comments', 212 | () => switcher(false, false), 213 | ); 214 | group( 215 | 'Emojis and Comments', 216 | () => switcher(true, false), 217 | ); 218 | group( 219 | 'No Emojis and No Comments', 220 | () => switcher(false, true), 221 | ); 222 | group( 223 | 'Emojis and No Comments', 224 | () => switcher(true, true), 225 | ); 226 | } 227 | --------------------------------------------------------------------------------