Files
MaliangAINovalWriter/AINoval/lib/models/app_registration_config.dart
2025-09-10 00:07:52 +08:00

208 lines
7.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<bool> isQuickRegistrationEnabled() async {
if (_cachedQuickRegistrationEnabled != null) {
return _cachedQuickRegistrationEnabled!;
}
final prefs = await SharedPreferences.getInstance();
_cachedQuickRegistrationEnabled = prefs.getBool(_quickRegistrationEnabledKey) ?? _defaultQuickRegistrationEnabled;
return _cachedQuickRegistrationEnabled!;
}
/// 设置是否启用快捷注册
static Future<void> setQuickRegistrationEnabled(bool enabled) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_quickRegistrationEnabledKey, enabled);
_cachedQuickRegistrationEnabled = enabled;
}
/// 获取是否启用手机注册
static Future<bool> isPhoneRegistrationEnabled() async {
if (_cachedPhoneRegistrationEnabled != null) {
return _cachedPhoneRegistrationEnabled!;
}
final prefs = await SharedPreferences.getInstance();
_cachedPhoneRegistrationEnabled = prefs.getBool(_phoneRegistrationEnabledKey) ?? _defaultPhoneRegistrationEnabled;
return _cachedPhoneRegistrationEnabled!;
}
/// 设置是否启用手机注册
static Future<void> setPhoneRegistrationEnabled(bool enabled) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_phoneRegistrationEnabledKey, enabled);
_cachedPhoneRegistrationEnabled = enabled;
}
/// 获取是否启用邮箱注册
static Future<bool> isEmailRegistrationEnabled() async {
if (_cachedEmailRegistrationEnabled != null) {
return _cachedEmailRegistrationEnabled!;
}
final prefs = await SharedPreferences.getInstance();
_cachedEmailRegistrationEnabled = prefs.getBool(_emailRegistrationEnabledKey) ?? _defaultEmailRegistrationEnabled;
return _cachedEmailRegistrationEnabled!;
}
/// 设置是否启用邮箱注册
static Future<void> setEmailRegistrationEnabled(bool enabled) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_emailRegistrationEnabledKey, enabled);
_cachedEmailRegistrationEnabled = enabled;
}
/// 获取是否需要验证
static Future<bool> isVerificationRequired() async {
if (_cachedRequireVerification != null) {
return _cachedRequireVerification!;
}
final prefs = await SharedPreferences.getInstance();
_cachedRequireVerification = prefs.getBool(_requireVerificationKey) ?? _defaultRequireVerification;
return _cachedRequireVerification!;
}
/// 设置是否需要验证
static Future<void> setVerificationRequired(bool required) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_requireVerificationKey, required);
_cachedRequireVerification = required;
}
/// 获取可用的注册方式列表
static Future<List<RegistrationMethod>> getAvailableRegistrationMethods() async {
final List<RegistrationMethod> methods = [];
if (await isEmailRegistrationEnabled()) {
methods.add(RegistrationMethod.email);
}
if (await isPhoneRegistrationEnabled()) {
methods.add(RegistrationMethod.phone);
}
return methods;
}
/// 检查是否至少有一种注册方式可用
static Future<bool> hasAvailableRegistrationMethod() async {
final methods = await getAvailableRegistrationMethods();
return methods.isNotEmpty;
}
/// 重置所有配置到默认值
static Future<void> 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<RegistrationMethod> get availableMethods {
final List<RegistrationMethod> 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,
);
}