Dart 是一门易于上手、可移植且高性能的语言,专为全栈应用开发而设计。它提供健全的空安全(null safety)、强大的类型系统,并能将代码编译为原生机器码(适用于移动端、桌面端和后端),以及 JavaScript 或 WebAssembly(适用于 Web)。Dart 虽然是 Flutter 的基础,但它也被用于构建命令行工具、服务器及其他应用程序。
术语表
docs.flutter.dev 中使用的术语表。
以下是 Flutter 文档中使用的术语定义。
自适应 (Adaptive)
自适应设计是指 UI 在空间中是可用的,这与响应式设计(将 UI 适配进空间)不同。自适应应用程序会选择合适的布局(例如使用底部导航栏而不是侧边栏)和输入设备(例如鼠标与触摸),从而在当前设备上获得自然的体验。
相关文档和资源
代理技能 (Agent skill)
代理技能是一套专门的指令、脚本和资源,用于扩展 AI 代理针对特定领域或任务的能力。技能使代理能够与环境交互、执行多步骤工作流,并自主完成复杂的任务。
Cupertino
Flutter 的 cupertino 库实现了 iOS 设计语言,包含一组遵循 Apple 人机界面指南(Human Interface Guidelines)的组件。
cupertino 库最初是 Flutter 主仓库的一部分,未来将被解耦为一个独立的软件包。更多信息,请访问 flutter.dev/go/decouple-design。
相关文档和资源
声明式 (Declarative)
声明式编程是一种通过描述 UI 的当前状态来构建界面的风格,框架会自动处理 UI 转换以匹配该状态。
在 Flutter 中,组件(Widgets)是不可变的“蓝图”。要更改 UI,组件会触发自身的重建(通常通过调用 setState)并构建一个新的组件子树。这与命令式编程形成对比,在命令式编程中,你需要手动构建和修改 UI 实体。
相关文档和资源
嵌入器 (Embedder)
Flutter 支持的每个原生平台都有一个用于处理平台特定逻辑的嵌入器。嵌入器是与底层操作系统协调的桥梁。它提供对输入、辅助功能、消息事件循环等服务的访问。嵌入器还负责启动和管理 Flutter 引擎。
每个嵌入器都使用该平台的原生语言编写:Android 使用 Java 和 Kotlin,iOS 和 macOS 使用 Swift 和 Objective-C,Windows 和 Linux 使用 C++。
每个嵌入器都允许插件包为应用程序添加额外的平台特定功能。
嵌入器由运行器(Runner)应用程序启动和管理。
引擎
帧 (Frame)
热重载
此功能也称为“有状态热重载”。当 Dart 运行时使用字段和函数的新版本更新类后,Flutter 框架会自动重建组件树,让你快速查看更改后的效果。热重载极大地提高了开发效率。
热重载适用于在调试模式下运行的移动端、Web 和桌面端应用程序,并得到 VS Code、Android Studio 和 IntelliJ IDEA 的全面支持。它不会重新运行 main 或 initState;若要实现该操作,请使用热重启 (hot restart)热重启 (Hot restart)与热重载类似,但不保持应用程序状态。使用热重启来重新运行 `main` 或 `initState`。了解更多.
热重启 (Hot restart)
main 或 initState。热重启仍然比完全重启快,完全重启还会重新编译原生平台代码(如 Swift)。在 Web 上,它还会重启 Dart 开发编译器 (DDC)。
相关文档和资源
Impeller
Impeller 是 Flutter 的高性能渲染引擎,它是为了满足 Flutter 的需求并利用现代图形 API 从零开始构建的。
其主要目标是提供持续平滑的性能并消除渲染时的卡顿,特别是因动画和交互期间着色器编译导致的性能问题。
Impeller 通过在应用程序构建时预编译特定且较小的着色器集合,而不是在运行时编译来实现这一目标。
卡顿 (Jank)
当系统跟不上预期的帧率并导致掉帧时,就会出现卡顿。卡顿是一个性能问题。Flutter 提供了诸如 DevTools 中的性能工具等信息和工具,可以帮助你诊断并修复应用程序中的卡顿问题。
Material
Material Design 是一套自适应的指南、组件和工具系统,支持用户界面设计的最佳实践。Flutter 的 material 库实现了 Material Design 组件。
material 库最初是 Flutter 主仓库的一部分,未来将被解耦为一个独立的软件包。更多信息,请访问 flutter.dev/go/decouple-design。
空安全 (Null safety)
null 的变量而导致的错误。Dart 的空安全防止了因无意中访问设置为 null 的变量而导致的错误。
通过 健全的空安全,变量默认不可为空:只有显式将其声明为可为空,才能赋值为 null。这与其他“混合”空安全实现不同,在混合实现中,不可为空的变量在运行时仍可能包含 null。使用 Dart 的健全空安全,编译器可以保证不可为空的变量永远不会是 null。
相关文档和资源
属性钻取 (Prop drilling)
通过构造函数参数在多层组件中传递数据的过程,通常是为了触达更深层的后代组件。这种模式可能会变得冗长,因此通常会使用其他状态管理解决方案(如 InheritedWidget 或 Provider)。
相关文档和资源
pub
Pub 是用于管理 Dart 包的工具。它允许你安装、升级和管理 Dart 应用程序的依赖项。依赖项定义在 pubspec.yaml 文件中。包托管在官方包仓库 pub.dev 上。
相关文档和资源
RenderObject
虽然组件是不可变的蓝图,但 RenderObject 是在帧之间持久存在的不可变对象。它们处理决定元素放置位置及外观的繁重工作。
它们代表渲染树中的一个节点,渲染树是 Flutter 多树架构中最详细的树。
Sliver
Sliver 是可滚动区域中定义的一种具有特殊行为的部分。你可以将 Sliver 视为构建块,将它们组合在 CustomScrollView 中以创建自定义滚动体验,例如弹性滚动或折叠标题。Sliver 是惰性构建的,这意味着 Flutter 只会渲染屏幕上可见的 Sliver,因此对于超长内容列表非常高效。
视口 (Viewport)
视口是滚动机制的视觉组件。它根据当前滚动偏移量显示其子组件(通常是 Sliver)的子集。它常被描述为“内部比外部大”,因为它所包含的内容可以比屏幕上实际显示的多得多。
相关文档和资源
小部件
用户界面一部分的不可变描述。
在 Flutter 中,几乎一切皆为组件 (Widget)。组件是你使用 Flutter 构建应用程序 UI 的基本构建块。每个组件都是对其当前配置和状态下“UI 应该是什么样”的不可变声明。
组件在层次结构中组合在一起,形成组件树。当组件的状态发生变化时,Flutter 框架会重建树的必要部分以更新 UI。
两种主要的组件类型是 StatelessWidget(无状态组件,没有可变状态)和 StatefulWidget(有状态组件,具有可更新的持久 状态)。
除非另有说明,本网站上的文档反映的是 Flutter 3.41.5 版本。报告问题。