Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Flutter 架構與專案結構完整指南

本指南以白話方式介紹 Flutter 的系統架構與專案結構,幫助初學者快速掌握 Flutter 的運作原理和開發實務。

🏗️ Flutter 系統架構總覽

Flutter 採用分層架構設計,從上到下分為四個主要層級:

┌─────────────────────────────────────────┐
│              Flutter App                │  ← 開發者程式碼層
│  • Widget Tree (UI 元件樹)               │
│  • Business Logic (業務邏輯)             │
│  • State Management (狀態管理)           │
└─────────────────────────────────────────┘
                     ↓
┌─────────────────────────────────────────┐
│           Flutter Framework             │  ← Flutter 框架層
│  • Widgets (UI 元件庫)                   │
│  • Rendering (渲染系統)                  │
│  • Animation & Gesture (動畫與手勢)      │
│  • Material & Cupertino Design          │
└─────────────────────────────────────────┘
                     ↓
┌─────────────────────────────────────────┐
│            Flutter Engine               │  ← 引擎層 (C/C++)
│  • Skia Graphics Engine (繪圖引擎)       │
│  • Dart Runtime (Dart 執行時)           │
│  • Platform Channels (平臺通道)          │
│  • Text Layout & Input                  │
└─────────────────────────────────────────┘
                     ↓
┌─────────────────────────────────────────┐
│           Native Platform               │  ← 原生平臺層
│  • Android (Java/Kotlin)               │
│  • iOS (Objective-C/Swift)             │
│  • Windows/macOS/Linux/Web              │
└─────────────────────────────────────────┘

架構層級詳解

層級技術棧主要職責開發者接觸度
Flutter AppDart業務邏輯、UI 設計、狀態管理⭐⭐⭐⭐⭐ 高頻使用
FrameworkDart提供 Widget、動畫、手勢等 API⭐⭐⭐⭐ 經常使用
EngineC/C++渲染、平臺通訊、Dart VM⭐⭐ 偶爾接觸
Platform原生語言系統 API、硬體存取⭐ 特殊需求才用

📁 Flutter 專案結構深度解析

標準專案目錄結構

my_flutter_app/
├── 📱 android/              # Android 原生專案
│   ├── app/
│   │   ├── src/main/
│   │   │   ├── AndroidManifest.xml
│   │   │   └── kotlin/
│   │   └── build.gradle
│   └── gradle.properties
├── 🍎 ios/                  # iOS 原生專案
│   ├── Runner/
│   │   ├── Info.plist
│   │   └── AppDelegate.swift
│   └── Runner.xcodeproj/
├── 🌐 web/                  # Web 平臺檔案
│   ├── index.html
│   └── manifest.json
├── 💻 windows/              # Windows 桌面應用
├── 🐧 linux/               # Linux 桌面應用
├── 🖥️ macos/               # macOS 桌面應用
├── 📚 lib/                  # Dart 主程式碼區
│   ├── main.dart           # 應用程式入口
│   ├── models/             # 資料模型
│   ├── views/              # UI 畫面
│   ├── controllers/        # 邏輯控制器
│   ├── services/           # 服務層
│   ├── utils/              # 工具函數
│   └── constants/          # 常數定義
├── 🎨 assets/              # 靜態資源
│   ├── images/
│   ├── fonts/
│   └── data/
├── 🧪 test/                # 測試檔案
│   ├── unit_test/
│   ├── widget_test/
│   └── integration_test/
├── 📋 pubspec.yaml         # 專案配置檔
├── 📋 pubspec.lock         # 依賴版本鎖定
├── 🔧 analysis_options.yaml # 程式碼分析規則
├── 🏗️ build/               # 編譯產物(自動生成)
└── 🔨 .dart_tool/          # Dart 工具暫存(自動生成)

核心檔案與資料夾說明

📚 lib/ 目錄 - 程式核心

這是開發者花最多時間的地方,建議的組織結構:

lib/
├── main.dart              # 應用程式入口點
├── app.dart              # App 主體配置
├── 📱 screens/            # 畫面頁面
│   ├── home/
│   ├── profile/
│   └── settings/
├── 🧩 widgets/            # 可重用元件
│   ├── common/
│   └── custom/
├── 📊 models/             # 資料模型
├── 🔧 services/           # API 服務、資料庫
├── 🎛️ providers/          # 狀態管理
├── 🔄 utils/              # 工具函數
├── 🎨 themes/             # 主題設定
└── 📝 constants/          # 常數定義

📋 pubspec.yaml - 專案配置核心

name: my_flutter_app
description: Flutter 應用程式描述
version: 1.0.0+1

environment:
  sdk: '>=3.0.0 <4.0.0'
  flutter: ">=3.10.0"

dependencies:
  flutter:
    sdk: flutter
  # 第三方套件
  http: ^1.1.0
  provider: ^6.0.5

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0

flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/data/
  fonts:
    - family: CustomFont
      fonts:
        - asset: assets/fonts/CustomFont-Regular.ttf

🚀 開發工作流程

1. 專案建立與設定

# 建立新專案
flutter create my_app

# 進入專案目錄
cd my_app

# 檢查環境
flutter doctor

2. 開發流程

# 執行專案 (開發模式)
flutter run

# Hot Reload - 即時更新 UI
# 在 terminal 按 'r' 或在 IDE 中儲存檔案

# Hot Restart - 重啟應用狀態
# 在 terminal 按 'R'

3. 測試與除錯

# 執行單元測試
flutter test

# 執行整合測試
flutter drive --target=test_driver/app.dart

# 效能分析
flutter run --profile

4. 建置與部署

# 建置 Release 版本
flutter build apk          # Android APK
flutter build appbundle    # Android App Bundle
flutter build ios          # iOS (需在 macOS)
flutter build web          # Web 版本

🔗 平臺互操作機制

Platform Channels 通訊原理

Flutter App (Dart)
       ↕️ MethodChannel
Platform Code (Java/Kotlin/Swift/ObjC)
       ↕️
Native Platform APIs

使用範例

// Dart 端呼叫原生功能
static const platform = MethodChannel('app.channel/battery');

Future<String> getBatteryLevel() async {
  try {
    final int result = await platform.invokeMethod('getBatteryLevel');
    return 'Battery level at $result%';
  } on PlatformException catch (e) {
    return "Failed to get battery level: '${e.message}'.";
  }
}

🎯 最佳實務建議

專案結構組織

  • 按功能模組分資料夾:而非按檔案類型
  • 保持 Widget 樹簡潔:避免過深的巢狀結構
  • 善用 const 建構子:提升效能
  • 分離 UI 與邏輯:使用 MVVM 或 MVC 模式

效能最佳化

  • 使用 ListView.builder:處理大量清單資料
  • 實作適當的 shouldRebuild:避免不必要的重繪
  • 圖片最佳化:使用適當格式與尺寸
  • lazy loading:延遲載入不常用功能

程式碼品質

  • 遵循 Dart 編碼規範:使用 flutter_lints
  • 寫測試:單元測試、Widget 測試、整合測試
  • 使用型別安全:善用 Dart 的強型別特性
  • 文件化:為公開 API 撰寫文件註解

🛠️ 開發工具推薦

IDE 選擇

  • VS Code + Flutter 擴充套件 (輕量、快速)
  • Android Studio + Flutter plugin (功能完整)
  • IntelliJ IDEA + Dart/Flutter plugin

除錯工具

  • Flutter Inspector:視覺化 Widget 樹
  • Network Inspector:監控網路請求
  • Performance View:效能分析
  • Memory View:記憶體使用情況

📚 延伸學習資源

官方資源

社群資源


🎉 恭喜! 你現在對 Flutter 的架構和專案結構有了完整的理解。開始你的 Flutter 開發之旅吧!