mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Can get older posts on latest posts page
This commit is contained in:
		@@ -39,12 +39,13 @@ const _APIUserAccessMap = {
 | 
				
			|||||||
class PostsHelper {
 | 
					class PostsHelper {
 | 
				
			||||||
  /// Get the list of latest posts. Return the list of posts or null in case of
 | 
					  /// Get the list of latest posts. Return the list of posts or null in case of
 | 
				
			||||||
  /// failure
 | 
					  /// failure
 | 
				
			||||||
  Future<PostsList> getLatest() async {
 | 
					  Future<PostsList> getLatest({int from = 0}) async {
 | 
				
			||||||
    final response = await APIRequest(
 | 
					    final response = await APIRequest(
 | 
				
			||||||
      uri: "posts/get_latest",
 | 
					      uri: "posts/get_latest",
 | 
				
			||||||
      needLogin: true,
 | 
					      needLogin: true,
 | 
				
			||||||
      args: {
 | 
					      args: {
 | 
				
			||||||
        "include_groups": true.toString()
 | 
					        "include_groups": true.toString(),
 | 
				
			||||||
 | 
					        "startFrom": from.toString(),
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ).exec();
 | 
					    ).exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,4 +46,12 @@ class PostsList extends ListBase<Post> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return set;
 | 
					    return set;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Get the ID of the oldest post of this list. Returns 0 if the list is empty
 | 
				
			||||||
 | 
					  int get oldestID {
 | 
				
			||||||
 | 
					    if(isEmpty)
 | 
				
			||||||
 | 
					      return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return this.elementAt(length - 1).id;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ class _NewestPostsScreenState extends State<NewestPostsScreen> {
 | 
				
			|||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return PostsListWidget(
 | 
					    return PostsListWidget(
 | 
				
			||||||
      getPostsList: _postsHelper.getLatest,
 | 
					      getPostsList: _postsHelper.getLatest,
 | 
				
			||||||
 | 
					      getOlder: (f) => _postsHelper.getLatest(from: f - 1),
 | 
				
			||||||
      showPostsTarget: true,
 | 
					      showPostsTarget: true,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ import 'package:comunic/lists/users_list.dart';
 | 
				
			|||||||
import 'package:comunic/models/post.dart';
 | 
					import 'package:comunic/models/post.dart';
 | 
				
			||||||
import 'package:comunic/ui/screens/conversation_screen.dart';
 | 
					import 'package:comunic/ui/screens/conversation_screen.dart';
 | 
				
			||||||
import 'package:comunic/ui/tiles/post_tile.dart';
 | 
					import 'package:comunic/ui/tiles/post_tile.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/scroll_watcher.dart';
 | 
				
			||||||
import 'package:comunic/utils/intl_utils.dart';
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
import 'package:comunic/utils/ui_utils.dart';
 | 
					import 'package:comunic/utils/ui_utils.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
@@ -18,6 +19,7 @@ import 'package:flutter/material.dart';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class PostsListWidget extends StatefulWidget {
 | 
					class PostsListWidget extends StatefulWidget {
 | 
				
			||||||
  final Future<PostsList> Function() getPostsList;
 | 
					  final Future<PostsList> Function() getPostsList;
 | 
				
			||||||
 | 
					  final Future<PostsList> Function(int from) getOlder;
 | 
				
			||||||
  final bool showPostsTarget;
 | 
					  final bool showPostsTarget;
 | 
				
			||||||
  final bool buildListView;
 | 
					  final bool buildListView;
 | 
				
			||||||
  final bool userNamesClickable;
 | 
					  final bool userNamesClickable;
 | 
				
			||||||
@@ -28,6 +30,7 @@ class PostsListWidget extends StatefulWidget {
 | 
				
			|||||||
    @required this.showPostsTarget,
 | 
					    @required this.showPostsTarget,
 | 
				
			||||||
    this.userNamesClickable = true,
 | 
					    this.userNamesClickable = true,
 | 
				
			||||||
    this.buildListView = true,
 | 
					    this.buildListView = true,
 | 
				
			||||||
 | 
					    this.getOlder,
 | 
				
			||||||
  })  : assert(getPostsList != null),
 | 
					  })  : assert(getPostsList != null),
 | 
				
			||||||
        assert(showPostsTarget != null),
 | 
					        assert(showPostsTarget != null),
 | 
				
			||||||
        assert(buildListView != null),
 | 
					        assert(buildListView != null),
 | 
				
			||||||
@@ -47,10 +50,17 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
  PostsList _list;
 | 
					  PostsList _list;
 | 
				
			||||||
  UsersList _users;
 | 
					  UsersList _users;
 | 
				
			||||||
  GroupsList _groups;
 | 
					  GroupsList _groups;
 | 
				
			||||||
 | 
					  ScrollWatcher _scrollController;
 | 
				
			||||||
 | 
					  ErrorLevel _error = ErrorLevel.NONE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  set error(ErrorLevel err) => setState(() => _error = err);
 | 
					  set error(ErrorLevel err) => setState(() => _error = err);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ErrorLevel _error = ErrorLevel.NONE;
 | 
					  @override
 | 
				
			||||||
 | 
					  void initState() {
 | 
				
			||||||
 | 
					    super.initState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _scrollController = ScrollWatcher(onReachBottom: _reachedPostsBottom);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void didChangeDependencies() {
 | 
					  void didChangeDependencies() {
 | 
				
			||||||
@@ -62,8 +72,10 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
      error = _list == null ? ErrorLevel.MAJOR : ErrorLevel.MINOR;
 | 
					      error = _list == null ? ErrorLevel.MAJOR : ErrorLevel.MINOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Load the list of posts
 | 
					  /// Load the list of posts
 | 
				
			||||||
  Future<void> _loadPostsList() async {
 | 
					  Future<void> _loadPostsList({bool getOlder = false}) async {
 | 
				
			||||||
    final list = await widget.getPostsList();
 | 
					    final list = !getOlder
 | 
				
			||||||
 | 
					        ? await widget.getPostsList()
 | 
				
			||||||
 | 
					        : await widget.getOlder(_list.oldestID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (list == null) return _loadError();
 | 
					    if (list == null) return _loadError();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,9 +88,15 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
    if (groups == null) return _loadError();
 | 
					    if (groups == null) return _loadError();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setState(() {
 | 
					    setState(() {
 | 
				
			||||||
      _list = list;
 | 
					      if (!getOlder) {
 | 
				
			||||||
      _users = users;
 | 
					        _list = list;
 | 
				
			||||||
      _groups = groups;
 | 
					        _users = users;
 | 
				
			||||||
 | 
					        _groups = groups;
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        _list.addAll(list);
 | 
				
			||||||
 | 
					        _users.addAll(users);
 | 
				
			||||||
 | 
					        _groups.addAll(groups);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -99,6 +117,7 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
    return ListView.builder(
 | 
					    return ListView.builder(
 | 
				
			||||||
      itemCount: _list.length,
 | 
					      itemCount: _list.length,
 | 
				
			||||||
      itemBuilder: _buildItem,
 | 
					      itemBuilder: _buildItem,
 | 
				
			||||||
 | 
					      controller: _scrollController,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,4 +150,8 @@ class _PostsListWidgetState extends State<PostsListWidget> {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _removePost(Post post) => setState(() => _list.remove(post));
 | 
					  void _removePost(Post post) => setState(() => _list.remove(post));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void _reachedPostsBottom() {
 | 
				
			||||||
 | 
					    if (widget.getOlder != null) _loadPostsList(getOlder: true);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user