认识
Flutter 是一个开源的跨平台 UI 开发框架,由 Google 开发并维护,支持快速构建高性能的移动、Web、桌面和嵌入式应用。它的核心设计理念是 “一次编写,多端运行”,同时保持原生级别的性能。
Flutter is an open source framework for building beautiful, natively compiled, multi-platform applications from a single codebase.
虽然 Flutter 最初是为移动应用程序开发设计的,但现在也支持桌面应用程序开发。Flutter 使用 Dart 语言开发,可以编译成本地代码。
官网:https://flutter.dev/
文档:https://docs.flutter.dev/
仓库:https://github.com/flutter/flutter
组成
Flutter 的组成可以概括为:引擎(渲染 + Dart)+ 框架(Widgets)+ 工具链 + 多平台嵌入。
这种分层设计使其兼具高性能、灵活性和跨平台一致性,成为现代应用开发的热门选择。
核心设计思想
- 一切皆 Widget:UI 由嵌套的 Widget 组合而成(如布局、样式、交互)。
- 不可变 UI:Widget 是不可变的,通过重建(而非修改)更新界面。
- 响应式框架:状态变化自动触发 UI 更新(类似 React)。
引擎 Engine
作用:Flutter 的核心底层框架,负责渲染、输入事件处理、Dart 运行时等核心功能。
关键组件:
- Skia:2D 图形渲染引擎(Google 开源),负责绘制 Flutter 的 UI。
- Dart Runtime:执行 Dart 代码的虚拟机(JIT 开发模式 / AOT 发布模式)。
- Platform Channels:提供与原生平台(Android/iOS)通信的能力(如调用原生 API)。
- Text Rendering:文本渲染(如字体、排版)。
特点:
- 引擎使用 C/C++ 编写,确保高性能。
- 直接调用 Skia 绘制 UI,不依赖平台原生控件,因此能实现高度一致的跨平台渲染。
框架 Framework
Flutter 的 Dart 层框架,为开发者提供了一套丰富的 API,分为三层:
### a. 基础层(Foundation)
作用:提供最基础的类和服务(如动画、手势、绘图)。
关键库:
- `dart:ui`:底层 UI 库(与引擎交互)。
- `package:flutter/foundation.dart`:基础工具类(如 `Key`、`Diagnostics`)。
### b. 渲染层(Rendering)
作用:处理 UI 布局和绘制(基于 “组合(Composition)” 而非继承的渲染树)。
关键类:
- `RenderObject`:渲染树的基类,负责布局(Layout)和绘制(Paint)。
- `Widget` → `Element` → `RenderObject`:Flutter 的核心渲染流程。
### c. 组件层(Widgets)
作用:提供可复用的 UI 组件(Widgets),开发者直接使用的交互式元素。
关键库:
- `package:flutter/widgets.dart`:核心 Widget(如 `Container`、`Text`)。
- `package:flutter/material.dart`:Material Design 风格组件。
- `package:flutter/cupertino.dart`:iOS 风格组件(Cupertino)。
语言 Dart
作用:Flutter 的编程语言,由 Google 开发,专为 UI 构建优化。
关键特性:
- JIT & AOT 编译:开发时快速刷新(JIT),发布时高效运行(AOT)。
- 响应式编程:通过 `setState`、`Stream`、`Provider` 等实现状态管理。
- 单线程 + Isolate:支持异步编程(`async/await`),避免 UI 卡顿。
开发工具 Tooling
Flutter 提供了一套完整的开发工具链:
- CLI:项目管理(`create`、`run`、`build`)、包管理(`pub get`)。
- Hot Reload:实时更新 UI 而不丢失应用状态。
- DevTools:调试性能、检查 Widget 树、网络请求等。
- IDE 插件:Android Studio、VS Code 的 Flutter 扩展。
平台嵌入层(Embedder)
作用:将 Flutter 引擎适配到不同平台(如 Android、iOS、Windows、macOS)。
关键功能:
- 提供平台线程管理、事件循环、渲染表面(如 Android 的 `Surface`、iOS 的 `CALayer`)。
- 处理平台原生交互(如生命周期、权限)。
包生态系统(Pub)
Pub 仓库:Dart 和 Flutter 的官方包仓库 https://pub.dev
常用包类型:
- UI 组件(如 `flutter_bloc`、`provider`)。
- 工具类(如 `http`、`shared_preferences`)。
- 平台适配(如 `webview_flutter`、`camera`)。
构建
安装 Flutter SDK
通过合理配置这两个变量,可以显著提升 Flutter 和 Dart 包管理在受限网络环境下的可用性。
在中国网络环境下使用 Flutter | https://docs.flutter.cn/community/china
flutter –version
Flutter 3.29.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 35c388afb5 (3 months ago) • 2025-02-10 12:48:41 -0800
Engine • revision f73bfc4522
Tools • Dart 3.7.0 • DevTools 2.42.2
然后运行安装 flutter 库:flutter pub get
打包正式:flutter build web –dart-define=APP_ENV=prd
打包测试:flutter build web –dart-define=APP_ENV=dev
构建产物:会在 build 下面的 web(等于 dist)
PUB_HOSTED_URL 与 FLUTTER_STORAGE_BASE_URL
### 1. `PUB_HOSTED_URL`
作用:指定 Dart 包管理器(`pub`)使用的包仓库(Pub 仓库)的镜像地址。
- 默认值:`https://pub.dev`(官方源)
- 镜像示例(如中国大陆用户常用):
用途:
- 当运行 `flutter pub get` 或 `dart pub add` 等命令时,Flutter 会从该 URL 下载依赖的 Dart 包。
- 如果官方源访问慢或不可达,通过切换为镜像源可以加速依赖下载。
### 2. `FLUTTER_STORAGE_BASE_URL`
作用:指定 Flutter SDK 本身的存储下载地址(包括 SDK 二进制文件、引擎编译产物等)。
- 默认值:`https://storage.googleapis.com`(Google 存储服务)
- 镜像示例(如中国大陆用户常用):
用途:
- 当执行 `flutter upgrade` 或首次安装 Flutter 时,会从该地址下载 Flutter SDK 的更新或组件。
- 如果无法访问 Google 服务,通过切换为镜像源可以正常下载 Flutter 相关文件。
性质
支持的平台
Flutter 支持多平台,通过同一套代码生成不同平台的产物:
移动端:Android、iOS
Web:编译为 HTML/CSS/JavaScript
桌面端:Windows、macOS、Linux
嵌入式:Raspberry Pi、汽车系统等(通过 Flutter Embedding API)。
参考
DeepSeek / 在 flutter 中,PUB_HOSTED_URL 与 FLUTTER_STORAGE_BASE_URL 两个环境变量的作用
DeepSeek / 介绍 Flutter 的组成