11import 'dart:async' ;
22import 'dart:convert' ;
33import 'dart:io' ;
4+ import 'dart:ui' show FlutterView;
45import 'package:flutter/foundation.dart' show kIsWeb;
56import 'package:flutter/material.dart' ;
67import 'package:flutter_localizations/flutter_localizations.dart' ;
@@ -180,12 +181,13 @@ Future<bool> _resetWindowPositionIfFarOutsideScreen(
180181 return false ;
181182 }
182183
183- final display = views.first.display;
184- final devicePixelRatio = display.devicePixelRatio == 0
185- ? 1.0
186- : display.devicePixelRatio;
187- final screenWidth = display.size.width / devicePixelRatio;
188- final screenHeight = display.size.height / devicePixelRatio;
184+ final screenBounds = _tryGetPrimaryDisplayLogicalSize (views.first);
185+ if (screenBounds == null ) {
186+ return false ;
187+ }
188+
189+ final screenWidth = screenBounds.width;
190+ final screenHeight = screenBounds.height;
189191 final savedWidth = prefs.getDouble ('window_width' ) ?? 1280 ;
190192 final savedHeight = prefs.getDouble ('window_height' ) ?? 800 ;
191193
@@ -209,6 +211,24 @@ Future<bool> _resetWindowPositionIfFarOutsideScreen(
209211 return true ;
210212}
211213
214+ Size ? _tryGetPrimaryDisplayLogicalSize (FlutterView view) {
215+ try {
216+ final display = view.display;
217+ final devicePixelRatio = display.devicePixelRatio == 0
218+ ? 1.0
219+ : display.devicePixelRatio;
220+ return Size (
221+ display.size.width / devicePixelRatio,
222+ display.size.height / devicePixelRatio,
223+ );
224+ } on AssertionError {
225+ talker.debug (
226+ 'Skipping saved window position recovery because display information is not ready yet.' ,
227+ );
228+ return null ;
229+ }
230+ }
231+
212232class _StartupRecoveryResult {
213233 final bool didResetSharedPreferences;
214234 final bool didResetWindowPosition;
0 commit comments