这篇文章我们会学习Flutter应用程序如何与iOS和Android设备上可用的平台特定代码集成,这包括设备API,(比如url_launcher和battery)和第三方平台SDK(比如Firebase)。

使用现有的平台插件

Flutter插件是一种特殊的包,一个插件包含一个用Dart编写的API定义,结合Android的平台特定实现,适用于iOS或两者兼容。

搜索插件

现有的Flutter插件可以在Flutter插件仓库查找,其显示在pub存储库中共享的插件。因为Flutter仍然是一个年轻的语言,目前在pub上只有一小部分插件,需要作为Flutter程序员的我们开发和发布新的插件!

在程序中添加插件

如果要添加一个插件“plugin1”到一个应用程序:

  1. 打开您的应用程序文件夹中的pubspec.yaml文件,并在dependencies下添加plugin1

  2. 获取插件
    在终端中:运行flutter packages get
    在IntelliJ中:在pubspec.yaml顶部的动作功能区中点击“Packages Get”

  3. 构建或运行您的应用程序,作为其中的一部分,Flutter将“插入”平台特定的代码,从插件到您的应用程序。

演示实例

URL Launcher插件允许您打开移动平台上的默认浏览器来显示给定的URL,它在Android和iOS上均受支持。我们就写一个使用Flutter URLLauncher插件启动浏览器的实例。

首先打开pubspec.yaml,并添加url_launcher插件:

dependencies:flutter:sdk: flutterurl_launcher: "^2.0.2"

添加完成之后记得点击顶部的“Packages Get”,然后再打开lib/main.dart,并将其全部内容替换为以下代码:

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';void main() {runApp(new MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return new MaterialApp(title: 'Flutter Demo',home: new DemoPage(),);}
}class DemoPage extends StatelessWidget {launchURL() {launch('https://www.baidu.com/');}@overrideWidget build(BuildContext context) {return new Scaffold(body: new Center(child: new RaisedButton(onPressed: launchURL,child: new Text('百度首页'),)));}
}

运行应用程序,当您点击“百度首页”时,您应该会看到手机的默认浏览器打开,并显示百度首页。

创建一个平台插件

如果您希望在多个Flutter应用程序中使用特定于平台的代码,将代码分离到位于主应用程序之外的目录中,作为平台插件是很好的方案,甚至还能分享给所有Flutter开发人员。

您可以使用–plugin标记与flutter create创建一个插件项目。使用–org选项指定您的组织,使用反向域名符号,该值用于生成的Android和iOS代码中的各种包和包标识符。

flutter create --org com.example --plugin hello

这将在hello/文件夹中创建一个包含以下内容的插件项目:

  • lib/hello.dart
    插件的Dart API

  • android/src/main/java/com/yourcompany/hello/HelloPlugin.java
    Android平台具体实现插件API

  • ios/Classes/HelloPlugin.m
    iOS平台具体实现插件API

  • example/
    一个如何使用插件的Flutter应用程序,插件的使用说明

默认情况下,该插件项目使用Objective-C的iOS代码和Java的Android代码。如果您喜欢Swift或Kotlin,则可以使用-i指定iOS语言或使用-a指定Android语言。

flutter create --plugin -i swift -a kotlin hello

编辑插件的源代码

插件API代码(.dart)

要编辑Dart插件API代码,需要在IntelliJ IDEA(或者您喜欢的Dart编辑器)中打开hello/,插件API位于项目视图中显示的lib/main.dart中。

要运行插件,您需要启动插件示例应用程序,这需要定义启动配置:

  1. 选择“Run > Edit Configurations…”
  2. 选择“+”,然后选择“Flutter”
  3. 在“Dart entrypoint”,输入<plugin folder>/example/lib/main.dart
  4. 选择“OK”
  5. 使用“Run”或“Debug”启动示例应用程序

Android平台的代码(.java/.kt)

在Android Studio中编辑Android平台代码之前,首先要确保代码已经构建至少一次,即从IntelliJ运行示例应用程序,或在终端中执行cd hello/example; flutter build apk

接下来,进行以下操作:

  1. 启动Android Studio
  2. 在“Welcome to Android Studio”对话框中选择“Import project”,或者在菜单中选择“File > New > Import Project…”,然后选择hello/example/android/build.gradle文件
  3. 在“Gradle Sync”对话框中,选择“OK”
  4. 在“Android Gradle Plugin Update”对话框中,选择“Don’t remind me again for this project”

您的插件的Android平台代码位于hello/java/com.yourcompany.hello/HelloPlugin中,您可以通过按▶按钮从Android Studio运行示例应用程序。

iOS平台的代码(.h+.m/.swift)

在编辑Xcode中的iOS平台代码之前,首先要确保代码已经构建至少一次,即从IntelliJ运行示例应用程序,或在终端中执行cd hello/example; flutter build ios

接下来,进行以下操作:

  1. 启动Xcode
  2. 选择“File > Open”,然后选择hello/example/ios/Runner.xcworkspace文件

插件的iOS平台代码位于项目导航器中的Pods/Development Pods/hello/Classes/中,您可以通过按▶按钮运行示例应用程序。

管理从Flutter程序到Flutter插件的依赖关系

一旦插件已经发布,您可以依赖它,只需在pubspec.yaml中列出它的名称,比如上面的例子。在开发尚未发布的插件或者不适用于公开发布的私有插件的开发中,依赖于插件还有其他的方法:

  • Path依赖:Flutter应用程序可以通过文件系统路径依赖path: dependency,该路径可以是相对的,也可以是绝对路径。例如,要使用位于应用程序旁边的目录中的插件“plugin1”,请使用以下语法:
dependencies:flutter:sdk: flutterplugin1:path: ../plugin1/
  • Git依赖:您还可以依赖于存储在Git存储库中的包,包必须位于报告(Repo)的根部,使用以下语法:
 dependencies:flutter:sdk: flutterplugin1:git:url: git://github.com/flutter/plugin1.git

发布平台插件

一旦你实现了插件,你可以在Pub发布。这使得其他开发人员可以轻松地使用它,如同上述UrlLauncher的演示实例。发布的方法会在以后的文章中详细讲解…

Flutter进阶—平台插件相关推荐

  1. Flutter进阶—简单平台插件实例

    在之前写过的<Flutter进阶-平台插件>中,笔者简单介绍了如何简单的使用和创建一个Flutter插件,现在可以试试编写一个可以在平台与客户端之间传递数据的Flutter平台插件.在此之 ...

  2. 【Flutter】开发 Flutter 包和插件 ( Flutter 包和插件简介 | 创建 Flutter 插件 | 创建 Dart 包 )

    文章目录 一.Flutter 包和插件简介 二.创建 Flutter 插件 1.Android Studio 中可视化创建 2.命令行创建 三.创建 Dart 包 1.Android Studio 中 ...

  3. Flutter进阶—读取与写入文件

    Flutter使用path_provider插件读取与写入文件,path_provider插件提供了一种平台无关的方法来访问设备文件系统上常用的位置.该类目前支持访问两个文件系统位置: 临时目录:系统 ...

  4. 写一个Flutter手势追踪插件

    /   今日科技快讯   / 近日字节跳动组织升级,张利东担任字节跳动(中国)董事长,全面协调公司运营,包括字节跳动中国的战略.商业化.公共事务.公共关系.财务.人力:抖音CEO张楠将担任字节跳动(中 ...

  5. 阿里内部总结“Flutter进阶笔记”,你收藏好了嘛?

    每一个移动开发者都在为 Flutter 带来的"快速开发.富有表现力和灵活的 UI.原生性能"的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者 ...

  6. ALI Flutter进阶笔记,移动手机app开发

    阿里巴巴集团内也有越来越多的业务和团队开始尝试 Flutter 技术栈,从闲鱼的一支独秀引领潮流,到如今淘宝特价版.优酷.飞猪等BU业务相继入局,Flutter的业务应用在集团内也已经逐渐形成趋势. ...

  7. ALI Flutter进阶笔记

    每一个移动开发者都在为 Flutter 带来的"快速开发.富有表现力和灵活的 UI.原生性能"的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者 ...

  8. Flutter调用平台代码

    前言 在前面的文章中我们讲了许多Flutter中的组件和Flutter中的特定操作,但是单单使用Flutter里的组件和方法是不够的. 就像以前我们讲到文件存储.数据库操作单单靠使用Flutter我们 ...

  9. 【Flutter】开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )

    文章目录 前言 一.开发 Dart 包内容 二.配置 pubspec.yaml 三.编写 Dart 包使用说明 四.编写 Dart 包授权许可 五.设置版本变更记录 六.验证 Dart 包正确性 七. ...

最新文章

  1. Spring Boot 的静态资源处理
  2. 我仅仅想安安静静的做一个编程的美男子
  3. [BUUCTF-pwn]——jarvisoj_tell_me_something
  4. mysql 日期类型比价_MySQL 日期时间类型怎么选?
  5. 出道50年+!乘风破浪的编程语言们,能二次翻红吗?
  6. OpenMMLab 生成模型算法库发布,打工人也能玩转图像生成!
  7. 预测今后的北京高考人数
  8. MVP小白入门,只需5步
  9. 笨方法学python豆瓣_资料 | 笨办法学Python
  10. 2021华为软件精英挑战赛(粤港澳赛区复赛第八)
  11. 如何连接禅道的mysql_禅道一键安装包如何实现mysql异机连接
  12. java入门必备基础知识(超超超详细讲解)
  13. html编辑中,出现报错 semi-.colon excepted css(………)
  14. 全国各省市区域mysql_中国省市区数据表(MySQL版)
  15. Mac 下解压Android NDK 的 .bin文件
  16. win7计算机节电模式,极力推荐!win7系统的省电模式应该怎么关闭呢?
  17. 这10个免费学习网站,个个堪称神器,不收后悔!
  18. HTML+CSS模仿百度首页(gird+flex布局)
  19. 上市公司“掘金”大数据 多领域大数据应用受热捧
  20. EETI eGTouch Linux 驱动的安装与使用

热门文章

  1. 机器学习的基本概念和相关术语
  2. 编程实现 带符号减法溢出判断
  3. 车道线检测的学习笔记
  4. #pragma once和#ifndef
  5. Tina-TI 电路仿真 多参数交流传输特性分析 频率与相位增益的关系 选择控制对象
  6. java程序员必备基础知识
  7. 部署模型之Libtorch学习(一)
  8. 剑指offer——23.反转链表
  9. JS小技巧 ----- 遍历一个对象中所有属性
  10. 在Windows端安装kafka提示错误:找不到或无法加载主类的解决方案