1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-28 13:58:51 +00:00
comunicmobile/lib/ui/screens/conversations_screen.dart

97 lines
2.7 KiB
Dart

import 'package:comunic/enums/load_error_level.dart';
import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/lists/conversations_list.dart';
import 'package:comunic/ui/tiles/conversation_tile.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';
/// Conversations screen
///
/// @author Pierre HUBERT
class ConversationsScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => _ConversationScreenState();
}
class _ConversationScreenState extends State<ConversationsScreen> {
final ConversationsHelper _conversationsHelper = ConversationsHelper();
final UsersHelper _usersHelper = UsersHelper();
ConversationsList _list;
LoadErrorLevel _error = LoadErrorLevel.NONE;
bool _loading = true;
@override
void didChangeDependencies() {
super.didChangeDependencies();
_loadConversations();
}
void setError(LoadErrorLevel err) => setState(() => _error = err);
void setLoading(bool loading) => setState(() => _loading = loading);
void _gotLoadingError() {
setLoading(false);
setError(_list == null ? LoadErrorLevel.MAJOR : LoadErrorLevel.MINOR);
}
/// Load the list of conversations
Future<void> _loadConversations() async {
setError(LoadErrorLevel.NONE);
setLoading(true);
//Process the list of conversations
final list = await _conversationsHelper.downloadList();
if (list == null) return _gotLoadingError();
//Get information about the members of the conversations
list.users = await _usersHelper.downloadInfo(list.allUsersID);
if(list.users == null) return _gotLoadingError();
//Save list
setState(() {
_list = list;
});
setLoading(false);
}
/// Build an error card
Widget _buildErrorCard() {
return buildErrorCard(
tr("Could not retrieve the list of conversations!"),
actions: <Widget>[
FlatButton(
onPressed: _loadConversations,
child: Text(
tr("Retry").toUpperCase(),
style: TextStyle(
color: Colors.white,
),
),
)
],
);
}
@override
Widget build(BuildContext context) {
if (_error == LoadErrorLevel.MAJOR) return _buildErrorCard();
if (_list == null) return buildCenteredProgressBar();
// Show the list of conversations
return ListView.builder(
itemBuilder: (context, index) {
return ConversationTile(
conversation: _list.elementAt(index),
usersList: _list.users,
);
},
itemCount: _list.length,
);
}
}