Flutter几种创建模式

Flutter 提供了多种创建模式,针对不同的开发需求,可以选择合适的模板来初始化项目或组件。以下是 Flutter 提供的主要创建模式,以及它们的特点和适用场景。

Application 模式(默认模式)

命令:

1
flutter create my_flutter_app

特点:

默认用于创建完整的 Flutter 应用程序。
生成包含所有必要目录和文件的结构:
lib/:应用程序的主要代码目录。
test/:单元测试目录。
android/ios/:原生平台代码(如果需要,可以在其中实现平台功能)。
web/windows/ 等:支持特定平台的代码(仅在启用时生成)。
适用场景:

开发一个完整的 Flutter 应用程序。
以 Flutter 为核心,覆盖多个平台(Android、iOS、Web、桌面等)。

Package 模式

命令:

1
flutter create --template=package my_flutter_package

特点:

创建一个共享的 Dart 包,可以用于封装逻辑或 UI 组件。
生成的结构主要用于管理 Dart 代码:
不包括 android/ios/ 等原生代码。
主要目录为 lib/test/
支持发布到 pub.dev,供其他开发者或项目使用。
适用场景:

创建通用的工具库、UI 组件库。
提取业务逻辑或共享模块,供多个项目依赖。
仅包含 Dart 代码,不需要平台相关功能。

Plugin 模式

命令:

1
flutter create --template=plugin my_flutter_plugin

特点:

用于创建支持 Dart 和原生代码的插件库。
包含 android/ios/ 等目录,用于实现平台特定功能。
可以通过 Dart API 调用底层原生代码(如蓝牙、相机等)。
适用场景:

封装原生功能,供 Flutter 应用使用。
开发跨平台插件并发布到 pub.dev。
实现特定平台相关的功能扩展。

Module 模式

命令:

1
flutter create --template=module my_flutter_module

特点:

用于将 Flutter 嵌入到现有的原生项目中。
生成的结构包含 Flutter 的代码和适配文件:
lib/:Flutter 代码目录。
.android/.ios/:用于集成到原生项目的桥接配置。
提供与原生项目交互的接口。
适用场景:

在已有的 Android 或 iOS 项目中嵌入 Flutter 页面。
实现混合开发,Flutter 用于部分功能或页面。

Skeleton 模式

命令:

1
flutter create --template=skeleton my_flutter_skeleton

特点:

提供一个最小化的 Flutter 项目结构。
适合快速启动或定制项目结构。
生成的项目仅包含最基本的文件和目录:
lib/ 目录和入口文件 main.dart
不包含测试代码或额外配置。
适用场景:

希望快速启动一个简单项目。
自定义项目结构,避免默认模板生成的多余内容。

其他模式

除了上述主要模式,Flutter 也支持一些特殊的模板,但通常用得较少。

特性模板

可以通过 --sample 参数创建官方提供的示例代码:

1
flutter create --sample=widgets.AppBar.1 my_sample_app

Web-only 模式

创建专用于 Web 的 Flutter 应用:

1
flutter create --platforms=web my_flutter_web_app

Desktop 模式

创建支持桌面平台的项目:

1
flutter create --platforms=windows,macos,linux my_flutter_desktop_app

总结对比表

模板 用途 是否支持原生代码 适用场景
Application 开发完整的 Flutter 应用 独立的 Flutter 项目开发
Package 创建共享 Dart 包,封装逻辑或组件 开发工具库、组件库
Plugin 开发支持 Dart 和原生功能的插件 封装原生功能,供多个项目使用
Module 在已有原生项目中嵌入 Flutter 混合开发
Skeleton 最小化项目模板 快速启动、轻量项目
特性模板 官方提供的特定组件或 API 示例 学习和参考示例实现

如何选择

  • 如果是 独立开发 Flutter 应用,选择 Application。
  • 如果是 通用库开发,选择 Package。
  • 如果需要 封装原生功能,选择 Plugin。
  • 如果是 混合开发,将 Flutter 嵌入原生项目,选择 Module。
  • 如果需要 快速启动,选择 Skeleton。