Flutter Application
Flutter Application 表示一个Flutter项目,主体是Flutter,当然它也可以接入Android Module 或者 iOS Framework,其内部包含 Android 和 iOS 项目(默认情况下,以后正式支持Web、Windows、Mac等系统后可能更多),其目录结构如下:
其中各个目录说明如下:
- android:Android原生代码目录。
- ios:iOS原生代码目录。
- lib:这个是Flutter项目的核心目录,我们写的代码放在这个目录,我们也可以在这个目录创建子目录。
- test:测试代码目录。
- pubspec.yaml:这个是Flutter项目的依赖配置文件,类似于Android build.gradle文件,这里面包含了Flutter SDK 版本、依赖等,
- application 中的pubspec.yaml中可以看到多了一行
publist_to
的配置, 是防止我们使用flutter pub publish
命令将其发布到pub.dev上.
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
Flutter Plugin
Flutter Plugin表示 Flutter 插件,包含 Android 和 iOS 项目,如果你要开发一个 Plugin 且此 Plugin 涉及到原生支持,比如蓝牙功能、网络功能等,这些功能纯 Flutter 是无法实现的。
其目录比 Flutter Application 多了一个 example,example用于当前 Plugin 的demo, Flutter Plugin 开发完成后可以发布到 pub 上。
其目录结构如下:
- 其pubspec.ymal中多了关于该插件的名称,描述,版本等信息
name: plugin_demo
description: A new Flutter project.
version: 0.0.1
homepage:
此外还多了此插件关于平台的配置:
# This section identifies this Flutter project as a plugin project.
# The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.)
# which should be registered in the plugin registry. This is required for
# using method channels.
# The Android 'package' specifies package in which the registered class is.
# This is required for using method channels on Android.
# The 'ffiPlugin' specifies that native code should be built and bundled.
# This is required for using `dart:ffi`.
# All these are used by the tooling to maintain consistency when
# adding or updating assets for this project.
plugin:
platforms:
android:
package: com.example.plugin_demo
pluginClass: PluginDemoPlugin
ios:
pluginClass: PluginDemoPlugin
Flutter Package
Flutter Package 和 Flutter Plugin 基本一样,唯一的区别是Flutter Package表示纯 Flutter 模块,不需要原生开发,没有Android 和 iOS 项目,比如开发一个纯 UI 的插件。
其目录结构如下:
Flutter Module
Flutter Module 用于原生项目中插入 Flutter 模块,原生为主体,与 Flutter 进行混合开发。
其目录结构如下:
创建一个带有example的package
- 首先创建一个package命名为package_demo, 此时package_demo中是没有ios和android目录的,如果我们想调试我们的package该怎么办呢?我们从网上下载的别人的package一般带有一个example来运行的,这个example是怎么建的呢?
-
我们要在我们的package_demo根目录下创建一个application
-
建好之后目录结构如下:
- 关联我们的example和package_demo package, 我们要在example的pubspec.yaml中通过路径引用我们的package, 注意这里我们引用的package名字一定要是我们创建的package pubspec.yaml中的name.