当前位置: 首页 > article >正文

Flutter 项目结构的区别

  1. 如果需要调用原生代码,请创建一个plugin类型的项目开发。
  2. 如果需要调用C语言,请参考文档:Flutter项目中调用C语言
  3. plugin 其实是 package 的一种,全称是 plugin package,我们简称为 plugin,中文叫插件。

1. Application

Flutter Application 表示一个Flutter项目,主体是Flutter,当然它也可以接入Android Module 或者 iOS Framework,其内部包含 Android 和 iOS 项目。

其目录结构如下:

目录描述备注
androidAndroid原生代码目录。其实就是一个内嵌的Android工程
iosiOS原生代码目录。

其实就是一个内嵌的iOS工程

可以通过xcode 打开 Runner.xcworkspace 进行项目配置

lib这个是Flutter项目的核心目录,我们写的代码放在这个目录,我们也可以在这个目录创建子目录。
test测试代码目录。
pubspec.yaml这个是Flutter项目的依赖配置文件,类似于Android build.gradle文件,这里面包含了Flutter SDK 版本、依赖等。

2. 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

3. Package

Flutter Package 和 Flutter Plugin 基本一样,唯一的区别是Flutter Package表示纯 Flutter 模块,不需要原生开发,没有Android 和 iOS 项目,比如开发一个纯 UI 的插件。
其目录结构如下:

4. Module

Flutter Module 用于原生项目中插入 Flutter 模块,原生为主体,与 Flutter 进行混合开发。
其目录结构如下:

5. 参考指令

flutter create  指令用法说明

flutter create <output directory>

-h, --help                   Print this usage information.
    --[no-]pub               Whether to run "flutter pub get" after the project
                             has been created.
                             (defaults to on)
    --[no-]offline           When "flutter pub get" is run by the create
                             command, this indicates whether to run it in
                             offline mode or not. In offline mode, it will need
                             to have all dependencies already available in the
                             pub cache to succeed.
    --[no-]overwrite         When performing operations, overwrite existing
                             files.
    --description            The description to use for your new Flutter
                             project. This string ends up in the pubspec.yaml
                             file.
                             (defaults to "A new Flutter project.")
    --org                    The organization responsible for your new Flutter
                             project, in reverse domain name notation. This
                             string is used in Java package names and as prefix
                             in the iOS bundle identifier.
                             (defaults to "com.example")
    --project-name           The project name for this new Flutter project. This
                             must be a valid dart package name.
-i, --ios-language           The language to use for iOS-specific code, either
                             Objective-C (legacy) or Swift (recommended).
                             [objc, swift (default)]
-a, --android-language       The language to use for Android-specific code,
                             either Java (legacy) or Kotlin (recommended).
                             [java, kotlin (default)]
    --platforms              The platforms supported by this project. Platform
                             folders (e.g. android/) will be generated in the
                             target project. This argument only works when
                             "--template" is set to app or plugin. When adding
                             platforms to a plugin project, the pubspec.yaml
                             will be updated with the requested platform. Adding
                             desktop platforms requires the corresponding
                             desktop config setting to be enabled.
                             [ios (default), android (default), windows
                             (default), linux (default), macos (default), web
                             (default)]
-t, --template=<type>        Specify the type of project to create.

          [app]              (default) Generate a Flutter application.
          [module]           Generate a project to add a Flutter module to an
                             existing Android or iOS application.
          [package]          Generate a shareable Flutter project containing
                             modular Dart code.
          [plugin]           Generate a shareable Flutter project containing an
                             API in Dart code with a platform-specific
                             implementation through method channels for Android,
                             iOS, Linux, macOS, Windows, web, or any combination
                             of these.
          [plugin_ffi]       Generate a shareable Flutter project containing an
                             API in Dart code with a platform-specific
                             implementation through dart:ffi for Android, iOS,
                             Linux, macOS, Windows, or any combination of these.
          [skeleton]         Generate a List View / Detail View Flutter
                             application that follows community best practices.

-s, --sample=<id>            Specifies the Flutter code sample to use as the
                             "main.dart" for an application. Implies
                             "--template=app". The value should be the sample ID
                             of the desired sample from the API documentation
                             website (https://api.flutter.dev/). An example can
                             be found at:
                             https://api.flutter.dev/flutter/widgets/SingleChild
                             ScrollView-class.html
-e, --[no-]empty             Specifies creating using an application template
                             with a main.dart that is minimal, including no
                             comments, as a starting point for a new
                             application. Implies "--template=app".
    --list-samples=<path>    Specifies a JSON output file for a listing of
                             Flutter code samples that can be created with
                             "--sample".

例如创建一个插件

flutter create --template=package hello


http://www.kler.cn/news/315553.html

相关文章:

  • 十八,Spring Boot 整合 MyBatis-Plus 的详细配置
  • linux中vim编辑器的应用实例
  • 基于LSTM的温度时序预测
  • 量化交易系统开发源码独立搭建
  • VUE项目在Linux子系统部署
  • 2.个人电脑部署MySQL,傻瓜式教程带你拥有个人金融数据库!
  • Google 释出 Android 15 源代码
  • 数业智能心大陆:职场倦怠的新解法
  • [数据集][目标检测]无人机飞鸟检测数据集VOC+YOLO格式6647张2类别
  • 安装selenium、chrome、chromedriver.exe相对应的版本
  • 【Java】线程暂停比拼:wait() 和 sleep()的较量
  • 安卓数据存储——SharedPreferences
  • Apifox 「定时任务」操作指南,解锁自动化测试的新利器
  • HTTPS:构建安全通信的基石
  • 关于es的一个多集群、多索引切换的实现
  • [leetcode刷题]面试经典150题之2移除元素(简单)
  • pycharm 使用 translation 插件通过openai进行翻译
  • 怎么能让电脑屏幕显示多个监控画面?电脑监控如何多画面显示?
  • 面向切面:单元测试、事务、资源操作
  • UDP实现组播发送端和接收端
  • [Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
  • 论文阅读 | 基于流模型和可逆噪声层的鲁棒水印框架(AAAI 2023)
  • 【机器学习】OpenCV入门与基础知识
  • 一种求解无人机三维路径规划的高维多目标优化算法,MATLAB代码
  • Java笔试面试题AI答之设计模式(1)
  • uni-app尺寸单位、flex布局于背景图片
  • Java ETL - Apache Beam 简介
  • 如何使用Privoxy将SOCKS5代理转换为HTTP代理?
  • 数据库(mysql)常用命令
  • 妈妈再也不用担心字符串方法啦!——js String实例方法汇总