mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-10-31 10:14:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			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,
 | |
|     );
 | |
|   }
 | |
| }
 |