Files
observer/flutter_app/lib/home/home_view_model.dart
T

68 lines
1.8 KiB
Dart

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<void> refresh() async {
_loading = true;
_error = null;
notifyListeners();
try {
_license = await licenseService.check();
} catch (_) {
// check 内部已兜底,这里仅防御
} finally {
_loading = false;
notifyListeners();
}
}
/// 搜索按钮:强制服务端校验授权,active 才允许进入相机。
/// 网络失败/会话失效一律不放行;返回值表示是否可进入。
Future<bool> 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();
}
}