/// 支付宝 Native 实现(Android/iOS,封装 alipay_kit) library; import 'dart:async'; import 'package:alipay_kit/alipay_kit.dart'; /// 支付宝支付结果 class AlipayPayResult { final int? resultStatus; final String? memo; AlipayPayResult({this.resultStatus, this.memo}); bool get isSuccessful => resultStatus == 9000; bool get isCancelled => resultStatus == 6001; } /// 支付宝封装(App 支付) class AlipayFlow { AlipayFlow._(); static final AlipayFlow instance = AlipayFlow._(); StreamSubscription? _sub; /// 拉起支付宝 App 支付 /// [orderStr] 后端 sdkExecute 生成的调起字符串 /// /// alipay_kit 的支付结果是异步流(payResp),需先订阅再发起,避免丢失结果。 Future pay(String orderStr) async { final completer = Completer(); // 先订阅结果流 await _sub?.cancel(); _sub = AlipayKitPlatform.instance.payResp().listen((resp) { if (!completer.isCompleted) { completer.complete( AlipayPayResult(resultStatus: resp.resultStatus, memo: resp.memo), ); } }); // 发起支付(原生弹起支付宝;结果经 payResp 流返回) await AlipayKitPlatform.instance.pay(orderInfo: orderStr); // 等待结果(超时兜底,避免永远阻塞) return completer.future.timeout( const Duration(seconds: 90), onTimeout: () => AlipayPayResult(resultStatus: 6002, memo: '支付超时'), ); } }