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_demopluginClass: PluginDemoPluginios: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 projecthas been created.(defaults to on)--[no-]offline           When "flutter pub get" is run by the createcommand, this indicates whether to run it inoffline mode or not. In offline mode, it will needto have all dependencies already available in thepub cache to succeed.--[no-]overwrite         When performing operations, overwrite existingfiles.--description            The description to use for your new Flutterproject. This string ends up in the pubspec.yamlfile.(defaults to "A new Flutter project.")--org                    The organization responsible for your new Flutterproject, in reverse domain name notation. Thisstring is used in Java package names and as prefixin the iOS bundle identifier.(defaults to "com.example")--project-name           The project name for this new Flutter project. Thismust be a valid dart package name.
-i, --ios-language           The language to use for iOS-specific code, eitherObjective-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. Platformfolders (e.g. android/) will be generated in thetarget project. This argument only works when"--template" is set to app or plugin. When addingplatforms to a plugin project, the pubspec.yamlwill be updated with the requested platform. Addingdesktop platforms requires the correspondingdesktop 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 anexisting Android or iOS application.[package]          Generate a shareable Flutter project containingmodular Dart code.[plugin]           Generate a shareable Flutter project containing anAPI in Dart code with a platform-specificimplementation through method channels for Android,iOS, Linux, macOS, Windows, web, or any combinationof these.[plugin_ffi]       Generate a shareable Flutter project containing anAPI in Dart code with a platform-specificimplementation through dart:ffi for Android, iOS,Linux, macOS, Windows, or any combination of these.[skeleton]         Generate a List View / Detail View Flutterapplication 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 IDof the desired sample from the API documentationwebsite (https://api.flutter.dev/). An example canbe found at:https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html
-e, --[no-]empty             Specifies creating using an application templatewith a main.dart that is minimal, including nocomments, as a starting point for a newapplication. Implies "--template=app".--list-samples=<path>    Specifies a JSON output file for a listing ofFlutter code samples that can be created with"--sample".

例如创建一个插件

flutter create --template=package hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143595.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

动态分析基础

实验一 Lab03-01.exe文件中发现的恶意代码 问题&#xff1a; 1.找出这个恶意代码的导入函数与字符串列表? 2.这个恶意代码在主机上的感染迹象特征是什么? 3.这个恶意代码是否存在一些有用的网络特征码?如果存在&#xff0c;它们是什么? 解答&#xff1a; 1.找出这个恶意代…

idea使用阿里云服务器运行jar包

说明&#xff1a;因为我用的阿里云服务器不是自己的&#xff0c;所以一些具体的操作可能不太全面。看到一个很完整的教程&#xff0c;供参考。 0. 打包项目 这里使用的是maven打包。 在pom.xml中添加以下模块。 <build><plugins><plugin><groupId>org…

保护您的隐私:隐藏 IP 地址的重要性

在当今的数字时代&#xff0c;我们的在线隐私和安全变得比以往任何时候都更加重要。浏览互联网时保护自己的一种方法是隐藏您的 IP 地址。 但是为什么要隐藏您的 IP 地址以及如何有效地做到这一点&#xff1f; 隐藏您的 IP 地址有助于保护您的在线匿名性。您的 IP 地址就像您的…

鹰眼降尘模型

鹰眼降尘模型是一种集成了先进图像识别技术、机器学习算法和精准控制技术的环保解决方案&#xff0c;旨在解决无组织排放粉尘污染问题。以下是朗观视觉小编对鹰眼降尘模型的详细解析&#xff1a; 一、技术原理 鹰眼降尘模型主要基于以下关键技术原理实现其功能&#xff1a; 图…

网络安全。

文章目录 目录 文章目录 一. 网络安全概述 二. 密码学原理 三. 报文完整性和数字签名 密码散列函数 报文鉴别码 数字签名 公钥认证 四. HTTPS通信 总结 一. 网络安全概述 网络安全是保护计算机网络及其数据免受各种威胁和攻击的实践和技术。随着互联网的普及和数字化…

「数据科学」清洗数据,真实数据集中缺失值的查看与处理

在数据科学的工作过程中&#xff0c;我们通过查看数据的基本要素和元数据之后&#xff0c;需要根据查看的结果&#xff0c;考虑是否需要清洗数据。缺失值的查看与处理&#xff0c;就是清洗数据的一部分。如果我们的数据集中&#xff0c;存在缺失值的话&#xff0c;就需要考虑如…

利用WPF绘制轮廓并保存为图片

1.前言 WPF作为显示工具也挺好用&#xff0c;用C#开发应用软件会比较省力&#xff0c;当然也有其缺点&#xff0c;如在对效率要求较高的情况下有性能问题&#xff0c;本文记录用WPF绘制轮廓并保存为图片相关内容。 显示效果也还不错&#xff0c;满足调试使用了&#xf…

使用JS实现tab栏切换

重要知识点了解 环境对象&#xff08;this&#xff09; 1.环境对象&#xff1a;指的是函数内部特殊的变量 this 2.this的使用&#xff1a;当我们在一个函数里面需要去调用一个变量是。需要去引用如 函数的调用方式不同&#xff0c;this 指代的对象也不同 【谁调用&…

应用AI技术的销售进化论

该文章聚焦AI技术在销售行业中的实际应用&#xff0c;解读销售人员如何利用先进技术及工具突破传统限制&#xff0c;增强业务能力帮助销售人员保持竞争优势&#xff0c;提升工作效率与业绩。 1、AI如何重塑销售规则 1.1 AI在销售领域的应用&#xff1a;不只是数字游戏 在销售…

python调用c++动态链接库,环境是VS2022和vscode2023

目录 前言&#xff1a;配置环境&#xff1a;基础夯实&#xff08;对于ctypes的介绍&#xff09;&#xff1a;1. 加载共享库2. 定义函数原型3. 调用函数4. 处理数据结构5. 处理指针6. 错误处理7. 使用 ctypes.util总结 效果展示&#xff1a;操作步骤(保姆级教学)一在VS中创建dll…

train_llava记录

首先时build_model 【自定义多模态大模型LLaVA——LLaVA系列】 https://www.bilibili.com/video/BV1GS411P74b/?share_sourcecopy_web&vd_source820e17ab3d5412c1c94e68f2e5f07ae7 作者用的4B的qwen1.5 但是这里发现3090是只能部署但是推理爆显存所以只能换成0.5B的 问…

计算机毕业设计汽车选购销售平台管理系统车辆用户分类订单评价购买/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

‌计算机毕业设计&#xff1a;汽车选购销售平台管理系统‌ ‌一、项目概述‌ 本毕业设计项目旨在构建一个全面的汽车选购销售平台管理系统&#xff0c;该系统将涵盖车辆管理、用户分类、订单处理、评价系统以及购买功能。通过采用Spring Boot、JavaWEB、J2EE等后端技术&#…

【java系】记录一次ClassLoader.getResourceAsStream获取不到文件流

问题描述反馈&#xff0c;开发同事在本地获取对应文件流是可以正常业务操作&#xff0c;发布到linux服务器对应环境就会出现异常。 源码部分截图 看到这里&#xff0c;我猜想是否和window底层文件操作系统不区分大小写有关呢&#xff1f;而服务器linux是严格区分大小写这个应该…

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…

场外期权或成暴利工具?!应该怎么做场外期权?

今天带你了解场外期权或成暴利工具&#xff1f;&#xff01;应该怎么做场外期权&#xff1f;通过深入了解市场、选择合适的通道商、制定清晰的策略和有效的风险管理&#xff0c;可以在场外期权交易中取得更好的结果。 什么是场外期权&#xff1f; 场外期权是交易所以外的市场…

【店雷达全网图搜比价盘点】1688、淘宝、阿里国际、亚马逊、速卖通5大平台

全网图搜比价的意义&#xff0c;对于商家来说的意义在于可以对比不同供应商提供的同款或类似产品的价格&#xff0c;找出性价比高且质量可靠的商品&#xff0c;确保在运费和其他成本考虑下仍能保持合理利润空间&#xff0c;挑选出更具性价比且可靠的商品有效降低选品风险。 店…

ubuntu安装wordpress(基于LNMP环境)

参考链接 Ubuntu安装LNMP 安装步骤 环境需要LNMP环境&#xff0c;如果没有安装可以参考ZATA—LNMP简单安装 在mysql中设置wordpress所用的用户名和密码 #1. 登录mysql mysql -uroot -p #2. 创建wordpress数据库 create database wordpress; #3. 创建新用户user&#xff0c;…

ES分词导致查询结果不准确

问题现象 索引里面有数据&#xff0c;而没有查询出来。 如下图所示&#xff0c;术语库&#xff08;索引&#xff09;中里面有一条数据的原文是“层”&#xff0c;而根据完整的原文来查询该原文中的术语&#xff0c;并未将该术语查询出来。 根据原文查询该原文中的术语&#x…

飞睿智能UWB BLE Tag蓝牙防丢器模块,APP测距定位一键绑定,安全守护每一刻

我们总在不经意间与生活中的小物件擦肩而过——钥匙遗忘在咖啡厅的角落&#xff0c;钱包遗失在拥挤的地铁&#xff0c;甚至孩子的书包在人群中悄然消失……每一次的失而复得都是幸运的眷顾&#xff0c;但更多的是遗憾与不便。今天&#xff0c;就让我带你走进一个智能守护的新世…

如何在多台Linux虚拟机上安装和配置Kafka集群

Kafka是一个高性能、分布式的流处理平台&#xff0c;被广泛应用于大规模实时数据处理场景。它具有高吞吐量、低延迟和可水平扩展等特点&#xff0c;能够有效地处理海量数据流。为了提高Kafka的可用性和容错性&#xff0c;通常会在多个节点上部署Kafka集群。在这个指南中&#x…