首页 > 解决方案 > 如何在 Flutter 应用和它的 android/ios 代码之间建立一个发布-订阅通道?

问题描述

因此,我们MethodChannel编写自定义平台特定代码文档部分中介绍了该内容,该部分向 Javaland 发送单个请求并返回单个响应,但我想做的是在 Android 上运行的服务之间建立一个文字 pubsub 通道 &我的颤振应用程序,这将允许我之前关于将闭包作为参数传递给Java端的问题的替代方法,因为它允许该函数

Future<Result> = doPayment(
  amount: 100.00, 
  currency: 'USD', 
  onPasscodeEntry: () => _renderInputBox(), 
  onValidation: () => _doValidation()
);

通过执行以下操作来实现:

Future<Result> doPayment({int amount, String currency, Function onPasscodeEntry, Function onValidation}) {
    Subscription sub;
    try {
        sub = subscribe(channel: 'myapp/doPayment/$paymentUid')
        sub.send("initialize", {"amount": amount, "currency": currency});

        sub.receive("onPasscodeEntry").then((payload) => onPasscodeEntry(payload));
        sub.receive("onValidation").then((payload) => onValidation(payload));

        return sub.receive("result")
    finally {
        sub?.send("deinitialize");
        sub?.end()
        return null;
    }
}

你明白了:-)

似乎BasicMessageChannel可能是我的朋友,但没有使用示例,也没有关于如何在平台端(又名 Javaland)挂钩它的示例,我也希望有一个接收函数 - 等待某事的东西发生在 Javaland 并将通知推送到 Flutter 端,

一个简单的例子是,如果MethodChannel使用示例能够将电池状态更新推送到颤振中,而不仅仅是按需从颤振中获取它们。

上面的例子不是特别需要,但我想建立一个与平台的双向沟通​​渠道——对于我正在做的事情,我现在只需要知道这扇门对我没有关闭,如果我去颤振。

我正在寻找合适的类/库来使用flutter-side和java-side以及代码示例,因为文档中没有很好地涵盖该部分。

标签: javaandroiddartflutter

解决方案


似乎目前可以使用MethodChannel&的组合EventChannel- 从 Flutter 到平台的一条消息,从平台到 Flutter 的一条消息(一旦 Flutter 端订阅) - 如Github 上的示例所示(还有一个单独的 swift 示例)。

从技术上讲,这意味着可以实现 pub-sub,但这样做并不好,我向 Flutter 的团队写了一个关于它的问题- 建议Stream改为使用 -based API(然后你可以利用rxdart, rxjava, rxswift& 其他),所以我们'看看情况如何。


推荐阅读