authWithNearWallets method

Future<String> authWithNearWallets(
  1. BuildContext context,
  2. String privateNearAPIjsFormat
)

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';
}