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'; /// Single conversation route /// /// @author Pierre HUBERT class ConversationRoute extends StatefulWidget { final int conversationID; const ConversationRoute({ Key key, @required this.conversationID, }) : assert(conversationID != null), super(key: key); @override State createState() => _ConversationRouteState(); } class _ConversationRouteState extends State { final ConversationsHelper _conversationsHelper = ConversationsHelper(); Conversation _conversation; String _conversationName; bool _error = false; setError(bool err) => setState(() => _error = err); @override void didChangeDependencies() { super.didChangeDependencies(); _loadConversation(); } Future _loadConversation() async { setError(false); _conversation = await _conversationsHelper.getSingle(widget.conversationID); if (_conversation == null) return setError(true); final conversationName = await ConversationsHelper.getConversationNameAsync(_conversation); if (conversationName == null) return setError(true); setState(() { _conversationName = conversationName; }); } Widget _buildRouteBody() { //Handle errors if (_error != null && _error) return buildErrorCard( tr("Could not get conversation information!"), actions: [ FlatButton( onPressed: _loadConversation, child: Text( tr("Try again").toUpperCase(), style: TextStyle( color: Colors.white, ), ), ), ], ); if (_conversationName == null || _conversation == null) return buildCenteredProgressBar(); return ConversationScreen( conversationID: widget.conversationID, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( _conversationName == null ? tr("Loading") : _conversationName, ), ), body: _buildRouteBody(), ); } }