Skip to content

Commit 22caeaa

Browse files
committed
fix: 修复 SharedPreferences 自动修复
1 parent 9e65ed1 commit 22caeaa

1 file changed

Lines changed: 26 additions & 6 deletions

File tree

lib/main.dart

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33
import 'dart:io';
4+
import 'dart:ui' show FlutterView;
45
import 'package:flutter/foundation.dart' show kIsWeb;
56
import 'package:flutter/material.dart';
67
import '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+
212232
class _StartupRecoveryResult {
213233
final bool didResetSharedPreferences;
214234
final bool didResetWindowPosition;

0 commit comments

Comments
 (0)