Reputation: 1
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
Reputation: 186
onNavigationRequest: (NavigationRequest request) {
return NavigationDecision.navigate; //this work for me
},
Upvotes: 0