Update codebase

This commit is contained in:
Hamza-Ayed
2026-08-05 00:28:04 +03:00
parent 36833b039d
commit 29f375b122
13 changed files with 133 additions and 37 deletions
+5 -2
View File
@@ -51,6 +51,7 @@ import 'notifications/push_service.dart';
import 'realtime/realtime_service.dart';
import 'session/session_cubit.dart';
import 'session/session_source.dart';
import 'storage/token_store.dart';
@@ -84,10 +85,12 @@ Future<void> setupInjector() async {
),
);
sl.registerSingleton<AuthRepository>(AuthRepository(sl(), sl()));
final authRepo = AuthRepository(sl(), sl());
sl.registerSingleton<AuthRepository>(authRepo);
sl.registerSingleton<SessionSource>(authRepo);
sl.registerSingleton<ProfileRepository>(ProfileRepository(sl()));
sl.registerSingleton<SessionCubit>(
SessionCubit(sl(), onAuthenticated: () => sl<PushService>().register()),
SessionCubit(authRepo, onAuthenticated: () => sl<PushService>().register()),
);
// تدفّق الدخول قصير العمر: نسخة جديدة لكل دخول، لا نسخة واحدة أبدية.
@@ -34,10 +34,10 @@ class TokenStore {
}) async {
_access = accessToken;
_refresh = refreshToken;
await _storage.write(key: _kAccess, value: accessToken);
await _storage.write(key: _kRefresh, value: refreshToken);
await _write(_kAccess, accessToken);
await _write(_kRefresh, refreshToken);
if (signingKey != null) {
await _storage.write(key: _kSigning, value: signingKey);
await _write(_kSigning, signingKey);
}
}
@@ -54,8 +54,16 @@ class TokenStore {
Future<String?> signingKey() => _storage.read(key: _kSigning);
Future<String?> deviceId() => _storage.read(key: _kDeviceId);
Future<void> setDeviceId(String id) =>
_storage.write(key: _kDeviceId, value: id);
Future<void> setDeviceId(String id) => _write(_kDeviceId, id);
Future<void> _write(String key, String value) async {
try {
await _storage.write(key: key, value: value);
} catch (_) {
await _storage.delete(key: key);
await _storage.write(key: key, value: value);
}
}
/// هل انتهت صلاحية التوكن (أو ستنتهي خلال [leeway])؟
///
@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -63,24 +64,56 @@ class LoginCubit extends Cubit<LoginState> {
/// تُستدعى أيضاً عند **العودة من إعدادات النظام**: بلا إعادة الفحص تبقى
/// الشاشة عالقة بعد أن يمنح المستخدم الإذن يدوياً (حالة حافة من docs/39 §2).
Future<void> checkLocationPermission() async {
final status = await Permission.locationWhenInUse.status;
if (status.isGranted || status.isLimited) {
emit(state.copyWith(step: LoginStep.phone));
final geoStatus = await Geolocator.checkPermission();
if (geoStatus == LocationPermission.always ||
geoStatus == LocationPermission.whileInUse) {
emit(state.copyWith(
step: LoginStep.phone,
permissionPermanentlyDenied: false,
));
return;
}
final status = await Permission.locationWhenInUse.status;
if (status.isGranted || status.isLimited) {
emit(state.copyWith(
step: LoginStep.phone,
permissionPermanentlyDenied: false,
));
return;
}
emit(state.copyWith(
permissionPermanentlyDenied: status.isPermanentlyDenied,
permissionPermanentlyDenied:
geoStatus == LocationPermission.deniedForever ||
status.isPermanentlyDenied,
));
}
Future<void> requestLocationPermission() async {
final status = await Permission.locationWhenInUse.request();
if (status.isGranted || status.isLimited) {
emit(state.copyWith(step: LoginStep.phone));
final geoStatus = await Geolocator.requestPermission();
if (geoStatus == LocationPermission.always ||
geoStatus == LocationPermission.whileInUse) {
emit(state.copyWith(
step: LoginStep.phone,
permissionPermanentlyDenied: false,
));
return;
}
final status = await Permission.locationWhenInUse.request();
if (status.isGranted || status.isLimited) {
emit(state.copyWith(
step: LoginStep.phone,
permissionPermanentlyDenied: false,
));
return;
}
emit(state.copyWith(
permissionPermanentlyDenied: status.isPermanentlyDenied,
permissionPermanentlyDenied:
geoStatus == LocationPermission.deniedForever ||
status.isPermanentlyDenied,
));
}