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 createState() => _ConversationScreenState(); } class _ConversationScreenState extends State { 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 _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: [ 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, ); } }