From 9b488417992c32e9978088b247c8f596c4bce196 Mon Sep 17 00:00:00 2001 From: LeoLox <58687994+leo-lox@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:45:34 +0100 Subject: [PATCH] fix event feed state obj --- .../repositories/note_repository_impl.dart | 5 +- lib/domain_layer/usecases/event_feed.dart | 4 +- .../providers/event_feed_provider.dart | 66 ++++++++++--------- .../nostr/event_view/event_view_page.dart | 2 + 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/lib/data_layer/repositories/note_repository_impl.dart b/lib/data_layer/repositories/note_repository_impl.dart index aedb51ef..9fa51f25 100644 --- a/lib/data_layer/repositories/note_repository_impl.dart +++ b/lib/data_layer/repositories/note_repository_impl.dart @@ -127,8 +127,9 @@ class NoteRepositoryImpl implements NoteRepository { final response = dartNdkSource.dartNdk.requests.subscription( filters: [filter], name: requestId, - cacheRead: true, - cacheWrite: true, + //todo: bug in the NDK when using cacheRead and subscription + // cacheRead: true, + // cacheWrite: true, ); return response.stream.map( diff --git a/lib/domain_layer/usecases/event_feed.dart b/lib/domain_layer/usecases/event_feed.dart index 72ac16e9..43e4e129 100644 --- a/lib/domain_layer/usecases/event_feed.dart +++ b/lib/domain_layer/usecases/event_feed.dart @@ -7,11 +7,9 @@ import 'package:rxdart/rxdart.dart'; import '../entities/nostr_note.dart'; import '../entities/tree_node.dart'; import '../repositories/note_repository.dart'; -import 'follow.dart'; class EventFeed { final NoteRepository _noteRepository; - final Follow _follow; final String repliesFetchId = "replies-${Helpers().getRandomString(5)}"; @@ -31,7 +29,7 @@ class EventFeed { StreamController(); Stream get rootNoteStream => _rootNoteController.stream; - EventFeed(this._noteRepository, this._follow); + EventFeed(this._noteRepository); Future subscribeToReplyNotes({ required String rootNoteId, diff --git a/lib/presentation_layer/providers/event_feed_provider.dart b/lib/presentation_layer/providers/event_feed_provider.dart index 02963f13..abeeeb95 100644 --- a/lib/presentation_layer/providers/event_feed_provider.dart +++ b/lib/presentation_layer/providers/event_feed_provider.dart @@ -7,44 +7,42 @@ import '../../data_layer/repositories/note_repository_impl.dart'; import '../../domain_layer/entities/feed_event_view_model.dart'; import '../../domain_layer/repositories/note_repository.dart'; import '../../domain_layer/usecases/event_feed.dart'; -import '../../domain_layer/usecases/follow.dart'; import 'event_verifier.dart'; -import 'following_provider.dart'; import 'ndk_provider.dart'; -final eventFeedProvider = Provider((ref) { - final ndk = ref.watch(ndkProvider); +//NotifierProvider - final eventVerifier = ref.watch(eventVerifierProvider); +/// [String] is root event id +final eventFeedStateProvider = NotifierProvider.autoDispose + .family( + EventFeedState.new, +); - final DartNdkSource dartNdkSource = DartNdkSource(ndk); +class EventFeedState + extends AutoDisposeFamilyNotifier { + StreamSubscription? _rootNoteSub; + StreamSubscription? _commentNotesSub; - final NoteRepository noteRepository = NoteRepositoryImpl( - dartNdkSource: dartNdkSource, - eventVerifier: eventVerifier, - ); + late EventFeed myEventFeed; - final Follow followProvider = ref.watch(followingProvider); + _setupEventFeed() { + final ndk = ref.watch(ndkProvider); - final EventFeed eventFeed = EventFeed(noteRepository, followProvider); + final eventVerifier = ref.watch(eventVerifierProvider); - return eventFeed; -}); + final DartNdkSource dartNdkSource = DartNdkSource(ndk); -/// [String] is root event id -final eventFeedStateProvider = - NotifierProvider.family( - EventFeedState.new, -); + final NoteRepository noteRepository = NoteRepositoryImpl( + dartNdkSource: dartNdkSource, + eventVerifier: eventVerifier, + ); -class EventFeedState extends FamilyNotifier { - StreamSubscription? _rootNoteSub; - StreamSubscription? _commentNotesSub; + myEventFeed = EventFeed(noteRepository); + } /// closes everthing and resets the state Future resetStateDispose() async { - final eventFeed = ref.read(eventFeedProvider); state = FeedEventViewModel( comments: [], rootNote: null, @@ -52,13 +50,20 @@ class EventFeedState extends FamilyNotifier { _commentNotesSub?.cancel(); _rootNoteSub?.cancel(); - await eventFeed.dispose(); + _rootNoteSub = null; + _commentNotesSub = null; + await myEventFeed.dispose(); } @override FeedEventViewModel build(String arg) { - _initialFetch(arg); + ref.onDispose(() { + resetStateDispose(); + }); + _setupEventFeed(); _initSubscriptions(); + _initialFetch(arg); + return FeedEventViewModel( comments: [], rootNote: null, @@ -66,26 +71,23 @@ class EventFeedState extends FamilyNotifier { } _initialFetch(String rootNoteId) { - final eventFeed = ref.read(eventFeedProvider); - eventFeed.subscribeToRootNote( + myEventFeed.subscribeToRootNote( noteId: rootNoteId, ); - eventFeed.subscribeToReplyNotes( + myEventFeed.subscribeToReplyNotes( rootNoteId: rootNoteId, ); } void _initSubscriptions() async { - final eventFeed = ref.read(eventFeedProvider); - // Root note subscription - _rootNoteSub = eventFeed.rootNoteStream.listen((event) { + _rootNoteSub = myEventFeed.rootNoteStream.listen((event) { state = state.copyWith(rootNote: event); }); // Comment notes subscription - _commentNotesSub = eventFeed.repliesTreeStream.listen((tree) { + _commentNotesSub = myEventFeed.repliesTreeStream.listen((tree) { state = state.copyWith(comments: tree); }); } diff --git a/lib/presentation_layer/routes/nostr/event_view/event_view_page.dart b/lib/presentation_layer/routes/nostr/event_view/event_view_page.dart index a368143d..ab6437ec 100644 --- a/lib/presentation_layer/routes/nostr/event_view/event_view_page.dart +++ b/lib/presentation_layer/routes/nostr/event_view/event_view_page.dart @@ -72,6 +72,8 @@ class _EventViewPageState extends ConsumerState { @override void dispose() { + _scrollControllerFeed.dispose(); + super.dispose(); }