watchWindowIsReady method

dynamic watchWindowIsReady()

Implementation

watchWindowIsReady() {
  ui.FlutterView view = PlatformDispatcher.instance.views.first;

  double viewportWidth = view.physicalSize.width / view.devicePixelRatio;
  double viewportHeight = view.physicalSize.height / view.devicePixelRatio;

  if (viewportWidth == 0.0 && viewportHeight == 0.0) {
    // window.physicalSize are Size.zero when app first loaded. This only happened on Android and iOS physical devices with release build.
    // We should wait for onMetricsChanged when window.physicalSize get updated from Flutter Engine.
    VoidCallback? _ordinaryOnMetricsChanged = PlatformDispatcher.instance.onMetricsChanged;
    PlatformDispatcher.instance.onMetricsChanged = () async {
      if (view.physicalSize == ui.Size.zero) {
        return;
      }
      setState(() {
        _flutterScreenIsReady = true;
      });

      // Should proxy to ordinary window.onMetricsChanged callbacks.
      if (_ordinaryOnMetricsChanged != null) {
        _ordinaryOnMetricsChanged();
        // Recover ordinary callback to window.onMetricsChanged
        PlatformDispatcher.instance.onMetricsChanged = _ordinaryOnMetricsChanged;
      }
    };
  } else {
    _flutterScreenIsReady = true;
  }
}