anchor.diff:  
       _overlayRef.overlayElement.style.transform =
           'translate(${_repositionOffsetX}px, ${_repositionOffsetY}px)';
  +  }
  +
  +  void _updateViewportSize() {
  +    _viewportRect.width = window.innerWidth;
  +    _viewportRect.height = window.innerHeight;
     }
   
     void _updatePopupMinMaxSize() {
  
positive.code: 
      // Start listening to both the popup and the source's layout.
      var initialData = Completer<Rectangle>();
      var popupContentsLayoutStream =
          _overlayRef.measureSizeChanges().asBroadcastStream(onCancel: (sub) {
        _layoutInternalSub = sub;
      });
      var popupSourceLayoutStream =
          state.source.onDimensionsChanged(track: state.trackLayoutChanges);
      if (!state.trackLayoutChanges) {
  
negative.code:       throw StateError('Cannot open popup: no source set.');
      }
  
      // Update the viewport size.
      _updateViewportSize();
      // Initialize the minimum/maximum size and content size based on the
      // viewport size before popup position is populated.
      _updatePopupMinMaxSize();
  
      _visibleDisposer.addStreamSubscription(window.onResize
          .transform(throttleStream(_resizeThrottleDuration, guaranteeLast: true))
          .listen((_) {
        _updateViewportSize();
        _updatePopupMinMaxSize();
      }));
  
      // Put the overlay in the live DOM so we can measure its size.
      _overlayRef.state.visibility = visibility.Visibility.Hidden;
  