initialize method
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;
}