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

flutter调用go

文章目录

          • 命令
          • 引入greeting.aar和使用
          • android中使用Flutter2gopluginPlugin.kt
          • 参考文档

命令

mkdir demo
cd demo
go mod init demo
编写greeting.go
go env -w GOPROXY=https://goproxy.cn
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
go get golang.org/x/mobile/bind
gomobile bind -target=android
会生成greeting.aar和greeting-sources.jar

greeting.go


package greeting
func SayHi(text string) string {
    return text
}

引入greeting.aar和使用

创建flutter插件
在android下面创建libs
复制greeting.aar到libs下面
配置android/build.gradle

   
group 'com.app.flutter2goplugin'
version '1.0-SNAPSHOT'

buildscript {
   ext.kotlin_version = '1.7.10'
   repositories {
       google()
       mavenCentral()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:7.2.0'
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
   }
}

allprojects {
   repositories {
       google()
       mavenCentral()

   }
}

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

android {
   compileSdkVersion 31

   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

   kotlinOptions {
       jvmTarget = '1.8'
   }

   sourceSets {
       main.java.srcDirs += 'src/main/kotlin'
   }

   defaultConfig {
       minSdkVersion 16
   }
}

rootProject.allprojects{
   repositories {
       google()
       mavenCentral()
       flatDir {
           dirs project(':flutter2goplugin').file('libs')
       }
   }
}


dependencies {
   implementation(name: "greeting", ext: "aar")
}

android中使用Flutter2gopluginPlugin.kt

package com.app.flutter2goplugin

import android.util.Log
import androidx.annotation.NonNull
import greeting.Greeting

import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result


class Flutter2gopluginPlugin : FlutterPlugin, MethodCallHandler {
    
    private lateinit var channel: MethodChannel

    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
        channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter2goplugin")
        channel.setMethodCallHandler(this)
    }

    override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
        if (call.method == "getPlatformVersion") {
            Log.e("getPlatformVersion", Greeting.sayHi("bbbbbbbbbbb"))
            result.success("Android ${android.os.Build.VERSION.RELEASE}")
        } else {
            result.notImplemented()
        }
    }
    override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
        channel.setMethodCallHandler(null)
    }
}

参考文档

完整流程 Flutter 集成 Golang 多语言跨端开发基础案例


http://www.kler.cn/a/1160.html

相关文章:

  • Linux (CentOS) 安装 Docker 和 Docker Compose
  • 基于 JavaEE 的影视创作论坛
  • 【机器学习:四、多输入变量的回归问题】
  • UML系列之Rational Rose笔记三:活动图(泳道图)
  • 经验分享-如何使用http调用chatGPT-3.5-turbo模型API
  • Mysql 竟然还有这么多不为人知的查询优化技巧,还不看看?
  • 【云原生|Docker】03-docker的基础操作
  • 【CSS】盒子模型外边距 ① ( 盒子模型外边距设置 | 外边距属性单独设置 | 外边距属性复合写法 )
  • 网络补充 总结
  • 如何测试一个AI系统?
  • 三天吃透操作系统面试八股文
  • flink多流操作(connect cogroup union broadcast)
  • selenium(5)-------自动化测试脚本(python)
  • 高完整性系统工程(三): Logic Intro Formal Specification
  • XGBoost和LightGBM时间序列预测对比
  • 【python刷题】leecode官方提示“->“,“:“这些符号是什么意思?什么是Type Hints?
  • 八 SpringMVC【拦截器】登录验证
  • 通过Cursor 工具使用GPT-4的方法
  • CSDN 编程竞赛三十七期题解
  • 入行 5年,跳槽 3次,我终于摸透了软件测试这行(来自过来人的忠告)
  • 2023年网络安全比赛--网络安全事件响应中职组(超详细)
  • 拥抱 Spring 全新 OAuth 解决方案
  • 字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……
  • Thread的基本操作