subscribeToProperties method
void
subscribeToProperties()
Implementation
void subscribeToProperties() {
try {
final activeWidgets = this._activeWidgets;
for (var id in activeWidgets.keys) {
if (this.subscribeTo != null && this.subscribeTo!.isNotEmpty) {
if (this.subscribeTo?.keys.contains(id) == false) {
continue;
}
}
final componentInstance = activeWidgets[id];
var subscribedKeys;
if (this.subscribeTo?.keys.contains(id) == true) {
subscribedKeys = this.subscribeTo![id];
} else {
subscribedKeys = KeysToSubscribe.values;
}
/* hydrating the initial state,
handles an edge case like when StateProvider is used in a drawer */
current[id] = SearchControllerState(
results: subscribedKeys.contains(KeysToSubscribe.Results)
? componentInstance!.results
: null,
aggregationData:
subscribedKeys.contains(KeysToSubscribe.AggregationData)
? componentInstance!.aggregationData
: null,
requestStatus: subscribedKeys.contains(KeysToSubscribe.RequestStatus)
? componentInstance!.requestStatus
: null,
error: subscribedKeys.contains(KeysToSubscribe.Error)
? componentInstance!.error
: null,
value: subscribedKeys.contains(KeysToSubscribe.Value)
? componentInstance!.value
: null,
query: subscribedKeys.contains(KeysToSubscribe.Query)
? componentInstance!.query
: null,
dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
? componentInstance!.dataField
: null,
size: subscribedKeys.contains(KeysToSubscribe.Size)
? componentInstance!.size
: null,
from: subscribedKeys.contains(KeysToSubscribe.From)
? componentInstance!.from
: null,
fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
? componentInstance!.fuzziness
: null,
includeFields: subscribedKeys.contains(KeysToSubscribe.IncludeFields)
? componentInstance!.includeFields
: null,
excludeFields: subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
? componentInstance!.excludeFields
: null,
sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
? componentInstance!.sortBy
: null,
react: subscribedKeys.contains(KeysToSubscribe.React)
? componentInstance!.react
: null,
defaultQuery: subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
? componentInstance!.defaultQuery
: null,
customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
? componentInstance!.customQuery
: null,
);
/* subscriberMethod to handle state changes */
void subscriberMethod(ChangesController changes) {
void applyChanges() {
previous[id] = SearchControllerState(
results: subscribedKeys.contains(KeysToSubscribe.Results)
? changes.Results?.prev
: null,
aggregationData:
subscribedKeys.contains(KeysToSubscribe.AggregationData)
? changes.AggregationData?.prev
: null,
requestStatus:
subscribedKeys.contains(KeysToSubscribe.RequestStatus)
? changes.RequestStatus?.prev
: null,
error: subscribedKeys.contains(KeysToSubscribe.Error)
? changes.Error?.prev
: null,
value: subscribedKeys.contains(KeysToSubscribe.Value)
? changes.Value?.prev
: null,
query: subscribedKeys.contains(KeysToSubscribe.Query)
? changes.Query?.prev
: null,
dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
? changes.DataField?.prev
: null,
size: subscribedKeys.contains(KeysToSubscribe.Size)
? changes.Size?.prev
: null,
from: subscribedKeys.contains(KeysToSubscribe.From)
? changes.From?.prev
: null,
fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
? changes.Fuzziness?.prev
: null,
includeFields:
subscribedKeys.contains(KeysToSubscribe.IncludeFields)
? changes.IncludeFields?.prev
: null,
excludeFields:
subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
? changes.ExcludeFields?.prev
: null,
sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
? changes.SortBy?.prev
: null,
react: subscribedKeys.contains(KeysToSubscribe.React)
? changes.React?.prev
: null,
defaultQuery:
subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
? changes.DefaultQuery?.prev
: null,
customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
? changes.CustomQuery?.prev
: null,
);
current[id] = SearchControllerState(
results: subscribedKeys.contains(KeysToSubscribe.Results)
? changes.Results?.next
: null,
aggregationData:
subscribedKeys.contains(KeysToSubscribe.AggregationData)
? changes.AggregationData?.next
: null,
requestStatus:
subscribedKeys.contains(KeysToSubscribe.RequestStatus)
? changes.RequestStatus?.next
: null,
error: subscribedKeys.contains(KeysToSubscribe.Error)
? changes.Error?.next
: null,
value: subscribedKeys.contains(KeysToSubscribe.Value)
? changes.Value?.next
: null,
query: subscribedKeys.contains(KeysToSubscribe.Query)
? changes.Query?.next
: null,
dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
? changes.DataField?.next
: null,
size: subscribedKeys.contains(KeysToSubscribe.Size)
? changes.Size?.next
: null,
from: subscribedKeys.contains(KeysToSubscribe.From)
? changes.From?.next
: null,
fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
? changes.Fuzziness?.next
: null,
includeFields:
subscribedKeys.contains(KeysToSubscribe.IncludeFields)
? changes.IncludeFields?.next
: null,
excludeFields:
subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
? changes.ExcludeFields?.next
: null,
sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
? changes.SortBy?.next
: null,
react: subscribedKeys.contains(KeysToSubscribe.React)
? changes.React?.next
: null,
defaultQuery:
subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
? changes.DefaultQuery?.next
: null,
customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
? changes.CustomQuery?.next
: null,
);
if (this.onChange is Function) {
this.onChange!(current, previous);
}
}
applyChanges();
}
_widgetSubscribers[id] = {
"controller": componentInstance,
"subscriberFunction": subscriberMethod,
};
componentInstance?.subscribeToStateChanges(
subscriberMethod, subscribedKeys);
}
} catch (e) {
print('error $e');
}
}