NullPointerException при открытии экрана с виджетом веб-просмотра на некоторых устройствах - PullRequest
0 голосов
/ 20 февраля 2020

При запуске на 13 устройствах одно из них (Moto Z с Android 7.0) дает мне исключение NullPointerException при предварительном запуске тестов из Play Console при открытии экрана с плагином. Как ни странно, он работает безупречно на каждом физическом устройстве, которое я тестировал.

Плагин Webview - flutter_inappwebview 2.1.0 + 1

Есть ли способ, которым я мог бы отловить эту ошибку, чтобы я мог предоставить другое представление для пользователя? Видящий сбой виджет находится внутри скаффолда в операторе возврата из метода сборки

 I/DisplayManagerService(1357): Display device changed state: "flutter-vd", OFF
 I/DisplayManagerService(1357): Display device removed: DisplayDeviceInfo{"flutter-vd": uniqueId="virtual:com.danproductions.medical.guiadebulasf,10148,flutter-vd,0", 1440 x 1744, modeId 2, defaultModeId 2, supportedModes [{id=2, width=1440, height=1744, fps=60.0}], colorTransformId 0, defaultColorTransformId 0, supportedColorTransforms [], HdrCapabilities null, density 640, 640.0 x 640.0 dpi, appVsyncOff 0, presDeadline 16666666, touch NONE, rotation 0, type VIRTUAL, state OFF, owner com.danproductions.medical.guiadebulasf (uid 10148), FLAG_PRIVATE, FLAG_NEVER_BLANK, FLAG_OWN_CONTENT_ONLY}
 I/DisplayManagerService(1357): Display device added: DisplayDeviceInfo{"flutter-vd": uniqueId="virtual:com.danproductions.medical.guiadebulasf,10148,flutter-vd,0", 1440 x 1848, modeId 3, defaultModeId 3, supportedModes [{id=3, width=1440, height=1848, fps=60.0}], colorTransformId 0, defaultColorTransformId 0, supportedColorTransforms [], HdrCapabilities null, density 640, 640.0 x 640.0 dpi, appVsyncOff 0, presDeadline 16666666, touch NONE, rotation 0, type VIRTUAL, state ON, owner com.danproductions.medical.guiadebulasf (uid 10148), FLAG_PRIVATE, FLAG_NEVER_BLANK, FLAG_OWN_CONTENT_ONLY}
 E/NetworkScheduler.ATC(8575): Called cancelTask for already completed task com.google.android.gms/.measurement.PackageMeasurementTaskService{u=0 tag="Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG" trigger=window{start=0s,end=1s,earliest=0s,latest=0s} requirements=[NET_CONNECTED] attributes=[PERSISTED] scheduled=0s last_run=0s jid=N/A status=ACTIVE retries=0 client_lib=GMS_TASK_SCHEDULER-19629000} :1
 V/ConnectivityManager(8575): isActiveNetworkMetered() returns:false
 D/AndroidRuntime(10476): Shutting down VM
 E/AndroidJUnitRunner(10476): An unhandled exception was thrown by the app.
 I/AndroidJUnitRunner(10476): Bringing down the entire Instrumentation process.
 E/MonitoringInstr(10476): Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords.
 E/MonitoringInstr(10476): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Display.getSize(android.graphics.Point)' on a null object reference
    at org.chromium.ui.display.DisplayAndroid.updateFromDisplay(DisplayAndroid.java:133)
    at org.chromium.ui.display.DisplayAndroidManager$DisplayListenerBackendImpl.onDisplayChanged(DisplayAndroidManager.java:169)
    at android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate.handleMessage(DisplayManagerGlobal.java:462)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6123)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

Я проследил, включив некоторую отладочную информацию, и обнаружил, что " веб-представление создано " и прогресс достигает 100, НО веб-просмотр запущен НЕ отображается. При использовании другого устройства появляется сообщение « webview началось ».

    InAppWebView(
      initialHeaders: {},
      initialOptions: InAppWebViewWidgetOptions(
          inAppWebViewOptions: InAppWebViewOptions(
            debuggingEnabled: true,
          )),
      onWebViewCreated: (InAppWebViewController controller) {
        webView = controller;
        print("webview created");
      },
      onLoadStart: (InAppWebViewController controller, String url) {
        print("webview started");
        setState(() {
          this.url = url;
        });
      },
      onLoadStop:
          (InAppWebViewController controller, String url) async {
        setState(() {
          this.url = url;
        });
      },
      onProgressChanged:
          (InAppWebViewController controller, int progress) {
        setState(() {
          print(progress);
          this.progress = progress / 100;
        });
      },
    ),

1 Ответ

0 голосов
/ 21 февраля 2020

Я немного посмотрел онлайн и обнаружил, что ваша проблема сообщается в разных местах.

Здесь

Здесь

Я не знаю, какую версию Flutter вы используете, но по второй ссылке проблема возникает из-за ошибки в Chromium при изменении ориентации.

Взято из обсуждения там, я советую сделать следующее:

The fix is available starting webview_flutter version 0.3.11+3

...