Skip to content

[webview_flutter] Example App throws _CastError #90597

@mvanbeusekom

Description

@mvanbeusekom

Running the example App supplied with the webview_flutter plugin throws a _CastError.

Steps to Reproduce

  1. Clone the flutter/plugins repository: git clone https://github.com/flutter/plugins.git;
  2. Change into the plugins/packages/webview_flutter/webview_flutter folder: cd ./plugins/packages/webview_flutter/webview_flutter;
  3. Download all required dependencies: flutter pub get;
  4. Change into the example folder: cd example;
  5. Run the example project (on iOS or Android): flutter run

Expected results:

The example App runs without showing any errors in the console.

Actual results:

The example App runs however the console does show the following _CastError in the console logs:

The following _CastError was thrown building FutureBuilder<WebViewController>(dirty, state:
_FutureBuilderState<WebViewController>#b5005):
Null check operator used on a null value

The relevant error-causing widget was:
  FutureBuilder<WebViewController>
  FutureBuilder:file:///Users/maurits/Projects/Baseflow/Internal/Flutter/plugins/packages/webview_flutter/webview_flutter/example/lib/main.
  dart:299:12

When the exception was thrown, this was the stack:
#0      NavigationControls.build.<anonymous closure> (package:webview_flutter_example/main.dart:305:59)
#1      _FutureBuilderState.build (package:flutter/src/widgets/async.dart:782:55)
#2      StatefulElement.build (package:flutter/src/widgets/framework.dart:4782:27)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4665:15)
#4      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11)
#5      Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5)
#6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4643:5)
#7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4831:11)
#8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4638:5)
...     Normal element mounting (7 frames)
#15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#16     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36)
#17     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32)
...     Normal element mounting (19 frames)
#36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#37     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36)
#38     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32)
...     Normal element mounting (129 frames)
#167    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#168    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36)
#169    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32)
...     Normal element mounting (116 frames)
#285    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#286    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36)
#287    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32)
...     Normal element mounting (173 frames)
#460    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#461    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6333:36)
#462    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6344:32)
...     Normal element mounting (371 frames)
#833    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3673:14)
#834    Element.updateChild (package:flutter/src/widgets/framework.dart:3425:18)
#835    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1198:16)
#836    RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1167:5)
#837    RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1112:18)
#838    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2573:19)
#839    RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1111:13)
#840    WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:944:7)
#841    WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:924:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

The exception is thrown on this line because it is trying to access the snapshot.data from a FutureBuilder that is not yet completed and thus is still null. Trying to force this into a non-nullable variable using the bang (!) operator is triggering the error.

I will be sending a PR with a fix soon.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listd: examplesSample code and demosfound in release: 2.2Found to occur in 2.2found in release: 2.5Found to occur in 2.5p: webviewThe WebView pluginpackageflutter/packages repository. See also p: labels.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions