privacy_compliance.dart 999 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import 'mmkv_util.dart';
  2. class PrivacyCompliance {
  3. PrivacyCompliance._();
  4. static const String isPolicyGranted = 'isPolicyGranted';
  5. static final List<EnsurePolicyGrant> _pendingTasks = [];
  6. static bool _isPolicyGranted = false;
  7. static Future<void> ensurePolicyGranted(EnsurePolicyGrant ensure) async {
  8. if (isAgreePrivacyPolicy()) {
  9. await ensure.onPolicyGrant();
  10. } else {
  11. _pendingTasks.add(ensure);
  12. }
  13. }
  14. static Future<void> setPrivacyPolicy(bool isAgree) async {
  15. final bool oldValue = isAgreePrivacyPolicy();
  16. if (isAgree == oldValue) return;
  17. KVUtil.putBool(isPolicyGranted, isAgree);
  18. _isPolicyGranted = isAgree;
  19. if (isAgree) {
  20. for (final task in _pendingTasks) {
  21. await task.onPolicyGrant();
  22. }
  23. _pendingTasks.clear();
  24. }
  25. }
  26. static bool isAgreePrivacyPolicy() {
  27. return _isPolicyGranted || KVUtil.getBool(isPolicyGranted, false);
  28. }
  29. }
  30. abstract class EnsurePolicyGrant {
  31. Future<void> onPolicyGrant();
  32. }