initialize method

Future<void> initialize({
  1. List<Locale>? locales,
  2. List<DeviceInfo>? devices,
})

Initializes the state by loading data from storage (if useStorage)

Implementation

Future<void> initialize({
  List<Locale>? locales,
  List<DeviceInfo>? devices,
}) async {
  await state.maybeWhen(
    notInitialized: () async {
      state = const DevicePreviewState.initializing();

      final availaiableLocales = locales != null
          ? locales
              .map(
                (available) =>
                    defaultAvailableLocales.cast<NamedLocale?>().firstWhere(
                          (all) => all!.code == available.toString(),
                          orElse: () => null,
                        ),
              )
              .where((x) => x != null)
              .toList()
          : defaultAvailableLocales;

      final defaultLocale = device_preview
          .basicLocaleListResolution(
            WidgetsBinding.instance.window.locales,
            availaiableLocales.map((x) => x!.locale).toList(),
          )
          .toString();

      devices = devices ?? Devices.all;
      DevicePreviewData? data;
      try {
        data = await storage.load();
      } catch (e) {
        // ignore: avoid_print
        print('[device_preview] Error while restoring data: $e');
      }

      data ??= DevicePreviewData(
        locale: defaultLocale,
        customDevice: _defaultCustomDevice,
      );

      if (data.customDevice == null) {
        data = data.copyWith(
          customDevice: _defaultCustomDevice,
        );
      }
      state = DevicePreviewState.initialized(
        locales: availaiableLocales.cast<NamedLocale>(),
        devices: devices!,
        data: data,
      );
    },
    orElse: () => Future.value(),
  );
}