@@ -278,6 +278,47 @@ Future<void> main() async {
278278 await expectLater (channelCompleter.future, completion ('hello' ));
279279 });
280280
281+ testWidgets ('JavaScriptChannel can receive undefined' ,
282+ (WidgetTester tester) async {
283+ final Completer <void > pageFinished = Completer <void >();
284+ final PlatformWebViewController controller = PlatformWebViewController (
285+ const PlatformWebViewControllerCreationParams (),
286+ );
287+ unawaited (controller.setJavaScriptMode (JavaScriptMode .unrestricted));
288+ final PlatformNavigationDelegate delegate = PlatformNavigationDelegate (
289+ const PlatformNavigationDelegateCreationParams (),
290+ );
291+ unawaited (delegate.setOnPageFinished ((_) => pageFinished.complete ()));
292+ unawaited (controller.setPlatformNavigationDelegate (delegate));
293+
294+ final Completer <String > channelCompleter = Completer <String >();
295+ await controller.addJavaScriptChannel (
296+ JavaScriptChannelParams (
297+ name: 'Channel' ,
298+ onMessageReceived: (JavaScriptMessage message) {
299+ channelCompleter.complete (message.message);
300+ },
301+ ),
302+ );
303+
304+ await controller.loadHtmlString (
305+ 'data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+' ,
306+ );
307+
308+ await tester.pumpWidget (Builder (
309+ builder: (BuildContext context) {
310+ return PlatformWebViewWidget (
311+ PlatformWebViewWidgetCreationParams (controller: controller),
312+ ).build (context);
313+ },
314+ ));
315+
316+ await pageFinished.future;
317+
318+ await controller.runJavaScript ('Channel.postMessage(undefined);' );
319+ await expectLater (channelCompleter.future, completion ('(null)' ));
320+ });
321+
281322 testWidgets ('resize webview' , (WidgetTester tester) async {
282323 final Completer <void > buttonTapResizeCompleter = Completer <void >();
283324 final Completer <void > onPageFinished = Completer <void >();
0 commit comments