import 'package:shared_preferences/shared_preferences.dart'; /// 应用注册配置 /// 管理注册功能的开关和设置 class AppRegistrationConfig { static const String _phoneRegistrationEnabledKey = 'phone_registration_enabled'; static const String _emailRegistrationEnabledKey = 'email_registration_enabled'; static const String _requireVerificationKey = 'require_verification'; static const String _quickRegistrationEnabledKey = 'quick_registration_enabled'; // 默认配置(MVP:仅快捷注册) static const bool _defaultPhoneRegistrationEnabled = false; // 关闭手机注册 static const bool _defaultEmailRegistrationEnabled = false; // 关闭邮箱注册 static const bool _defaultRequireVerification = false; // 关闭验证码 static const bool _defaultQuickRegistrationEnabled = true; // 开启快捷注册 // 缓存配置 static bool? _cachedPhoneRegistrationEnabled; static bool? _cachedEmailRegistrationEnabled; static bool? _cachedRequireVerification; static bool? _cachedQuickRegistrationEnabled; /// 获取是否启用快捷注册 static Future isQuickRegistrationEnabled() async { if (_cachedQuickRegistrationEnabled != null) { return _cachedQuickRegistrationEnabled!; } final prefs = await SharedPreferences.getInstance(); _cachedQuickRegistrationEnabled = prefs.getBool(_quickRegistrationEnabledKey) ?? _defaultQuickRegistrationEnabled; return _cachedQuickRegistrationEnabled!; } /// 设置是否启用快捷注册 static Future setQuickRegistrationEnabled(bool enabled) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_quickRegistrationEnabledKey, enabled); _cachedQuickRegistrationEnabled = enabled; } /// 获取是否启用手机注册 static Future isPhoneRegistrationEnabled() async { if (_cachedPhoneRegistrationEnabled != null) { return _cachedPhoneRegistrationEnabled!; } final prefs = await SharedPreferences.getInstance(); _cachedPhoneRegistrationEnabled = prefs.getBool(_phoneRegistrationEnabledKey) ?? _defaultPhoneRegistrationEnabled; return _cachedPhoneRegistrationEnabled!; } /// 设置是否启用手机注册 static Future setPhoneRegistrationEnabled(bool enabled) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_phoneRegistrationEnabledKey, enabled); _cachedPhoneRegistrationEnabled = enabled; } /// 获取是否启用邮箱注册 static Future isEmailRegistrationEnabled() async { if (_cachedEmailRegistrationEnabled != null) { return _cachedEmailRegistrationEnabled!; } final prefs = await SharedPreferences.getInstance(); _cachedEmailRegistrationEnabled = prefs.getBool(_emailRegistrationEnabledKey) ?? _defaultEmailRegistrationEnabled; return _cachedEmailRegistrationEnabled!; } /// 设置是否启用邮箱注册 static Future setEmailRegistrationEnabled(bool enabled) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_emailRegistrationEnabledKey, enabled); _cachedEmailRegistrationEnabled = enabled; } /// 获取是否需要验证 static Future isVerificationRequired() async { if (_cachedRequireVerification != null) { return _cachedRequireVerification!; } final prefs = await SharedPreferences.getInstance(); _cachedRequireVerification = prefs.getBool(_requireVerificationKey) ?? _defaultRequireVerification; return _cachedRequireVerification!; } /// 设置是否需要验证 static Future setVerificationRequired(bool required) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_requireVerificationKey, required); _cachedRequireVerification = required; } /// 获取可用的注册方式列表 static Future> getAvailableRegistrationMethods() async { final List methods = []; if (await isEmailRegistrationEnabled()) { methods.add(RegistrationMethod.email); } if (await isPhoneRegistrationEnabled()) { methods.add(RegistrationMethod.phone); } return methods; } /// 检查是否至少有一种注册方式可用 static Future hasAvailableRegistrationMethod() async { final methods = await getAvailableRegistrationMethods(); return methods.isNotEmpty; } /// 重置所有配置到默认值 static Future resetToDefaults() async { await setPhoneRegistrationEnabled(_defaultPhoneRegistrationEnabled); await setEmailRegistrationEnabled(_defaultEmailRegistrationEnabled); await setVerificationRequired(_defaultRequireVerification); await setQuickRegistrationEnabled(_defaultQuickRegistrationEnabled); } /// 清除缓存 static void clearCache() { _cachedPhoneRegistrationEnabled = null; _cachedEmailRegistrationEnabled = null; _cachedRequireVerification = null; _cachedQuickRegistrationEnabled = null; } } /// 注册方式枚举 enum RegistrationMethod { email('邮箱注册', 'email'), phone('手机注册', 'phone'); const RegistrationMethod(this.displayName, this.value); final String displayName; final String value; } /// 注册配置数据类 class RegistrationConfig { const RegistrationConfig({ required this.phoneRegistrationEnabled, required this.emailRegistrationEnabled, required this.verificationRequired, this.quickRegistrationEnabled = true, }); final bool phoneRegistrationEnabled; final bool emailRegistrationEnabled; final bool verificationRequired; final bool quickRegistrationEnabled; /// 获取可用的注册方式 List get availableMethods { final List methods = []; if (emailRegistrationEnabled) { methods.add(RegistrationMethod.email); } if (phoneRegistrationEnabled) { methods.add(RegistrationMethod.phone); } return methods; } /// 是否至少有一种注册方式可用 bool get hasAvailableMethod => availableMethods.isNotEmpty; /// 复制配置 RegistrationConfig copyWith({ bool? phoneRegistrationEnabled, bool? emailRegistrationEnabled, bool? verificationRequired, bool? quickRegistrationEnabled, }) { return RegistrationConfig( phoneRegistrationEnabled: phoneRegistrationEnabled ?? this.phoneRegistrationEnabled, emailRegistrationEnabled: emailRegistrationEnabled ?? this.emailRegistrationEnabled, verificationRequired: verificationRequired ?? this.verificationRequired, quickRegistrationEnabled: quickRegistrationEnabled ?? this.quickRegistrationEnabled, ); } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is RegistrationConfig && other.phoneRegistrationEnabled == phoneRegistrationEnabled && other.emailRegistrationEnabled == emailRegistrationEnabled && other.verificationRequired == verificationRequired && other.quickRegistrationEnabled == quickRegistrationEnabled; } @override int get hashCode => Object.hash( phoneRegistrationEnabled, emailRegistrationEnabled, verificationRequired, quickRegistrationEnabled, ); }