当前位置: 首页 > 知识库问答 >
问题:

从Flutter的方法通道访问静态编程语言中的参数数据

霍弘厚
2023-03-14

我在颤振和Kotlin中设置了一个基本方法通道。

以下是我的示例数据:

{    
    "user_dob":"15 November 1997", 
    "user_description":"Hello there, I am a User!", 
    "user_gender":"Male", 
    "user_session":"KKDSH3G9OJKJFIHXLJXUGWIOG9UJKLJ98WHIJ"
}

以下方法通道可以将数据从颤振传递到Kotlin侧:

var result = await platform.invokeMethod('updateProfile', data);

以下代码捕获Kotlin中的数据:

MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
      if(call.method == "updateProfile"){
        var argData = call.arguments
...

现在,argData包含了我刚才发送的数据,出现了两个问题:

>

  • 如何从argdata访问数据?对于如。

    如何从此数据获取我的用户dob?

    以下代码是我当前的解决方案。

    val userDOB : String = call.argument("user_dob")
    

    但引发了以下错误:Kotlin:类型不匹配:推断的类型是String?但应为字符串

    注意:当我将地图数据发送到MethodChannel时,它意外地被作为字符串发送。要遵循此方法,请确保在传递数据时实现了映射对象。


  • 共有3个答案

    齐阳
    2023-03-14

    将EventChannel
    中的参数转换参数传递给HashMap

    {'ip': '192.168.43.8','port':'812','timeout':500,"porta":[10,80]}
    
    1. 静态编程语言
     portbyipchannel =
            EventChannel(flutterPluginBinding.binaryMessenger, "portbyIpchanne")
        portbyipchannel.setStreamHandler(object : EventChannel.StreamHandler {
    
            override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
                val hashMap = arguments as HashMap
                val port = hashMap["port"]
                val ip = hashMap["ip"]
                val timeout = hashMap["timeout"]
                val arrayList = hashMap["porta"] as ArrayList
                val from = arrayList.get(0) as Int
                val to = arrayList.get(1) as Int
    
            }
    
            override fun onCancel(arguments: Any?) {
                print("=========>$arguments")
            }
    
        })
     
    static const EventChannel portbyIp_channel =
      const EventChannel('portbyIpchannel');
      Stream<String>? _onportbyIp;
    Stream<String>? get onPortbyIp {
        var arguments = {
          'ip': '192.168.43.8',
          'port': '812',
          'timeout': 500,
          "porta": [10, 80]
        };
        _onportbyIp = portbyIp_channel
            .receiveBroadcastStream(arguments)
            .map((event) => event.toString());
        return _onportbyIp;
      }
    阎晋
    2023-03-14

    地图Json:

    {    
        "user_dob":"15 November 1991", 
    
    }
    

    Kotlin代码:

    kotlin prettyprint-override">MethodChannel(flutterView, channel).setMethodCallHandler { call, result ->
        //you can get data in this object.
        val user_dob = call.argument<String>("user_dob")
        if (user_dob == null) {
           // error
           result.notImplemented()
           return@setMethodCallHandler
        }
    
        //do else
    }
    
    叶炜
    2023-03-14
    匿名用户

    从flatter的方法通道获取方法参数时,传入的数据是json格式的字符串。

    您只需调用调用即可。参数,它将返回一个可为空的字符串。

    在您的情况下,您请求了一个字符串,该字符串在Kotlin中是非空的字符串对象,但返回了调用的值。json中可能不存在参数,该参数为null。所以你必须得到一个字符串 可为空的字符串。

    使现代化

    检查并确保通道能够将数据传递给本机。

    在颤动中:

    static const MethodChannel _channel = const MethodChannel('NAME');
    

    并在本机代码中:

    val channel = MethodChannel(registrar.messenger(), "NAME");
    

    TL;博士

    在静态编程语言中,对可以为空的数据使用Nullable对象。

    val userDOB : String? = call.argument("user_dob")
    

    并将其与一起使用?。(空安全)

     类似资料:
    • 有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中

    • 我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler

    • Flutter有一个方法通道,用于将数据从Flutter发送到Java/静态编程语言。我们也可以在这些调用中返回值。但是如果我想从Java/静态编程语言随机返回数据到Flutter呢? 我记得有一种从Java向Flutter发送数据的通道,但我忘了它的名字

    • 根据这个问题,一个函数可以作为参数传递给另一个函数,如下所示 类似地,我们也可以从类中传递方法 但是如果我们要传递的方法是静态的(在伴随对象中)呢? 我知道,由于它是静态的,我们可以直接调用该方法,而不必将其作为参数传递,然而,在某些情况下(例如利用现有代码时),这仍然是有用的。

    • 到目前为止,我一直在使用这个静态编程语言密封类: 这在我的Kotlin和Java代码中都非常有效。今天我尝试将这个类改为使用对象(建议减少额外的类实例化): 我可以在我的其他静态编程语言文件中引用这个简单的版本,但是我现在正在努力在我的Java文件中使用它。 当我尝试在Java中引用时,我尝试了以下两种回弹编译错误: 有人知道我现在如何在Java中引用该实例吗?

    • 我正在尝试拥有自己的蓝牙kotlin实现,但遇到了一个问题。 我正在按照这里的kotlin教程启动一个用于扫描蓝牙设备的广播接收器。 问题是,当我试图从广播接收器将每个发现的设备添加到主活动范围内的可变列表中,以便将列表发送到颤振端时,我总是得到一个空值。 由于我是kotlin和android的新手,我无法真正理解我到底哪里出错了,以及我需要了解哪些概念才能做我需要做的事情。 Kotlin主要活动