mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-12-27 21:38:51 +00:00
126 lines
3.4 KiB
Dart
126 lines
3.4 KiB
Dart
import 'package:comunic/helpers/conversations_helper.dart';
|
|
import 'package:comunic/models/conversation.dart';
|
|
import 'package:comunic/ui/routes/main_route.dart';
|
|
import 'package:comunic/ui/routes/update_conversation_route.dart';
|
|
import 'package:comunic/ui/screens/conversation_screen.dart';
|
|
import 'package:comunic/ui/widgets/comunic_back_button_widget.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<StatefulWidget> createState() => _ConversationRouteState();
|
|
}
|
|
|
|
class _ConversationRouteState extends State<ConversationRoute> {
|
|
final ConversationsHelper _conversationsHelper = ConversationsHelper();
|
|
Conversation _conversation;
|
|
String _conversationName;
|
|
bool _error = false;
|
|
|
|
setError(bool err) => setState(() => _error = err);
|
|
|
|
@override
|
|
void didChangeDependencies() {
|
|
super.didChangeDependencies();
|
|
_loadConversation();
|
|
}
|
|
|
|
Future<void> _loadConversation() async {
|
|
setError(false);
|
|
|
|
_conversation = await _conversationsHelper.getSingle(widget.conversationID,
|
|
force: true);
|
|
|
|
if (_conversation == null) return setError(true);
|
|
|
|
final conversationName =
|
|
await ConversationsHelper.getConversationNameAsync(_conversation);
|
|
|
|
if (!this.mounted) return null;
|
|
|
|
if (conversationName == null) return setError(true);
|
|
|
|
setState(() {
|
|
_conversationName = conversationName;
|
|
});
|
|
}
|
|
|
|
void _openSettings() {
|
|
MainController.of(context).push(
|
|
UpdateConversationRoute(
|
|
conversationID: widget.conversationID,
|
|
),
|
|
hideNavBar: true);
|
|
}
|
|
|
|
Widget _buildRouteBody() {
|
|
//Handle errors
|
|
if (_error != null && _error)
|
|
return buildErrorCard(
|
|
tr("Could not get conversation information!"),
|
|
actions: <Widget>[
|
|
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(
|
|
leading: ComunicBackButton(),
|
|
title: Text(
|
|
_conversationName == null ? tr("Loading") : _conversationName,
|
|
),
|
|
actions: <Widget>[
|
|
// Start call (if possible)
|
|
_conversation == null ||
|
|
_conversation.callCapabilities == CallCapabilities.NONE
|
|
? Container()
|
|
: IconButton(
|
|
icon: Icon(Icons.phone),
|
|
onPressed: () => MainController.of(context)
|
|
.startCall(widget.conversationID),
|
|
),
|
|
|
|
// Edit conversation settings
|
|
IconButton(
|
|
icon: Icon(Icons.settings),
|
|
onPressed: _openSettings,
|
|
)
|
|
],
|
|
),
|
|
body: _buildRouteBody(),
|
|
);
|
|
}
|
|
}
|