handleContexts method
ObserverHandleContextsResultModel<GridViewObserveModel> ?
handleContexts({
- bool isForceObserve = false,
- bool isFromObserveNotification = false,
- bool isDependObserveCallback = true,
- bool isIgnoreInnerCanHandleObserve = true,
inherited
Handle all buildContext
Implementation
ObserverHandleContextsResultModel<M>? handleContexts({
bool isForceObserve = false,
bool isFromObserveNotification = false,
bool isDependObserveCallback = true,
bool isIgnoreInnerCanHandleObserve = true,
}) {
if (!isIgnoreInnerCanHandleObserve) {
if (!innerCanHandleObserve) return null;
updateInnerCanHandleObserve();
}
final isForbidObserveCallback =
widget.sliverController?.isForbidObserveCallback ?? false;
final onObserve = isForbidObserveCallback ? null : widget.onObserve;
final onObserveAll = isForbidObserveCallback ? null : widget.onObserveAll;
if (isDependObserveCallback) {
if (onObserve == null && onObserveAll == null) return null;
}
final isHandlingScroll =
widget.sliverController?.innerIsHandlingScroll ?? false;
if (isHandlingScroll) return null;
List<BuildContext> ctxs = fetchTargetSliverContexts();
Map<BuildContext, M> resultMap = {};
Map<BuildContext, M> changeResultMap = {};
M? changeResultModel;
for (var i = 0; i < ctxs.length; i++) {
final ctx = ctxs[i];
final targetObserveModel = handleObserve(ctx);
if (targetObserveModel == null) continue;
resultMap[ctx] = targetObserveModel;
if (isForceObserve ||
widget.triggerOnObserveType ==
ObserverTriggerOnObserveType.directly) {
changeResultMap[ctx] = targetObserveModel;
} else {
final lastResultModel = lastResultMap[ctx];
if (lastResultModel == null) {
changeResultMap[ctx] = targetObserveModel;
} else if (lastResultModel != targetObserveModel) {
changeResultMap[ctx] = targetObserveModel;
}
}
// Getting observed result for first listView.
if (i == 0 && changeResultMap[ctx] != null) {
changeResultModel = changeResultMap[ctx];
}
}
lastResultMap = resultMap;
if (isDependObserveCallback &&
onObserve != null &&
changeResultModel != null) {
onObserve(changeResultModel);
}
if (isDependObserveCallback &&
onObserveAll != null &&
changeResultMap.isNotEmpty) {
onObserveAll(changeResultMap);
}
return ObserverHandleContextsResultModel(
changeResultModel: changeResultModel,
changeResultMap: changeResultMap,
);
}