目录结构详解
这一节主要记录一下Flutter项目的目录结构及配置文件,为以后学习做个铺垫。将从以下几个方面做记录:
- Flutter项目结构
- Flutter配置文件
2.1.1 Flutter项目结构
先来看一下新建一个Flutter项目之后生成的目录结构图
可以看到,一个完整的Flutter主要有以下几个组成部分:
- android 目录
- ios 目录
- lib 目录
- test 目录
android 目录
看一下android目录都包含哪些东西?
我们可以看到,这个android目录其实就是一个完整的android项目,里边的组织结构和用AndroidStudio直接创建的Android项目是一样的。代码最终会被编译成Android平台运行的代码,入口文件是MainActivity.kt或者MainActivity.java
ios 目录
ios目录和android目录一样,存放的是IOS的项目文件,也是一个完整的IOS项目,可以在Xcode上进行开发、编译、调试等操作。
lib 目录
lib目录存放的是实现项目核心逻辑的dart文件,新创建的Flutter项目会默认有一个main.dart文件作为项目的入口文件。lib包下的代码文件最终会被渲染到android和ios两个平台。
test 目录
test目录主要存放测试代码,比如测试UI、数据等等,默认有一个widget_test.dart文件,可以单独运行这个dart测试文件进行测试。
2.1.2 Flutter配置文件
pubspec.yaml文件
这个文件是整个Flutter项目的配置文件,类似Android项目中的build.gradle文件。我们可以通过这个文件配置FlutterSDK,图片、字体、插件等内容。文件内容使用YAML格式的语法通过缩进的形式生成目录,其内容如下:
//应用名
name: flutter_app
//应用描述
description: A new Flutter application.
//版本号,区分Android和IOS
//+号前,对应android的versionName,IOS的CFBundleShortVersionString
//+号后,对应android的versionCode,IOS的CFBundleVersion
version: 1.0.0+1
//编译要求的dart版本号区间
environment:
sdk: ">=2.7.0 <3.0.0"
//插件库 https://pub.dartlang.org/flutter
dependencies:
flutter:
sdk: flutter
//引用插件库
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
//使用Material风格的图标和文字
uses-material-design: true
//引入图标
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
//引入字体
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
在配置文件中引用某个插件之后,如何将这个插件真正添加到项目中呢? 可以做个小测试:
在配置文件中引入flutter_webview_plugin这个插件,在添加之前先看一下GeneratedPluginRegistrant这个类中的内容
@Keep
public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
}
}
这个类在项目刚刚创建的时候只是注册了Flutter引擎,然后在配置文件中添加插件
flutter_webview_plugin: ^0.3.1
添加完了之后我们点击编辑器上方出现的pub get选项或者在Terminal中执行flutter packages get命令。命令执行完成之后,再次打开GeneratedPluginRegistrant文件,就会看到文件内容发生了变化,配置文件中新引用的flutter_webview_plugin被注册到了应用中。
@Keep
public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
com.flutter_webview_plugin.FlutterWebviewPlugin.registerWith(shimPluginRegistry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
}
}
pubspec.lock
标明了Flutter项目依赖的一些包、库以及插件的版本等信息,如果某个包或者库文件丢失,可以通过这个文件重新下载。
.packages
里边标明了仙姑依赖的包、库以及插件在本机的绝对路径,如果项目出错或者找不到某个库,可以把这个文件删除,重新自动配置。
.metadata
记录了项目是在哪个分支开发,项目属性等信息,用于切换分支,升级SDK,自动生成,无需修改删除。
.gitignore
git的忽略文件,添加到这个文件中的文件信息不会被添加到版本控制中。