initialize method

Future<void> initialize()

Initializes the storage environment by:

  • Resolving cache and temporary directories.
  • Fetching package information (app name).
  • Acquiring the platform-specific device ID.
  • Starting the network connectivity listener.

This method is idempotent: multiple calls will have no additional effect.

Example:

await StorageEnvironment.instance.initialize();

Implementation

Future<void> initialize() async {
  if (initialized) return;

  final packageInfo = await PackageInfo.fromPlatform();
  appName = packageInfo.appName.toLowerCase().replaceAll(" ", "_");

  final applicationCacheDirectory = await getApplicationCacheDirectory();
  applicationCachePath = p.normalize("${applicationCacheDirectory.path}/$appName/storage");

  final temporaryDirectory = await getTemporaryDirectory();
  temporaryPath = p.normalize("${temporaryDirectory.path}/$appName/storage");

  final deviceInfo = DeviceInfoPlugin();
  if (Platform.isAndroid) {
    deviceId = await const AndroidId().getId();
  } else if (Platform.isIOS) {
    final ios = await deviceInfo.iosInfo;
    deviceId = ios.identifierForVendor;
  } else if (Platform.isMacOS) {
    final macOs = await deviceInfo.macOsInfo;
    deviceId = macOs.systemGUID;
  } else if (Platform.isWindows) {
    final windows = await deviceInfo.windowsInfo;
    deviceId = windows.deviceId;
  } else {
    deviceId = null;
  }

  InternetConnection().onStatusChange.listen(
    (status) => _connectivitySubject.value = status == InternetStatus.connected,
  );

  _initializedSubject.value = true;
}