authWithNearWallets method
Implementation
Future<String> authWithNearWallets(
BuildContext context,
String privateNearAPIjsFormat,
) async {
InAppWebViewSettings settings = InAppWebViewSettings(
useShouldOverrideUrlLoading: true,
mediaPlaybackRequiresUserGesture: false,
allowsInlineMediaPlayback: true,
iframeAllowFullscreen: true,
);
final accountID = await showDialog<String>(
context: context,
builder: (BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(),
child: InAppWebView(
initialUrlRequest: URLRequest(
url: WebUri(WebViewConstants.nearLoginThroughtWebView),
),
initialSettings: settings,
onWebViewCreated: (controller) {},
onLoadStart: (controller, url) {},
onPermissionRequest: (controller, request) async {
return PermissionResponse(
resources: request.resources,
action: PermissionResponseAction.GRANT);
},
shouldOverrideUrlLoading: (controller, navigationAction) async {
return NavigationActionPolicy.ALLOW;
},
onLoadStop: (controller, url) async {
controller.evaluateJavascript(source: '''
window.addNewFullAcseesKeyToTheNearBlockchain("$privateNearAPIjsFormat").then((res) => {
console.log('Key was added suscessfuly');
});
''');
},
onReceivedError: (controller, request, error) {},
onProgressChanged: (controller, progress) {},
onUpdateVisitedHistory: (controller, url, androidIsReload) async {
if (url?.rawValue ==
'https://app.mynearwallet.com/authorized-apps') {
final accountId = (await controller.webStorage.localStorage
.getItems())
.where(
(element) => element.value.toString().contains('.near'))
.toList()
.firstWhere(
(element) => !element.value.toString().startsWith("{"))
.value;
// ignore: use_build_context_synchronously
Navigator.pop(context, accountId);
}
},
onConsoleMessage: (controller, consoleMessage) {
// log(consoleMessage.toString());
},
),
);
},
);
return accountID ?? 'no_account_id';
}