Skip to content

Commit ea7edf4

Browse files
committed
LiveList: fix reusage of unchanged child objects
I've broken this part while removing the not-null casts. My second attempt works :-)
1 parent 769fbf7 commit ea7edf4

File tree

1 file changed

+32
-40
lines changed

1 file changed

+32
-40
lines changed

packages/dart/lib/src/utils/parse_live_list.dart

+32-40
Original file line numberDiff line numberDiff line change
@@ -263,51 +263,19 @@ class ParseLiveList<T extends ParseObject> {
263263
final List<Future<void>> loadingNodes = <Future<void>>[];
264264

265265
for (String key in paths.keys) {
266-
ParseObject? keyInObject = object.get<ParseObject>(key);
267-
if (keyInObject != null) {
266+
if (object.containsKey(key)) {
268267
ParseObject? includedObject = object.get<ParseObject>(key);
269268
if (includedObject != null) {
270269
//If the object is not fetched
271270
if (!includedObject.containsKey(keyVarUpdatedAt)) {
272271
//See if oldObject contains key
273-
if (oldObject != null) {
274-
ParseObject? keyInOld = oldObject.get<ParseObject>(key);
275-
if (keyInOld != null) {
276-
includedObject = keyInOld;
277-
278-
//If the object is not fetched || the ids don't match / the pointer changed
279-
if (!includedObject.containsKey(keyVarUpdatedAt) ||
280-
includedObject.objectId != keyInObject.objectId) {
281-
includedObject = keyInObject;
282-
//fetch from web including sub objects
283-
//same as down there
284-
final QueryBuilder<ParseObject> queryBuilder = QueryBuilder<
285-
ParseObject>(ParseObject(includedObject.parseClassName))
286-
..whereEqualTo(keyVarObjectId, includedObject.objectId)
287-
..includeObject(_toIncludeStringList(paths[key]));
288-
loadingNodes.add(queryBuilder
289-
.query()
290-
.then<void>((ParseResponse parseResponse) {
291-
List<dynamic>? results = parseResponse.results;
292-
if (parseResponse.success &&
293-
results != null &&
294-
results.length == 1) {
295-
// ignore: deprecated_member_use_from_same_package
296-
object[key] = results[0];
297-
}
298-
}));
299-
continue;
300-
} else {
301-
// ignore: deprecated_member_use_from_same_package
302-
object[key] = includedObject;
303-
//recursion
304-
loadingNodes
305-
.add(_loadIncludes(includedObject, paths: paths[key]));
306-
continue;
307-
}
308-
} else {
272+
ParseObject? keyInOld = oldObject?.get<ParseObject>(key);
273+
if (keyInOld != null) {
274+
//If the object is not fetched || the ids don't match / the pointer changed
275+
if (!keyInOld.containsKey(keyVarUpdatedAt) ||
276+
includedObject.objectId != keyInOld.objectId) {
309277
//fetch from web including sub objects
310-
//same as up there
278+
//same as down there
311279
final QueryBuilder<ParseObject> queryBuilder = QueryBuilder<
312280
ParseObject>(ParseObject(includedObject.parseClassName))
313281
..whereEqualTo(keyVarObjectId, includedObject.objectId)
@@ -319,12 +287,36 @@ class ParseLiveList<T extends ParseObject> {
319287
if (parseResponse.success &&
320288
results != null &&
321289
results.length == 1) {
322-
// ignore: deprecated_member_use_from_same_package
323290
object[key] = results[0];
324291
}
325292
}));
326293
continue;
294+
} else {
295+
includedObject = keyInOld;
296+
object[key] = includedObject;
297+
//recursion
298+
loadingNodes
299+
.add(_loadIncludes(includedObject, paths: paths[key]));
300+
continue;
327301
}
302+
} else {
303+
//fetch from web including sub objects
304+
//same as up there
305+
final QueryBuilder<ParseObject> queryBuilder = QueryBuilder<
306+
ParseObject>(ParseObject(includedObject.parseClassName))
307+
..whereEqualTo(keyVarObjectId, includedObject.objectId)
308+
..includeObject(_toIncludeStringList(paths[key]));
309+
loadingNodes.add(queryBuilder
310+
.query()
311+
.then<void>((ParseResponse parseResponse) {
312+
List<dynamic>? results = parseResponse.results;
313+
if (parseResponse.success &&
314+
results != null &&
315+
results.length == 1) {
316+
object[key] = results[0];
317+
}
318+
}));
319+
continue;
328320
}
329321
}
330322
} else {

0 commit comments

Comments
 (0)