WebViewScreen constructor
WebViewScreen({
- Key? key,
- required BuildContext context,
- required Uri url,
- required List<
RequestedProof> requestedProofs, - required dynamic onModification(),
- required dynamic onSuccess(),
- required dynamic onFail(),
- dynamic onStatusChange(
- String status
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);
}