Flutter 中Application、Plugin、Package、Module的区别

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.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容