refactor: implement lazy initialization for global BlocProviders and enhance Firebase initialization with timeout handling

This commit is contained in:
mso7nueh
2026-01-13 12:22:22 +03:00
parent a778257215
commit d206e7ec12
13 changed files with 161 additions and 41 deletions

View File

@@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:developer';
import 'dart:io';
import 'package:eatvio_app/core/app_config.dart';
@@ -19,12 +20,24 @@ class FirebaseApi {
String? token;
if (await _isHuaweiDevice()) {
token = await _getHuaweiPushTokenNative();
token = await _getHuaweiPushTokenNative().timeout(
const Duration(seconds: 5),
onTimeout: () => null,
);
} else {
if ((sl<AppConfig>().buildType == AppBuildType.prod)) {
await _firebaseMessaging.requestPermission();
try {
await _firebaseMessaging.requestPermission().timeout(
const Duration(seconds: 5),
);
} catch (e) {
// Разрешение не критично, продолжаем
}
}
token = await _firebaseMessaging.getToken();
token = await _firebaseMessaging.getToken().timeout(
const Duration(seconds: 5),
onTimeout: () => null,
);
}
return token;
}
@@ -39,9 +52,15 @@ class FirebaseApi {
'hw_id': Platform.isIOS ? (await deviceInfo.iosInfo).identifierForVendor : (await deviceInfo.androidInfo).id,
'token': await getToken(),
},
).timeout(
const Duration(seconds: 10),
onTimeout: () {
throw TimeoutException('registerAnonymousPushToken timeout');
},
);
} catch (e, st) {
log(e.toString(), stackTrace: st);
// Не пробрасываем ошибку дальше, так как это не критичная операция
}
}
@@ -57,9 +76,15 @@ class FirebaseApi {
'hw_id': Platform.isIOS ? (await deviceInfo.iosInfo).identifierForVendor : (await deviceInfo.androidInfo).id,
'token': await getToken(),
},
).timeout(
const Duration(seconds: 10),
onTimeout: () {
throw TimeoutException('registerPushToken timeout');
},
);
} catch (e, st) {
log(e.toString(), stackTrace: st);
// Не пробрасываем ошибку дальше, так как это не критичная операция
}
}
}