
3.2 项目结构分析
了解项目结构对于深入学习flutter 有很重要的作用。在新建了Flutter 项目后,需要进一步了解Flutter 的项目结构、配置文件的作用等。由于Flutter 应用是跨平台应用,所以一般会包括android 和ios 两个目录。新建项目后,一般会看到如图3-15 所示的Flutter 默认项目结构。

图3-15 Flutter 默认项目结构
可以看到,其中主要包含了android、ios、lib、test 几个目录,以及pubspec.yaml 配置文件等。下面我们逐一介绍这几个目录的作用。
1.android 目录
android 目录显示了一个完整的Android 项目包含的内容,编译后,Flutter 代码会整合到这个Android 项目代码中,形成一个Flutter Android 应用。通过Android Studio 打开并预览android目录,其结构如图3-16 所示。

图3-16 android 目录结构
Android 项目默认启动的Activity 页面就是MainActivity,里面的内容如下。


可以看到,里面几乎没有什么代码逻辑,只是继承了FlutterActivity,然后将Flutter 相关插件注册进来。后续如果我们要编写插件,需要在这里写入一些回调插件逻辑。
如果需要修改Android 应用的包名、版本号、版本名称,实现方式与修改Android 项目是一样的,都是在app 目录下的build.gradle 里进行的,代码如下。

2.ios 目录
ios 目录和android 目录一样,其存放的是iOS 项目文件,涵盖了一个完整的iOS 项目。我们可以使用XCode 打开iOS 项目,并执行编译、修改、开发、调试等操作,例如完成iOS 平台图标的修改、版本号的修改等,这里不再赘述。
3.lib 目录
lib 目录中存放了核心的Flutter 代码逻辑:Dart 语言的类源代码文件(例如main.dart)。最终lib 下的源代码会被编译到Android 和iOS 平台并进行渲染。main.dart 类的名字不可以修改,必须放置在lib 根目录下,它是项目的入口文件,即入口类。在后面的章节中,我们会结合注释详细介绍main.dart,这里先给大家留一个悬念。
在实际开发中,我们还需要进行包划分,如图3-17 所示。我们可以在lib 里建立相关的文件夹,按照项目功能、类的类型和功能进行包划分。

图3-17 包划分
4.test 目录
test 目录里主要存放编写的测试用例,如测试UI 组件、数据等。test 目录里面默认有一个widget_test.dart 文件,用于编写测试用例。我们可以运行、修改、扩展其中的测试用例,实现Flutter 代码测试。
关于Flutter 项目结构和目录作用的内容介绍得差不多了,了解和掌握Flutter 项目结构和目录作用对于项目开发和应用架构都非常有帮助。