applyActionConfig method

void applyActionConfig(
  1. Object? raw, {
  2. required String sdkVersion,
})

Apply a raw action_config envelope.

Implementation

void applyActionConfig(Object? raw, {required String sdkVersion}) {
  var flagEnabled = true;
  var versionAllowed = true;
  var localCache = true;
  var cacheSync = true;
  var dataCapture = true;
  var transmitOnHiddenWidget = true;
  var awakeningEffect = true;
  var activeBorderGlow = true;
  var highlighting = true;
  var clickTracking = true;
  var nativeBridge = true;
  List<Color>? activeBorderGradient;
  List<Color>? highlightGradient;
  List<Color>? awakeningGradient;
  var effects = ActionEffects.none;
  try {
    if (raw is Map) {
      final flags = raw['flags'];
      if (flags is Map) {
        if (_isExplicitlyFalse(flags['actionIntelligence'])) {
          flagEnabled = false;
        }
        if (_isExplicitlyFalse(flags['localCache'])) localCache = false;
        if (_isExplicitlyFalse(flags['cacheSync'])) cacheSync = false;
        if (_isExplicitlyFalse(flags['dataCapture'])) dataCapture = false;
        if (_isExplicitlyFalse(flags['transmitOnHiddenWidget'])) {
          transmitOnHiddenWidget = false;
        }
        if (_isExplicitlyFalse(flags['awakeningEffect'])) {
          awakeningEffect = false;
        }
        if (_isExplicitlyFalse(flags['activeBorderGlow'])) {
          activeBorderGlow = false;
        }
        if (_isExplicitlyFalse(flags['highlighting'])) highlighting = false;
        if (_isExplicitlyFalse(flags['clickTracking'])) clickTracking = false;
        if (_isExplicitlyFalse(flags['nativeBridge'])) nativeBridge = false;
        final minVersion = flags['minSdkVersion'];
        if (minVersion is String &&
            minVersion.trim().isNotEmpty &&
            _compareVersions(sdkVersion, minVersion.trim()) < 0) {
          versionAllowed = false;
        }
      }
      // Android's native-only home for the same switch.
      final treePush = raw['treePush'];
      if (treePush is Map &&
          _isExplicitlyFalse(treePush['transmitOnHiddenWidget'])) {
        transmitOnHiddenWidget = false;
      }
      final colors = raw['colors'];
      if (colors is Map) {
        activeBorderGradient =
            _parseGradient(colors['activeBorderGradient'], minStops: 1);
        highlightGradient =
            _parseGradient(colors['highlightGradient'], minStops: 1);
        awakeningGradient =
            _parseGradient(colors['awakeningGradient'], minStops: 2);
      }
      effects = _parseEffects(raw['effects']);
    }
  } catch (_) {
    flagEnabled = true;
    versionAllowed = true;
    localCache = true;
    cacheSync = true;
    dataCapture = true;
    transmitOnHiddenWidget = true;
    awakeningEffect = true;
    activeBorderGlow = true;
    highlighting = true;
    clickTracking = true;
    nativeBridge = true;
    activeBorderGradient = null;
    highlightGradient = null;
    awakeningGradient = null;
    effects = ActionEffects.none;
  }
  final before = actionIntelligenceEnabled;
  final beforeAll = _fingerprint;
  _flagEnabled = flagEnabled;
  _versionAllowed = versionAllowed;
  _localCache = localCache;
  _cacheSync = cacheSync;
  _dataCapture = dataCapture;
  _transmitOnHiddenWidget = transmitOnHiddenWidget;
  _awakeningEffect = awakeningEffect;
  _activeBorderGlow = activeBorderGlow;
  _highlighting = highlighting;
  _clickTracking = clickTracking;
  _nativeBridge = nativeBridge;
  _activeBorderGradient = activeBorderGradient;
  _highlightGradient = highlightGradient;
  _awakeningGradient = awakeningGradient;
  _effects = effects;
  _notifyIfChanged(before,
      anyChanged: !_sameFingerprint(beforeAll, _fingerprint));
}