Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.6 KiB

import 'package:Envelope/database/repositories/conversations_repository.dart';
import 'package:flutter/material.dart';
import '/components/custom_circle_avatar.dart';
import '/components/flash_message.dart';
import '/database/models/conversations.dart';
import '/database/models/friends.dart';
import '/services/conversations_service.dart';
import '/utils/strings.dart';
import '/views/main/conversation/detail.dart';
class FriendListItem extends StatefulWidget{
final Friend friend;
const FriendListItem({
Key? key,
required this.friend,
}) : super(key: key);
@override
_FriendListItemState createState() => _FriendListItemState();
}
class _FriendListItemState extends State<FriendListItem> {
@override
Widget build(BuildContext context) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
findOrCreateConversation(context);
},
child: Container(
padding: const EdgeInsets.only(left: 16,right: 16,top: 0,bottom: 20),
child: Row(
children: <Widget>[
Expanded(
child: Row(
children: <Widget>[
CustomCircleAvatar(
initials: widget.friend.username[0].toUpperCase(),
),
const SizedBox(width: 16),
Expanded(
child: Align(
alignment: Alignment.centerLeft,
child: Container(
color: Colors.transparent,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(widget.friend.username, style: const TextStyle(fontSize: 16)),
],
),
),
),
),
],
),
),
],
),
),
);
}
Future<void> findOrCreateConversation(BuildContext context) async {
Conversation? conversation = await ConversationsRepository.getTwoUserConversation(widget.friend.friendId);
conversation ??= await ConversationsRepository.createConversation(
generateRandomString(32),
[ widget.friend ],
true,
);
ConversationsService.uploadConversation(conversation)
.catchError((dynamic d) async {
showMessage('Failed to create conversation', context);
});
if (!mounted) {
return;
}
Navigator.push(context, MaterialPageRoute(builder: (context){
return ConversationDetail(
conversation: conversation!,
);
}));
}
}