1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 08:15:16 +00:00

Get conversation message

This commit is contained in:
2019-04-25 08:56:16 +02:00
parent 1ec197202c
commit e2202a4794
8 changed files with 245 additions and 14 deletions

View File

@ -1,5 +1,6 @@
import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/models/conversation.dart';
import 'package:comunic/ui/screens/conversation_screen.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';
@ -38,16 +39,14 @@ class _ConversationRouteState extends State<ConversationRoute> {
Future<void> _loadConversation() async {
setError(false);
_conversation =
await _conversationsHelper.getSingle(widget.conversationID);
_conversation = await _conversationsHelper.getSingle(widget.conversationID);
if (_conversation == null) return setError(true);
final conversationName =
await ConversationsHelper.getConversationNameAsync(_conversation);
if(conversationName == null)
return setError(true);
if (conversationName == null) return setError(true);
setState(() {
_conversationName = conversationName;
@ -72,8 +71,12 @@ class _ConversationRouteState extends State<ConversationRoute> {
],
);
//if (_conversationName == null || _conversation == null)
if (_conversationName == null || _conversation == null)
return buildCenteredProgressBar();
return ConversationScreen(
conversationID: widget.conversationID,
);
}
@override

View File

@ -0,0 +1,94 @@
import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/lists/conversation_messages_list.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/ui/tiles/conversation_message_tile.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/list_utils.dart';
import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart';
/// Conversation screen
///
/// @author Pierre HUBERT
enum ErrorLevel { NONE, MINOR, MAJOR }
class ConversationScreen extends StatefulWidget {
final int conversationID;
const ConversationScreen({Key key, this.conversationID})
: assert(conversationID != null),
super(key: key);
@override
State<StatefulWidget> createState() => _ConversationScreenState();
}
class _ConversationScreenState extends State<ConversationScreen> {
final ConversationsHelper _conversationsHelper = ConversationsHelper();
final UsersHelper _usersHelper = UsersHelper();
ConversationMessagesList _messages;
UsersList _usersInfo = UsersList();
ErrorLevel _error = ErrorLevel.NONE;
@override
void didChangeDependencies() {
super.didChangeDependencies();
_loadMessages();
}
void _setError(ErrorLevel err) => setState(() => _error = err);
/// Method called when an error occurred while loading messages
void _errorLoading() {
_setError(_messages == null ? ErrorLevel.MAJOR : ErrorLevel.MINOR);
}
/// Load a list of messages
Future<void> _loadMessages() async {
//First, get the messages
final messages = await _conversationsHelper
.downloadNewMessagesSingle(widget.conversationID);
if (messages == null) return _errorLoading();
//Then get information about users
final usersToGet =
findMissingFromList(_usersInfo.usersID, messages.getUsersID());
final users = await _usersHelper.getUsersInfo(usersToGet);
if (users == null) _errorLoading();
// Save the new list of messages
setState(() {
_usersInfo.addAll(users);
if (_messages == null)
_messages = messages;
else
_messages.addAll(messages);
});
}
/// Error handling
Widget _buildError() {
return buildErrorCard(tr("Could not load the list of messages!"));
}
@override
Widget build(BuildContext context) {
if (_error == ErrorLevel.MAJOR) return _buildError();
if (_messages == null) return buildCenteredProgressBar();
return ListView.builder(
itemCount: _messages.length,
itemBuilder: (c, i) {
return ConversationMessageTile(
message: _messages.elementAt(i),
userInfo: _usersInfo.getUser(_messages[i].userID),
);
});
}
}

View File

@ -0,0 +1,22 @@
import 'package:comunic/models/conversation_message.dart';
import 'package:comunic/models/user.dart';
import 'package:flutter/material.dart';
/// Conversation message tile
///
/// @author Pierre HUBERT
class ConversationMessageTile extends StatelessWidget {
final ConversationMessage message;
final User userInfo;
const ConversationMessageTile({Key key, this.message, this.userInfo})
: assert(message != null),
assert(userInfo != null),
super(key: key);
@override
Widget build(BuildContext context) {
return Text(message.message);
}
}