WebViewScreen constructor

WebViewScreen({
  1. Key? key,
  2. required BuildContext context,
  3. required Uri url,
  4. required List<RequestedProof> requestedProofs,
  5. required dynamic onModification(
    1. String webViewData,
    2. String cookieStr,
    3. dynamic parseResult
    ),
  6. required dynamic onSuccess(
    1. Map<String, dynamic> proofs
    ),
  7. required dynamic onFail(
    1. Exception e
    ),
  8. dynamic onStatusChange(
    1. String status
    ) = _defaultOnStatusChange,
})

Implementation

WebViewScreen({
  Key? key,
  required this.context,
  required this.url,
  required this.requestedProofs,
  required this.onModification,
  required this.onSuccess,
  required this.onFail,
  this.onStatusChange = _defaultOnStatusChange,
}) : super(key: key) {
  // Configure WebViewController
  cookieManager.clearCookies();
  controller.reload();
  controller
    ..addJavaScriptChannel(
      'Login',
      onMessageReceived: (JavaScriptMessage message) {
        parseResult = parseHtml(message.message,
            requestedProofs[0].responseSelections[0].responseMatch);
        controller.runJavaScript('''Claim.postMessage("Init")''');
      },
    )
    ..addJavaScriptChannel(
      'Claim',
      onMessageReceived: (JavaScriptMessage message) async {
        onModification(
            'Please wait, Initiating Claim Creation', cookieStr, parseResult);
        Navigator.pop(context);
      },
    )
    ..setJavaScriptMode(JavaScriptMode.unrestricted)
    ..setNavigationDelegate(
      NavigationDelegate(
        onProgress: (int progress) {
          //  print("Loading ${progress}%");
        },
        onPageFinished: (String url) async {
          final gotCookies =
              await cookieManager.getCookies(requestedProofs[0].loginUrl);
          List<String> foundCookies = [];
          bool found = requestedProofs[0].loginCookies.every((cookie) {
            if (gotCookies.indexWhere((item) => item.name == cookie) != -1) {
              foundCookies.add(cookie);
              return true;
            }
            return false;
          });

          if (found) {
            cookieStr =
                gotCookies.map((c) => '${c.name}=${c.value}').join('; ');
            if (requestedProofs[0].url.replaceAll(RegExp(r'/$'), '') ==
                url.replaceAll(RegExp(r'/$'), '')) {
              controller.runJavaScript(
                  '''Login.postMessage(document.documentElement.outerHTML)''');
            } else {
              controller.loadRequest(Uri.parse(requestedProofs[0].url));
            }
          }
        },
      ),
    )
    ..loadRequest(url);
}