kopia lustrzana https://gitlab.com/mysocialportal/relatica
Update timeline "refresh" to reset the timeline, after prompting for confirmation.
rodzic
251f408c98
commit
b13b66ec48
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Ładowanie…
Reference in New Issue