Bassam Basheer
Bassam Basheer

Reputation: 1

webview_flutter, new window pop up not working in IOS platform

when i click on a button in my webview it opens a new window pop up in web , it renders in Android devices but in IOS it gives me 'about:blank' in url and shows blank screen, i have tried different packages still this issue exists (webview_flutter,inappwebview)

while the pop up should render i get url as "about:blank" in IOS

i have tried webview_flutter,inappwebview these two packages and added all properties in info.plist

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>

this is my code for web view

 @riverpod
 WebViewController webViewController(
 WebViewControllerRef ref, {
 required String url,
 TabController? tabController,
 bool isYodlee = false,
 bool isFromSubcritionPayment = false,
 String? currentPlaneCode,
 }) {
 bool loaderStarted = false;
 const params = PlatformWebViewControllerCreationParams();
 final WebViewController controller =
 WebViewController.fromPlatformCreationParams(params);
 controller
 ..setBackgroundColor(UIColors.backgroundPrimary)
 ..setJavaScriptMode(JavaScriptMode.unrestricted)
 ..setNavigationDelegate(
  NavigationDelegate(
    onProgress: (progress) {
      printLog('loading progress $progress%');
      if (!loaderStarted) {
        ref.read(loaderStateProvider.notifier).showLoader();
        loaderStarted = true;
      }
      if (progress == 100) {
        ref.read(loaderStateProvider.notifier).hideLoader();
        loaderStarted = false;
      }
    },
    onPageStarted: (String pageUrl) async {
      if (pageUrl.startsWith(SubscriptionConstants.successPage)) {
        ref.read(loaderStateProvider.notifier).hideLoader();
        if (isFromSubcritionPayment) {
          popUntilPath(currentContext, const 
 SubscriptionPurchaseSuccess());
        } else {
          Navigator.pop(currentContext);
          await cAlertDialog<void>(
            context: currentContext,
            title: Text(
              
 localization(currentContext).subscriptions.cardUpdateTitle,
            ),
            content: Text(
              
 localization(currentContext).subscriptions.cardUpdateContent,
            ),
          );
        }
        ref
          ..invalidate(aliveCurrentSubscriptionServiceProvider)
          ..invalidate(billIntervalUnitProvider)
          ..invalidate(nextPlanProvider);
      } else {
        ref.read(loaderStateProvider.notifier).showLoader();
      }
    },
    onPageFinished: (String url) async {
      ref.read(loaderStateProvider.notifier).hideLoader();
      // For yodlee to receive message
      if (isYodlee) {
        await controller
            .runJavaScript(BankConstants.yodleeAccountFetchScript);
      }
    },
    onWebResourceError: (error) {
      ref.read(loaderStateProvider.notifier).hideLoader();
      cAlertDialog<void>(
        context: currentContext,
        content: const Text('Failed to load the page!'),
      );
      currentContext.pop();
      printLog(error.description);
    },
  ),
 )
 ..addJavaScriptChannel(
  'Message',
  onMessageReceived: (JavaScriptMessage message) {
    // take the message and proceed to step 2 for yodlee
    if (isYodlee) {
      final data = YodleeWebResponse.fromJson(
        json.decode(message.message.replaceAll(r'\', '')) as JsonMap,
      );
      ref
          .read(newUnlinkedAccountsProvider.notifier)
          .getBankData(data)
          .then((value) {
        if (tabController != null) {
          tabController.animateTo(1);
        }
      });
    }
   },
   )
  ..loadRequest(Uri.parse(url));
 return controller;
 }

Upvotes: 0

Views: 651

Answers (1)

Samet Karavaizoğlu
Samet Karavaizoğlu

Reputation: 186

onNavigationRequest: (NavigationRequest request) {
        return NavigationDecision.navigate; //this work for me 
      },

Upvotes: 0

Related Questions