热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter官方尝试放只“鸽子”来简化Native插件开发,android开发实例大全源代码

如上代码所示,message.dart文件中通过HostApi()注解标示了通信对象和接口,之后我们只需要执行如下命令,就可以生成对应代码

如上代码所示, message.dart 文件中通过 @HostApi() 注解标示了通信对象和接口,之后我们只需要执行如下命令,就可以生成对应代码到工程中。

flutter pub run pigeon --input pigeons/message.dart --dart_out lib/pigeon.dart --objc_header_out ios/Runner/pigeon.h --objc_source_out ios/Runner/pigeon.m --java_out android/app/src/main/java/com/shuyu/testpigeon/Pigeon.java --java_package “com.shuyu.testpigeon”

如上所示命令行:

  • 通过 --input 引入了我们创建的 message.dart 文件;
  • 通过 --dart_out 输出了 dart 模板文件;
  • 通过 --objc_header_out--objc_source_out 输出了 object-c 文件;
  • 通过 --java_out 输出了 java 文件;

命令执行后 dart 文件输出到 lib 目录下, object-c 文件输出到了 ios/Runner 目录下,java 文件输出到指定的 com.shuyu.testpigeon" 包名路径下,之后就可以开始正式接入。

Android

首先看 Android 项目,在生成的 Pigeon.java 中包含了 Api 接口用于开发者实现交互逻辑,同时开发者可以通过 SearchRequest 获取 dart 发送过来的请求,通过 SearchReply 返回数据给 dart 。

所以在 MainActivity 中通过实现 Api 接口就可以完成数据交互,如下代码所示:

  • 通过继承 Pigeon.Api 实现了 MyApi 对象;
  • search 方法中通过 request.getQuery() 获取 dart 的请求数据,并且通过 Pigeon.SearchReplysetResult 返回 String.format("Hi %s!", request.getQuery()),在收到的 dart 文本之前加上 Hi 并返回;
  • 最后通过 Pigeon.Api.setup(getFlutterView(), new MyApi()); 就可以完成引用;

package com.shuyu.testpigeon;

import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

private class MyApi implements Pigeon.Api {
@Override
public Pigeon.SearchReply search(Pigeon.SearchRequest request) {
Pigeon.SearchReply reply = new Pigeon.SearchReply();
reply.setResult(String.format(“Hi %s!”, request.getQuery()));
return reply;
}
}

@Override
protected v
oid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
Pigeon.Api.setup(getFlutterView(), new MyApi());
}
}

iOS

在 iOS 上首先要先把生成的 pigeon.hpigeon.m 文件 link 到 Xcode 工程里,之后如下代码所示在 AppDelegate.h 引入 Api 协议。

#import
#import
#import “pigeon.h”

@interface AppDelegate : FlutterAppDelegate

@end

如下代码所示,接下来在 AppDelegate.m 中实现 search 接口,然后在收到的 dart 文本之前加上 Hi 并返回,最后调用 ApiSetup 方法将完成注册。

#include “AppDelegate.h”
#include “GeneratedPluginRegistrant.h”

@implementation AppDelegate

  • (BOOL)application:(UIApplication )application
    didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
    [GeneratedPluginRegistrant registerWithRegistry:self];
    // Override point for customization after application launch.
    FlutterViewController
    controller =
    (FlutterViewController
    )self.window.rootViewController;
    ApiSetup(controller.binaryMessenger, self);
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }

-(SearchReply )search:(SearchRequest)input error:(FlutterError *)error {
SearchReply
result = [[SearchReply alloc] init];
result.result = [NSString stringWithFormat:@"%s%@","Hi ",input.query];
return result;
}

@end

Dart

如下代码所示,最后在 Dart 代码中,我们只需要通过 pigeon.dart 中的 Api 去调用 search 方法,就可以完成 dart 到原生的通信逻辑,最后在终端看到 Hi GSY 的输出。

void _incrementCounter() async{
Api 去调用 search 方法,就可以完成 dart 到原生的通信逻辑,最后在终端看到 Hi GSY 的输出。

void _incrementCounter() async{


推荐阅读
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文详细介绍了在 React Native 开发过程中遇到的 'Could not connect to development server' 错误及其解决方法。该问题不仅影响开发效率,而且难以通过网络资源找到确切的解决方案。本文将提供详细的步骤,帮助开发者快速解决这一常见问题。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在 iOS 开发中,内存管理是一个至关重要的环节。初学者常常因为内存管理不当导致程序崩溃。本文将详细介绍 iOS 中内存的分配与释放机制,并提供一些实用的技巧。 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
author-avatar
ahao123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有