onRedirectJS method

Future<void> onRedirectJS(
  1. JavaScriptMessage message
)

Implementation

Future<void> onRedirectJS(JavaScriptMessage message) async {
  print("flutterWebView : ${message.message}");

  try {
    // final data = json.decode(message.message);
    Map<String, dynamic> data = jsonDecode(message.message);

    // print("onRedirectJS : $data");

    switch(data["event"]) {
      case "cancel":
        onProgressShow(false);
        widget.paymentResult = BootpayPaymentResult.CANCEL;
        if (this.widget.onCancel != null) this.widget.onCancel!(message.message);
        debounceClose();
        break;
      case "error":
        onProgressShow(false);
        widget.paymentResult = BootpayPaymentResult.ERROR;
        if (this.widget.onError != null) this.widget.onError!(message.message);
        if(this.widget.payload?.extra?.displayErrorResult != true) {
          debounceClose();
        }
        break;
      case "close":
        onProgressShow(false);
        debounceClose();
        break;
      case "issued":
        onProgressShow(false);

        if (this.widget.onIssued != null) this.widget.onIssued!(message.message);
        if(this.widget.payload?.extra?.displaySuccessResult != true) {
          debounceClose();
        }
        break;
      case "confirm":
        onProgressShow(true);
        await goConfirmEvent(message);
        break;
      case "done":
        onProgressShow(false);
        widget.paymentResult = BootpayPaymentResult.DONE;

        if (this.widget.onDone != null) this.widget.onDone!(message.message);
        if(this.widget.payload?.extra?.displaySuccessResult != true) {
          debounceClose();
        } else {
          if(this.widget.isWidget != true) { // 위젯이 아닌 생체인증 결제일 경우에는 닫아버리면 됨
            final content = data["data"]["method_origin_symbol"];
            if(content == "card_rebill_rest") {
              debounceClose();
            }
          }
        }

        // if(this.widget.payload?.widgetKey != null) {
        //   //widget 처리 방식
        //   // if (this.widget.onDone != null) this.widget.onDone!(message.message);
        // } else {
        //   //기존 결제 처리 방식
        //   if (this.widget.onDone != null) this.widget.onDone!(message.message);
        //   if(this.widget.payload?.extra?.displaySuccessResult != true) {
        //     debounceClose();
        //   } else {
        //     final content = data["data"]["method_origin_symbol"];
        //     if(content == "card_rebill_rest") {
        //       debounceClose();
        //     }
        //   }
        // }


        break;
      case "bootpayWidgetFullSizeScreen":
        if (this.widget.onFullSizeScreen != null) this.widget.onFullSizeScreen!(message.message);
        break;

      case "bootpayWidgetRevertScreen":
        print("bootpayWidgetRevertScreen called");
        if (this.widget.onRevertScreen != null) this.widget.onRevertScreen!(message.message);
        break;

      // Union(통합결제) 위젯은 use_bootpay_inapp_sdk=true 상태에서 이벤트를 JS window.parent
      // 대신 이 채널로 바로 보낸다. redirect 는 "webview 전체를 이 URL 로 이동시켜라" 지시로,
      // SDK 호스트 페이지에서 처리되던 `location.href = url` 동작을 Flutter 네이티브에서 대체한다.
      case "redirect":
        final dynamic urlValue = data["data"] is Map ? (data["data"] as Map)["url"] : data["url"];
        if (urlValue is String && urlValue.isNotEmpty) {
          widget._controller.loadRequest(Uri.parse(urlValue));
        }
        break;

      case "moveRedirectUrl":
        final dynamic payload = data["data"] is Map ? data["data"] as Map : data;
        final dynamic urlValue = payload["url"];
        if (urlValue is String && urlValue.isNotEmpty) {
          widget._controller.loadRequest(Uri.parse(urlValue));
        }
        break;

      // UI 제어 이벤트는 SDK 호스트 페이지의 AlfredProgress / iframe 크기 조정 용도로 사용되며
      // Flutter webview 에는 동등한 대상 DOM 이 없으므로 조용히 무시한다.
      case "showPayment":
      case "hidePayment":
      case "showProgress":
      case "hideProgress":
      case "resize":
      case "iFrameStyle":
      case "windowStyle":
      case "polling":
      case "setConfirmParameters":
        break;
    }
  } catch (e) {
    print("Error parsing JSON: $e");
  }

}