我想与 surepay 集成以在我的应用程序中添加付款 SurePay 使用 java 本机代码,在我的例子中,我想在我的 flutter 应用程序中使用这个本机代码 一切正常,钱提取成功,支付过程正确完成,但有一个回调函数,我必须从中获取响应以确保支付过程成功或失败,并相应地告诉用户该怎么做. 就我而言,我听不到本机代码中发生的变化 这是我的 java 本机代码
注意:我想在调用(sendAmount - getLastTransactionFromTerminal)方法后收听 onUsbGetTransaction 回调方法
public class MainActivity extends FlutterActivity implements Usb.OnReceivingData, Usb.OnConnectStatusChanges{
private static final String CHANNEL = "tkafol/channel";
private static final String MY_EVENT_CHANNEL_NAME = "tkafol/event";
private final Usb ConnParam = new Usb();
Usb.TransactionInformation model =new Usb.TransactionInformation();
private EventChannel.EventSink usbTransactionEventSink;
String transactionInfo ;
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
// Setup a method channel to receive messages from Flutter
ConnParam.setTimeout(1000 * 60 * 7);
new EventChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), MY_EVENT_CHANNEL_NAME)
.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object arguments, EventChannel.EventSink eventSink) {
Log.d("Stream listen", "top listen");
Toast.makeText(getBaseContext(),"stream in native code listen",Toast.LENGTH_SHORT).show();
usbTransactionEventSink = eventSink;
}
@Override
public void onCancel(Object arguments) {
Log.d("Stream cancel", "top cancel");
Toast.makeText(getBaseContext(),"stream in native code cancel",Toast.LENGTH_SHORT).show();
usbTransactionEventSink = null;
}
});
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
(call, result) -> {
switch (call.method) {
case "sendAmount" :
String amount = call.argument("amount");
ConnParam.sendAmount(MainActivity.this, amount);
//ConnParam.sendAmount(MainActivity.this, "10.25");
result.success(null);
break;
case "sendReconciliation" :
ConnParam.sendReconciliation(MainActivity.this);
result.success(null);
break;
case "getLastTransactionFromTerminal" :
ConnParam.getLastTransactionFromTerminal(MainActivity.this);
result.success( ConnParam.getLastTransactionFromTerminal(MainActivity.this));
break;
result.notImplemented();
break;
}
});
}
// A method that calls the native code
// private boolean callNativeMethod(String message) {
// return true;
// }
@Override
public void onUsbGetTransaction(Usb.TransactionInformation model) {
Log.d("STREAM","now is null");
Toast.makeText(getBaseContext(),"stream null now",Toast.LENGTH_SHORT).show();
if (usbTransactionEventSink != null) {
// Send the event data to Flutter
Toast.makeText(getBaseContext(),"stream in native code",Toast.LENGTH_SHORT).show();
String transactionInfo = model.toString();
Map<String, String> arguments = new HashMap<>();
arguments.put("transactionInfo", transactionInfo);
new MethodChannel(Objects.requireNonNull(getFlutterEngine()).getDartExecutor().getBinaryMessenger(), CHANNEL)
.invokeMethod("onGetTransaction", arguments);
usbTransactionEventSink.success(model.toString());
}
String transactionInfo = model.toString();
Map<String, String> arguments = new HashMap<>();
arguments.put("transactionInfo", transactionInfo);
new MethodChannel(Objects.requireNonNull(getFlutterEngine()).getDartExecutor().getBinaryMessenger(), CHANNEL)
.invokeMethod("onGetTransaction", arguments);
// usbTransactionEventSink.success(model.toString());
}
}
还有我用来监听回调方法的 Flutter 代码
final EventChannel _eventChannel =
const EventChannel('tkafol/event');
StreamSubscription? _usbTransactionSubscription;
listenToEvent() {
showError("we stream before");
_usbTransactionSubscription =
_eventChannel.receiveBroadcastStream().listen((transactionInfo) {
showError("we stream after");
setState(() {
responseDataUsb = "callback listener : " + transactionInfo.toString();
});
});
}
我正在尝试这个函数来监听本地代码中的事件
final EventChannel _eventChannel =
const EventChannel('tkafol/event');
StreamSubscription? _usbTransactionSubscription;
listenToEvent() {
showError("we stream before");
_usbTransactionSubscription =
_eventChannel.receiveBroadcastStream().listen((transactionInfo) {
showError("we stream after");
setState(() {
responseDataUsb = "callback listener : " + transactionInfo.toString();
});
});
}
并在 initState 方法中调用它,但整个流都没有结果