# Flutter Code formatting
---
# Why do we need code formatting?
🧑🏻💻👩🏻💻👨🏻💻
Note: 雖然您的程式碼可能符合個人的偏好,但基於我們的經驗,開發團隊可能會發現以下方式更高效:
1. 採用統一的風格:團隊使用一致的程式碼風格,有助於提高可讀性與維護性。
2. 自動化格式化:透過工具強制執行程式碼風格,減少手動調整的成本。
與其在程式碼審查中進行繁瑣的格式爭論(例如花時間討論格式,而非程式碼行為),不如將精力集中在程式碼的功能與邏輯上。
---
# How to organize imports in Dart?
---
## How does Dart's official website handle it?
* [Code formatting](https://docs.flutter.dev/tools/formatting)
* To preview proposed changes
``` sh
dart fix --dry-run
```
* remove unnecessary import statements.
``` sh
dart fix --apply
```
---
## Linter rules
* [directives_ordering](https://dart.dev/tools/linter-rules/directives_ordering)
* [always_use_package_imports](https://dart.dev/tools/linter-rules/always_use_package_imports)
* [avoid_relative_lib_imports](https://dart.dev/tools/linter-rules/avoid_relative_lib_imports)
* Intellij: [Format files from the command line](https://www.jetbrains.com/help/idea/command-line-formatter.html)
Note:
* directives_ordering: It caused 57 files to change.
* [Linter rules](https://dart.dev/tools/linter-rules#lints)
* [Recommended Linter rules](https://github.com/dart-lang/core/blob/main/pkgs/lints/lib/recommended.yaml)
---
## How does a third-party plugin do it? (Not recommended)
* [better_imports](https://pub.dev/packages/better_imports)
* [import_sorter](https://pub.dev/packages/import_sorter)
* [single_import_generator](https://pub.dev/packages/single_import_generator)
---
## How do I format code in Dart?
###### Automatically formatting code with the dart command
``` sh
dart format lib/main.dart
```
``` sh
dart format lib/main.dart -l 120
```
``` sh
# 僅格式化 /lib 資料夾中的 Dart 檔案,並排除 .g.dart 和 .freezed.dart 檔案
find ./lib -name "*.dart" ! -name "*.g.dart" ! -name "*.freezed.dart" -exec dart format {} -l 120 \;
```
---
## We can do this better.
* [Order other class members in a way that makes sense](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#formatting)
###### Linter rules
* [sort_constructors_first](https://dart.dev/tools/linter-rules/sort_constructors_first)
* [DCM - member-ordering](https://dcm.dev/docs/rules/common/member-ordering/)
Note:
1. Flutter 的程式碼可能每天都被數十萬人閱讀。更容易閱讀和理解的程式碼能為這些人節省時間。即使每人每天節省一秒鐘,也能累積節省數小時甚至數天的時間。開發人員為 Flutter 付出的額外格式化努力,直接轉化為團隊的效率提升。此外,當開發人員能更快掌握框架時,最終也能為使用者帶來更大的效益。
2. 建構函數應優先於其他內容
3. 按生命週期順序排列
---
# Thanks 🥹
{"contributors":"[{\"id\":\"911de02f-c8f8-4ddb-a91f-64cf7623d126\",\"add\":2543,\"del\":36}]","title":"How to Improve Project Manager's Hard Skills","slideOptions":"{\"spotlight\":{\"enabled\":false}}","description":"Note: 雖然您的程式碼可能符合個人的偏好,但基於我們的經驗,開發團隊可能會發現以下方式更高效:1.\t採用統一的風格:團隊使用一致的程式碼風格,有助於提高可讀性與維護性。2.\t自動化格式化:透過工具強制執行程式碼風格,減少手動調整的成本。"}