ensureScreenSize static method

Future<void> ensureScreenSize([
  1. FlutterView? window,
  2. Duration pollInterval = const Duration(milliseconds: 10)
])

Ensures screen size is available before proceeding.

Call this before accessing screen dimensions in splash screens or during app initialization.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AdaptiveUtils.ensureScreenSize();
  runApp(MyApp());
}

Or use with FutureBuilder:

FutureBuilder(
  future: AdaptiveUtils.ensureScreenSize(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.done) {
      return MyApp();
    }
    return SplashScreen();
  },
)

Implementation

static Future<void> ensureScreenSize([
  ui.FlutterView? window,
  Duration pollInterval = const Duration(milliseconds: 10),
]) async {
  final binding = WidgetsFlutterBinding.ensureInitialized();
  binding.deferFirstFrame();

  await Future.doWhile(() {
    window ??= binding.platformDispatcher.implicitView;

    if (window == null || window!.physicalSize.isEmpty) {
      return Future.delayed(pollInterval, () => true);
    }

    return false;
  });

  binding.allowFirstFrame();
}