import 'package:flutter/foundation.dart'; import '../payment/license_service.dart'; import '../payment/models.dart'; import '../payment/order_api.dart'; /// 主界面状态:到期时间展示 + 搜索入口强制校验 + 退出登录 class HomeViewModel extends ChangeNotifier { final LicenseService licenseService; LicenseStatus? _license; bool _loading = true; bool _verifying = false; String? _error; bool _sessionExpired = false; LicenseStatus? get license => _license; bool get loading => _loading; bool get verifying => _verifying; String? get error => _error; bool get sessionExpired => _sessionExpired; HomeViewModel({required this.licenseService}); /// 进入主界面/支付返回后刷新(本地缓存优先,服务端为准) Future refresh() async { _loading = true; _error = null; notifyListeners(); try { _license = await licenseService.check(); } catch (_) { // check 内部已兜底,这里仅防御 } finally { _loading = false; notifyListeners(); } } /// 搜索按钮:强制服务端校验授权,active 才允许进入相机。 /// 网络失败/会话失效一律不放行;返回值表示是否可进入。 Future verifyForCamera() async { _verifying = true; _sessionExpired = false; _error = null; notifyListeners(); try { final license = await licenseService.verifyServer(); _license = license; return license.isActive; } on SessionExpiredException { _sessionExpired = true; return false; } on OrderApiException catch (e) { _error = e.message; return false; } finally { _verifying = false; notifyListeners(); } } void clearSessionExpired() { _sessionExpired = false; notifyListeners(); } }