diff --git a/lib/models/timeline.dart b/lib/models/timeline.dart index 6e83239..363fda4 100644 --- a/lib/models/timeline.dart +++ b/lib/models/timeline.dart @@ -13,7 +13,9 @@ class TimelineModel extends PropertyChangeNotifier { TimelineModel({ required final List memories, - }) : _timeline = mapFromMemoriesList(memories); + final int initialndex = 0, + }) : _timeline = mapFromMemoriesList(memories), + _currentIndex = initialndex; RealtimeSubscription? _serverSubscription; diff --git a/lib/screens/timeline_screen.dart b/lib/screens/timeline_screen.dart index 66a3412..d352e76 100644 --- a/lib/screens/timeline_screen.dart +++ b/lib/screens/timeline_screen.dart @@ -28,21 +28,8 @@ class TimelineScreen extends StatefulWidget { } class _TimelineScreenState extends State with Loadable { - final pageController = PageController(); + late final pageController; late final TimelineModel timeline; - bool _ignorePageChanges = false; - - Future _goToPage(final int page) async { - _ignorePageChanges = true; - - await pageController.animateToPage( - page, - duration: const Duration(milliseconds: 300), - curve: Curves.easeOutQuad, - ); - - _ignorePageChanges = false; - } @override initState() { @@ -50,7 +37,15 @@ class _TimelineScreenState extends State with Loadable { final memoriesModel = context.read(); - timeline = TimelineModel(memories: memoriesModel.memories); + timeline = TimelineModel( + memories: memoriesModel.memories, + ); + final initialIndex = getIndexFromDate(); + pageController = PageController( + initialPage: initialIndex, + ); + + timeline.setCurrentIndex(initialIndex); memoriesModel.addListener(() { timeline.refresh(memoriesModel.memories); @@ -59,17 +54,13 @@ class _TimelineScreenState extends State with Loadable { // Update page view timeline.addListener(() async { if (timeline.currentIndex != pageController.page) { - _goToPage(timeline.currentIndex); + await pageController.animateToPage( + timeline.currentIndex, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOutQuad, + ); } }, ['currentIndex']); - - WidgetsBinding.instance.addPostFrameCallback((_) async { - final initialIndex = getIndexFromDate(); - - await _goToPage(initialIndex); - - timeline.setCurrentIndex(initialIndex); - }); } @override @@ -109,10 +100,6 @@ class _TimelineScreenState extends State with Loadable { scrollDirection: Axis.vertical, itemCount: timeline.values.length, onPageChanged: (newPage) { - if (_ignorePageChanges) { - return; - } - if (timeline.currentIndex != newPage) { // User manually changed page timeline.setCurrentIndex(newPage);