1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-10-23 15:03:22 +00:00
comunicmobile/lib/ui/widgets/posts_list_widget.dart

105 lines
2.7 KiB
Dart
Raw Normal View History

2019-06-10 07:47:02 +00:00
import 'package:comunic/helpers/groups_helper.dart';
2019-05-11 13:35:07 +00:00
import 'package:comunic/helpers/users_helper.dart';
2019-06-10 07:47:02 +00:00
import 'package:comunic/lists/groups_list.dart';
2019-05-11 13:35:07 +00:00
import 'package:comunic/lists/posts_list.dart';
import 'package:comunic/lists/users_list.dart';
2019-05-19 12:54:09 +00:00
import 'package:comunic/models/post.dart';
2019-05-11 13:35:07 +00:00
import 'package:comunic/ui/screens/conversation_screen.dart';
import 'package:comunic/ui/tiles/post_tile.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';
/// Posts list widget
///
/// Displays a list of posts
///
/// @author Pierre HUBERT
class PostsListWidget extends StatefulWidget {
final Future<PostsList> Function() getPostsList;
2019-05-23 16:37:56 +00:00
final bool showPostsTarget;
2019-05-11 13:35:07 +00:00
const PostsListWidget({
Key key,
@required this.getPostsList,
2019-05-23 16:37:56 +00:00
@required this.showPostsTarget,
2019-05-11 13:35:07 +00:00
}) : assert(getPostsList != null),
2019-05-23 16:37:56 +00:00
assert(showPostsTarget != null),
2019-05-11 13:35:07 +00:00
super(key: key);
@override
State<StatefulWidget> createState() => _PostsListWidgetState();
}
class _PostsListWidgetState extends State<PostsListWidget> {
// Helpers
final UsersHelper _usersHelper = UsersHelper();
2019-06-10 07:47:02 +00:00
final GroupsHelper _groupsHelper = GroupsHelper();
2019-05-11 13:35:07 +00:00
// Class members
PostsList _list;
UsersList _users;
2019-06-10 07:47:02 +00:00
GroupsList _groups;
2019-05-11 13:35:07 +00:00
set error(ErrorLevel err) => setState(() => _error = err);
ErrorLevel _error = ErrorLevel.NONE;
@override
void didChangeDependencies() {
super.didChangeDependencies();
_loadPostsList();
}
void _loadError() =>
error = _list == null ? ErrorLevel.MAJOR : ErrorLevel.MINOR;
/// Load the list of posts
Future<void> _loadPostsList() async {
final list = await widget.getPostsList();
if (list == null) return _loadError();
final users = await _usersHelper.getList(list.usersID);
if (users == null) return _loadError();
2019-06-10 07:47:02 +00:00
final groups = await _groupsHelper.getList(list.groupsID);
if(groups == null) return _loadError();
2019-05-11 13:35:07 +00:00
setState(() {
_list = list;
_users = users;
2019-06-10 07:47:02 +00:00
_groups = groups;
2019-05-11 13:35:07 +00:00
});
}
Widget _buildErrorCard() {
return buildErrorCard(tr("Could not get the list of posts !"));
}
Widget _buildListView() {
return ListView.builder(
itemCount: _list.length,
itemBuilder: (c, i) => PostTile(
post: _list[i],
usersInfo: _users,
2019-06-10 07:47:02 +00:00
groupsInfo: _groups,
2019-05-19 12:54:09 +00:00
onDeletedPost: _removePost,
2019-05-23 16:37:56 +00:00
showPostTarget: widget.showPostsTarget,
2019-05-11 13:35:07 +00:00
),
);
}
@override
Widget build(BuildContext context) {
if (_error == ErrorLevel.MAJOR) return _buildErrorCard();
if (_list == null) return buildCenteredProgressBar();
return _buildListView();
}
2019-05-19 12:54:09 +00:00
void _removePost(Post post) => setState(() => _list.remove(post));
2019-05-11 13:35:07 +00:00
}