@@ -444,6 +444,70 @@ class ParseLiveList<T extends ParseObject> {
444
444
}
445
445
}
446
446
447
+ class ParseLiveElement <T extends ParseObject > extends ParseLiveListElement <T > {
448
+ ParseLiveElement (T object, {bool loaded = false , List <String > includeObject})
449
+ : super (object,
450
+ loaded: loaded,
451
+ updatedSubItems:
452
+ ParseLiveList ._toIncludeMap (includeObject ?? < String > [])) {
453
+ _includes = ParseLiveList ._toIncludeMap (includeObject ?? < String > []);
454
+ queryBuilder = QueryBuilder <T >(object.clone (null ))
455
+ ..includeObject (includeObject)
456
+ ..whereEqualTo (keyVarObjectId, object.objectId);
457
+ _init (object, loaded: loaded, includeObject: includeObject);
458
+ }
459
+
460
+ Subscription <T > _subscription;
461
+ Map <String , dynamic > _includes;
462
+ QueryBuilder <T > queryBuilder;
463
+
464
+ Future <void > _init (T object,
465
+ {bool loaded = false , List <String > includeObject}) async {
466
+ if (! loaded) {
467
+ final ParseResponse parseResponse = await queryBuilder.query ();
468
+ if (parseResponse.success) {
469
+ super .object = parseResponse.result.first;
470
+ }
471
+ }
472
+
473
+ _subscription = await LiveQuery ().client.subscribe <T >(
474
+ QueryBuilder <T >.copy (queryBuilder),
475
+ copyObject: object.clone (null ));
476
+
477
+ _subscription.on (LiveQueryEvent .update, (T newObject) async {
478
+ await ParseLiveList ._loadIncludes (newObject,
479
+ oldObject: super .object, paths: _includes);
480
+ super .object = newObject;
481
+ });
482
+
483
+ LiveQuery ()
484
+ .client
485
+ .getClientEventStream
486
+ .listen ((LiveQueryClientEvent event) {
487
+ _subscriptionQueue.whenComplete (() async {
488
+ // ignore: missing_enum_constant_in_switch
489
+ switch (event) {
490
+ case LiveQueryClientEvent .CONNECTED :
491
+ final ParseResponse parseResponse = await queryBuilder.query ();
492
+ if (parseResponse.success) {
493
+ super .object = parseResponse.result.first;
494
+ }
495
+ break ;
496
+ }
497
+ });
498
+ });
499
+ }
500
+
501
+ @override
502
+ void dispose () {
503
+ if (_subscription != null ) {
504
+ LiveQuery ().client.unSubscribe (_subscription);
505
+ _subscription = null ;
506
+ }
507
+ super .dispose ();
508
+ }
509
+ }
510
+
447
511
class ParseLiveListElement <T extends ParseObject > {
448
512
ParseLiveListElement (this ._object,
449
513
{bool loaded = false , Map <String , dynamic > updatedSubItems}) {
0 commit comments