- [x] I have read the Getting Started section
- [x] I have already searched for the same problem
Environment
| Technology | Version |
|-----------------| ------------- |
| Flutter version | 3.3.9 |
| Plugin version | flutter_inappwebview: ^5.7.1+1 url_launcher: ^6.1.7 |
| Android version | Android Studio Dolphin ( 2021.3.1 Patch 1 ) |
| iOS version | 16.2 |
| macOS version | 13.1 |
| Xcode version | 14.2 |
Device information:
Description
Expected behavior:
- Show popup window with content.
- In Android, it works

Current behavior:
- Empty page (iOS)

Steps to reproduce
Sample code
show
main.dart (whole)
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'iOS about_blank Sample',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
InAppWebViewController? _inAppWebViewController;
final Completer<InAppWebViewController> _controller =
Completer<InAppWebViewController>();
String initUrl = 'https://postcode.map.daum.net/guide';
InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
preferredContentMode: UserPreferredContentMode.MOBILE,
cacheEnabled: true,
mediaPlaybackRequiresUserGesture: true,
javaScriptEnabled: true,
javaScriptCanOpenWindowsAutomatically: true,
useShouldOverrideUrlLoading: true,
),
android: AndroidInAppWebViewOptions(
useHybridComposition: false,
supportMultipleWindows: true,
domStorageEnabled: true,
databaseEnabled: true,
cacheMode: AndroidCacheMode.LOAD_CACHE_ELSE_NETWORK,
mixedContentMode: AndroidMixedContentMode
.MIXED_CONTENT_ALWAYS_ALLOW,
),
ios: IOSInAppWebViewOptions(
applePayAPIEnabled: true,
allowsInlineMediaPlayback: true,
ignoresViewportScaleLimits: true,
sharedCookiesEnabled: true,
),
);
@override
Widget build(BuildContext context) {
return Scaffold(
body: InAppWebView(
initialUrlRequest: URLRequest(url: Uri.parse(initUrl)),
initialOptions: options,
onWebViewCreated: (InAppWebViewController controller) {
_controller.future.then((value) => _inAppWebViewController = value);
_controller.complete(controller);
},
onLoadStart: (controller, url) {
print("@Parent onLoadStart() $url");
},
onLoadStop: (controller, url) {
print('@Parent onLoadStop() $url');
},
onLoadError: (controller, url, code, message) { /* do nothing */ },
onLoadHttpError: (controller, url, code, message) { /* do nothing */ },
onProgressChanged: (controller, progress) { /* do nothing */ },
onCreateWindow: (controller, createWindowRequest) async {
print("@Parent onCreateWindow(), $createWindowRequest");
await _showPopUpWindow(context, createWindowRequest, controller);
return true;
},
onCloseWindow: (controller) {
print('@Parent onCloseWindow()');
closeInAppWebView();
},
),
);
}
_showPopUpWindow(BuildContext context, CreateWindowAction createWindowRequest, InAppWebViewController controller) async {
showDialog(
barrierDismissible: true,
context: context,
builder: (context) {
return Scaffold(
body: Stack(
children: [
InAppWebView(
windowId: createWindowRequest.windowId,
initialOptions: options,
onWebViewCreated: (controller) {
_inAppWebViewController = controller;
},
onCreateWindow: (controller, windowAction) async {
print("#popup onCreateWindow()");
return true;
},
onLoadStart: (controller, url) {
print('#popup onLoadStart() $url');
},
onLoadError: (controller, url, code, message) {
/* do nothing */
},
onLoadHttpError: (controller, url, code, message) {
/* do nothing */
},
onLoadStop: (controller, url) {
print("#popup onLoadStop() $url");
},
onCloseWindow: (controller) async {
print('#popup onCloseWindow()');
await _controller.future
.then((value) => _inAppWebViewController = value);
Navigator.pop(context, null);
},
),
Positioned(
top: 5,
right: 10,
child: IconButton(
icon: const Icon(Icons.cancel, color: Colors.black),
onPressed: () {
_inAppWebViewController = controller;
Navigator.pop(context, null);
},
),
),
],
),
);
},
);
}
}
- Run sample code
- Scroll down to below page
3. click [우편번호 찾기](red box) button
4. Webview shows popup window without any contents.
Stacktrace/Logcat
I/flutter ( 2141): @Parent onLoadStart() https://postcode.map.daum.net/guide
I/flutter ( 2141): @Parent onLoadStop() https://postcode.map.daum.net/guide
I/flutter ( 2141): @Parent onCreateWindow(), {request: { ... } ... }
flutter: @Parent onLoadStart() https://postcode.map.daum.net/guide
flutter: @Parent onLoadStop() https://postcode.map.daum.net/guide
flutter: @Parent onCreateWindow(), {request: { ... } ... }
flutter: #popup onLoadStart()
flutter: #popup onLoadStop() about:blank
bug