mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 08:15:16 +00:00
Get conversation message
This commit is contained in:
@ -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
|
||||
|
94
lib/ui/screens/conversation_screen.dart
Normal file
94
lib/ui/screens/conversation_screen.dart
Normal 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),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
22
lib/ui/tiles/conversation_message_tile.dart
Normal file
22
lib/ui/tiles/conversation_message_tile.dart
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user