استكمال قرار 2026-07-27 (كوميت fff76c9 أرشف الباك إند):
apps/rider → apps/rider-archive-cubit
apps/driver → apps/driver-archive-cubit
dashboards/admin-web → dashboards/admin-web-archive
dashboards/service-web → dashboards/service-web-archive
إعادة تسمية بلا تعديل محتوى. rider/driver كانا إعادة بناء Cubit مبنية على
عقد NestJS المؤرشف. admin-web و service-web نموذجان بملف HTML واحد (164 و
128 سطراً) — يحلّ محلهما siro_admin و siro_service المكتملان.
يُحمل من المؤرشف ولا يُعاد اكتشافه: عقد map-saas المثبَّت بالتجربة في
apps/rider-archive-cubit/lib/core/api/ (x-api-key ترويسة، reverse مصفوفة،
route في points) ودرس مسار FCM.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
39 lines
1.3 KiB
Dart
39 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'settings_state.dart';
|
|
|
|
/// الإعدادات العامة: الثيم + اللغة.
|
|
/// يُحفظ محلياً عبر SharedPreferences (ليس سراً — docs/26 §4).
|
|
class SettingsCubit extends Cubit<SettingsState> {
|
|
static const _kThemeKey = 'settings_theme_mode';
|
|
static const _kLocaleKey = 'settings_locale';
|
|
|
|
SettingsCubit() : super(const SettingsState()) {
|
|
_load();
|
|
}
|
|
|
|
Future<void> _load() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final themeIndex = prefs.getInt(_kThemeKey) ?? 0;
|
|
final localeCode = prefs.getString(_kLocaleKey) ?? 'ar';
|
|
|
|
emit(state.copyWith(
|
|
themeMode: ThemeMode.values[themeIndex],
|
|
locale: Locale(localeCode),
|
|
));
|
|
}
|
|
|
|
Future<void> setThemeMode(ThemeMode mode) async {
|
|
emit(state.copyWith(themeMode: mode));
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setInt(_kThemeKey, mode.index);
|
|
}
|
|
|
|
Future<void> setLocale(Locale locale) async {
|
|
emit(state.copyWith(locale: locale));
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString(_kLocaleKey, locale.languageCode);
|
|
}
|
|
}
|