Flutter插件开发-(基础篇)

news2024/9/22 4:56:20

      在开发flutter项目的时分通常会运用一些三方的的packages或许plugin,二者的区别:packages主要是包括的Dart代码块,而plugin则包括iOS和android的代码。

因此来说创立pluginpackages的流程是相似的,下面就以创立plugin为例进行展示:

网上有很多复制粘贴的帖子,翻到我这篇你无疑是幸运的,放心往下看吧。

1.创建Plugin插件

  1. flutter create --org com.qidian --template=plugin --platforms=android,ios -i swift -a java flutter_hello
  • 使用--template=plugin声明创建的是同时包含了iOS和Android代码的plugin;

  • 使用--org选项指定组织,一般采用反向域名表示法;

  • 使用-i选项指定iOS平台开发语言,objc或者swift;

  • 使用-a选项指定Android平台开发语言,java或者kotlin。

pubspec.yaml 文件

flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello #安卓包名
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin

environment:
  sdk: ">=2.1.0 <3.0.0"
  # Flutter versions prior to 1.12 did not support the
  # flutter.plugin.platforms map.
  flutter: ">=1.12.0"

下面是官网制作插件的详细步骤,根据需要查漏补缺

Developing packages & plugins | Flutter
 

命令行执行后打开项目目录如下 (我使用的开发工具是VSCode,Windows和Mac都有)

打开plugin项目能看到有个example是能运行的

lib中有iOSandroid目录,用于存放咱们iOSandroid的代码,但是不可运转,这儿是不是和咱们的组件化很像

注:Flutter脚手架在创建Plugin时默认实现了一个获取系统版本号的示例,该示例的原理是分别在iOS和Android平台获取到系统版本号,然后通过MethodChannel调用返回给Flutter平台显示。

2. plugin代码编写

lib目录下dart文件: 

在iOS端进行注册

SwiftFlutterHelloPlugin.swift 文件

import Flutter
import UIKit

public class SwiftFlutterHelloPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "com.qidian/flutter_hello", binaryMessenger: registrar.messenger())
    let instance = SwiftFlutterHelloPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    if (call.method == "getBatteryLevel") {
       receiveBatteryLevel(result: result)
    } else {
       result("iOS " + UIDevice.current.systemVersion)
    }
  }

   private func receiveBatteryLevel(result: FlutterResult) {
   let device = UIDevice.current
   device.isBatteryMonitoringEnabled = true
   if device.batteryState == UIDevice.BatteryState.unknown {
    result(FlutterError(code: "UNAVAILABLE",
              message: "Battery level not available.",
              details: nil))
   } else {
    result(Int(device.batteryLevel * 100))
   }
  }
}

 

这样就算好了,咱主要目的是通过本来快速了解和熟悉插件的制作流程(大同小异),至于android代码也是相似的需要的查下教程就👌🏻,不在赘述。

3. 发布

CD到当前demo下执行flutter pub publish--dry-run 检查是否具备发布条件

flutter packages pub publish --dry-run

Package has 0 warnings. 则代表 没什么问题

另外需要注意的点是:

1. pubspec.yaml需要设置homepage

2.description进行插件功能性描述

  • pubspec.yaml 配置主页

在发布前还需要有一个 License文件,咱们就在giuhub创建一个项目,名字随便起,license挑选BSD3

下载license文件拖到插件plugin中,再次执行flutter packages pub publish --dry-run命令

  • 发布

flutter packages pub publish --server=https://pub.dartlang.org

这儿需要认证

 指定服务器

复制上面的链接浏览器打开选择谷歌账号 (需要挂梯子才行)

 

修改后保存执行 source .bash_profile 使设置生效

 网络代理配置这块巨坑,执行命令curl google.com检测自己是否在墙内,一般使用的翻墙软件哪里都有端口号复制到.bash_profile文件就行,然后执行 source .bash_profile 使设置生效

 如果返回这个HTML文件则代表翻墙成功

只要可以科学上网很快就上传成功了 

去pub.dev官网去验证下刚才上传的插件有没有成功 

https://pub.dev/my-packages

至此, Flutter中Plugin的创建与发布结束,完结散花🌸

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

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

相关文章

Spring原理学习(六):Spring实现动态代理时对jdk和cglib的选择

目录 〇、前言 一、AOP中的一些基本概念 二、两个切面的概念 三、advisor的使用 3.1 前置知识 3.2 使用步骤 四、spring对jdk和cglib的统一 〇、前言 对jdk和cglib 实现动态代理的原理不清楚的兄弟们&#xff0c;可以参考前文&#xff1a;Spring原理学习&#xff08;…

Python+Qt人脸识别职工录入管理系统

程序示例精选 PythonQt人脸识别职工录入管理系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonQt人脸识别职工录入管理系统>>编写代码&#xff0c;代码整洁&#xff0c…

【FTP】——文件传输协议

文章目录 1.FTP简介1.1 FTP概述1.2 FTP主动模式1.3 FTP被动模式 2. 实例&#xff1a;匿名用户访问FTP服务3. 实例&#xff1a;本地用户访问FTP服务 1.FTP简介 1.1 FTP概述 FTP服务——用来传输文件的协议。 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信. 20端口…

【学习笔记】Linux基础

Linux基础 一、操作系统1、什么是操作系统2、Linux操作系统3、Linux系统目录&#xff0c;Linux倒挂树型目录结构&#xff1a;4、安装Xshell与Xftp5、Linux文件操作命令6、vim文本编辑器&#xff08;1&#xff09;vim三种模式&#xff08;2&#xff09;vim重要快捷键&#xff08…

Dell Inspiron 5570电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Dell Inspiron 5570 处理器Intel(R) Core(TM) i7-8550U CPU 1.80GHz已驱动 内存8 GB 2400 MHz DDR4已驱动 硬盘samsung ssd 850 evo 250 go已驱…

汽车跨界还能这么玩?解锁汽车跨界新模式

跨界&#xff0c;是一种商业思维&#xff0c;是出圈方式&#xff0c;是进入流量红海的手段之一。近几年来&#xff0c;国内掀起了一股跨界风&#xff0c;“跨界增值宣传”似乎成为了品牌年轻化的必经之路&#xff0c;众多品牌通过跨界的方式实现互相补足、用户渗透&#xff0c;…

#Chrome扩展程序开发教程--01:基本概念介绍

#Chrome扩展程序开发教程--01&#xff1a;基本概念介绍 引言1、什么是扩展程序&#xff1f;2、Web技术3、Chrome 扩展程序API4、扩展程序架构 引言 本系列博客旨在带来最新的Chrome扩展程序开发入门教程。 1、什么是扩展程序&#xff1f; 通过向Chrome浏览器添加自定义特性和功…

Docker容器---网络、容器操作

Docker容器---网络、容器操作 一、docker实现原理二、docker网路模式1、Host模式2、container模式3、none模式4、bridge模式 三、自定义网络1、查看网络模式列表2、查看容器信息3、指定分配IP地址4、自定义网络固定IP 四、暴露端口五、容器端口映射1、创建端口映射 六、资源控制…

wordpress建站/demo

bidewang.co/ele 建站的另一种途径Sign in – My Account tanrenchang.atspace.cc 登录 ‹ Fashion trading platform — WordPress cPanel 是一个用于管理网站的虚拟主机控制面板。 使用 cPanel&#xff0c;可以轻松管理电子邮件帐户、数据库、FTP 用户以及与托管、设置和管…

windows10下使用minGW64 编译krita源码报错

系列文章目录 文章目录 系列文章目录前言一、错误原因二、使用步骤1.引入库 前言 collect2.exe: error: ld returned 1 exit status mingw32-make[2]: *** [plugins\color\lcms2engine\CMakeFiles\kritalcmsengine.dir\build.make:614: bin/kritalcmsengine.dll] Error 1 ming…

websever|2.19-2.27|信号概述-SIGCHILD信号

2.19信号概述 信号也是进程间通信的一种方式 其中1-31是操作系统定义的标准信号&#xff0c;比较重要。需要掌握其中几个。 34-64是预定义好的信号&#xff0c;是实时的信号 core文件中保存异常终止的一些信息。 在2.20节的开头&#xff0c;老师重点讲解了 的core文件。 进程出…

57 openEuler搭建Mariadb数据库服务器-管理数据库用户

文章目录 57 openEuler搭建Mariadb数据库服务器-管理数据库用户57.1 创建用户57.2 查看用户57.3 修改用户57.3.1 修改用户名57.3.2 修改用户示例57.3.3 修改用户密码57.3.4 修改用户密码示例 57.4 删除用户57.5 用户授权57.6 删除用户权限 57 openEuler搭建Mariadb数据库服务器…

集群聊天服务器项目(四)——项目总结

集群聊天服务器项目总结 首先是就是项目介绍集群聊天服务器项目(零)——项目介绍中的内容&#xff0c;就不再次copy过来了 项目简单介绍 技术栈 环境和库依赖 按模块介绍整个项目 程序的主要模块是网络模块、业务模块、数据模块、Json、redis发布订阅消息队列模块以及ngi…

Anaconda环境闭着眼睛安装tensorflow2.0-GPU

1.创建conda环境 conda create -n tf2 python3.7 2.进入conda环境 conda activate tf2 3.输入 nvidia-smi 查看有没有显卡驱动。(没有安一个&#xff0c;不管是windows/linux) 4. 安装cudatoolkit 和 cuDNN conda install cudatoolkit10.0 cudnn 5. 安装tensorflow pip ins…

【最佳实践】OAuth标准和基于OAuth2.0实现Github 授权单点登录的保姆级教程

【最佳实践】OAuth标准和基于OAuth2.0实现Github 授权单点登录的保姆级教程 第一章&#xff1a;OAuth基础知识1.1 OAuth起源1.2 OAuth简介1.3 OAuth的角色1.4 OAuth的授权流程1.5 OAuth的安全性1.6 OAuth标准的历史版本 第二章&#xff1a;OAuth2.0的工作原理2.1 OAuth2.0简介2…

前端--移动端布局--1移动web开发流式布局

目标&#xff1a; 能够知道移动web的开发现状 能够写出标准的viewport 能够使用移动web的调试方法 能够说出移动端常见的布局方案 能够描述流式布局 能够独立完成京东移动端首页 目录&#xff1a; 移动端基础 视口 二倍图 移动端调试 移动端技术解决方案 移动端常…

【全屏导航栏菜单】

提示&#xff1a;全屏导航栏菜单,炫酷的全局动画和导航切换动画 前言 提示&#xff1a;以下是本篇文章的代码内容,供大家参考,相互学习 一、html代码 <!DOCTYPE html> <html><head><meta http-equiv"content-type" content"text/html; c…

浅尝GoWeb开发之Gin框架

一、框架简介 gin 目前应用最广泛的golang框架&#xff0c;甚至已经变成了golang的官方框架&#xff0c;但它主要是一个RESTFul的框架。封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确。个人比较推荐。 beego 国内最早的golang框架&#xff0c;也是最全的MV…

opencv (二十二) 创建滑动条

滑动条(Trackbar)是OpenCV动态调节参数特别好用的一种工具,它依附于窗口存在。 创建滑动条:createTrackbar()函数 createTrackbar函数用于创建一个可以调整数值的滑动条(也称轨迹条),并将滑动条附加到指定的窗口上,它往往会和一个回调函数配合起来使用。 int createT…

你的GPT跟ChatGPT可能只差了一个DPU

“人类永远不会嫌网络太快&#xff0c;就像永远不会嫌高铁太快&#xff0c;你只会嫌它慢&#xff0c;希望它更快些。” 一个月内&#xff0c;百度、阿里、腾讯、商汤、讯飞、360等国内大厂扎堆发布“中国版 GPT ”&#xff0c;这家的名字还没记清楚&#xff0c;另一家的又蹦了出…