Update timeline "refresh" to reset the timeline, after prompting for confirmation.

merge-requests/67/merge
Hank Grabowski 2023-11-27 09:39:38 -05:00
rodzic 251f408c98
commit b13b66ec48
3 zmienionych plików z 20 dodań i 18 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:relatica/globals.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../models/TimelineIdentifiers.dart'; import '../../models/TimelineIdentifiers.dart';
@ -15,16 +16,15 @@ class TimelinePanel extends StatelessWidget {
TimelinePanel({super.key, required this.timeline}); TimelinePanel({super.key, required this.timeline});
Future<void> update(TimelineManager manager) async { Future<void> update(BuildContext context, TimelineManager manager) async {
final confirm =
await showYesNoDialog(context, 'Reload timeline from scratch?');
if (confirm == true) {
await manager.updateTimeline( await manager.updateTimeline(
timeline, timeline,
TimelineRefreshType.refresh, TimelineRefreshType.refresh,
); );
}
await manager.updateTimeline(
timeline,
TimelineRefreshType.loadNewer,
);
} }
void scrollToTop() { void scrollToTop() {
@ -41,7 +41,7 @@ class TimelinePanel extends StatelessWidget {
final items = manager.getTimeline(timeline); final items = manager.getTimeline(timeline);
return RefreshIndicator( return RefreshIndicator(
onRefresh: () async { onRefresh: () async {
update(manager); update(context, manager);
return; return;
}, },
child: items.isEmpty child: items.isEmpty

Wyświetl plik

@ -1,12 +1,15 @@
import 'TimelineIdentifiers.dart'; import 'TimelineIdentifiers.dart';
import 'entry_tree_item.dart'; import 'entry_tree_item.dart';
const defaultLowestId = 9223372036854775807;
const defaultHighestId = 0;
class Timeline { class Timeline {
final TimelineIdentifiers id; final TimelineIdentifiers id;
final List<EntryTreeItem> _posts = []; final List<EntryTreeItem> _posts = [];
final Map<String, EntryTreeItem> _postsById = {}; final Map<String, EntryTreeItem> _postsById = {};
int _lowestStatusId = 9223372036854775807; int _lowestStatusId = defaultLowestId;
int _highestStatusId = 0; int _highestStatusId = defaultHighestId;
int get highestStatusId => _highestStatusId; int get highestStatusId => _highestStatusId;
@ -72,8 +75,8 @@ class Timeline {
void clear() { void clear() {
_posts.clear(); _posts.clear();
_postsById.clear(); _postsById.clear();
_lowestStatusId = 0; _lowestStatusId = defaultLowestId;
_highestStatusId = 0; _highestStatusId = defaultHighestId;
} }
@override @override

Wyświetl plik

@ -192,9 +192,8 @@ class TimelineManager extends ChangeNotifier {
late final int highestId; late final int highestId;
switch (refreshType) { switch (refreshType) {
case TimelineRefreshType.refresh: case TimelineRefreshType.refresh:
lowestId = timeline.highestStatusId == 0 timeline.clear();
? timeline.highestStatusId lowestId = 0;
: timeline.highestStatusId + 1;
highestId = 0; highestId = 0;
break; break;
case TimelineRefreshType.loadOlder: case TimelineRefreshType.loadOlder: