h-1.flutter.0/lib/utils/build_expiry_info.dart
2026-03-01 15:59:30 +09:00

39 lines
1.3 KiB
Dart

import 'package:flutter/foundation.dart';
class BuildExpiryInfo {
BuildExpiryInfo._(this.buildTimestamp, this.lifespan, this._hasValidTimestamp);
factory BuildExpiryInfo.fromEnvironment({Duration lifespan = const Duration(days: 90)}) {
const rawTimestamp = String.fromEnvironment('APP_BUILD_TIMESTAMP');
if (rawTimestamp.isEmpty) {
debugPrint('[BuildExpiry] APP_BUILD_TIMESTAMP is missing; expiry guard disabled.');
return BuildExpiryInfo._(null, lifespan, false);
}
final parsed = DateTime.tryParse(rawTimestamp);
if (parsed == null) {
debugPrint('[BuildExpiry] Invalid APP_BUILD_TIMESTAMP: $rawTimestamp. Expiry guard disabled.');
return BuildExpiryInfo._(null, lifespan, false);
}
return BuildExpiryInfo._(parsed.toUtc(), lifespan, true);
}
final DateTime? buildTimestamp;
final Duration lifespan;
final bool _hasValidTimestamp;
bool get isEnforced => _hasValidTimestamp && buildTimestamp != null;
DateTime? get expiryTimestamp => buildTimestamp?.add(lifespan);
bool get isExpired {
if (!isEnforced || expiryTimestamp == null) return false;
return DateTime.now().toUtc().isAfter(expiryTimestamp!);
}
Duration? get remaining {
if (!isEnforced || expiryTimestamp == null) return null;
return expiryTimestamp!.difference(DateTime.now().toUtc());
}
}