flutter_app/lib/widgets/messagerow.dart

104 lines
3.5 KiB
Dart
Raw Normal View History

import 'dart:convert';
2021-04-14 02:33:21 +00:00
import 'package:flutter/material.dart';
2021-05-19 21:39:52 +00:00
import 'package:cwtch/widgets/profileimage.dart';
2021-04-14 02:33:21 +00:00
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
2021-04-14 02:33:21 +00:00
import '../main.dart';
2021-04-14 02:33:21 +00:00
import '../model.dart';
import '../settings.dart';
import 'invitationbubble.dart';
2021-05-12 22:39:10 +00:00
import 'malformedbubble.dart';
2021-04-14 02:33:21 +00:00
import 'messagebubble.dart';
import 'messageloadingbubble.dart';
2021-04-14 02:33:21 +00:00
class MessageRow extends StatefulWidget {
2021-05-25 00:11:39 +00:00
MessageRow({Key? key}) : super(key: key);
2021-05-03 02:38:43 +00:00
2021-04-14 02:33:21 +00:00
@override
_MessageRowState createState() => _MessageRowState();
}
class _MessageRowState extends State<MessageRow> {
@override
Widget build(BuildContext context) {
var fromMe = Provider.of<MessageState>(context).senderOnion == Provider.of<ProfileInfoState>(context).onion;
2021-05-12 22:39:10 +00:00
var malformed = Provider.of<MessageState>(context).malformed;
2021-04-14 02:33:21 +00:00
2021-05-12 22:39:10 +00:00
// If the message is malformed then override fromme as we can't trust it
if (malformed) {
fromMe = false;
}
2021-06-04 18:13:52 +00:00
Widget wdgBubble =
Flexible(flex: 3, fit: FlexFit.loose, child: Provider.of<MessageState>(context).loaded == true ? widgetForOverlay(Provider.of<MessageState>(context).overlay) : MessageLoadingBubble());
Widget wdgIcons = Icon(Icons.delete_forever_outlined, color: Provider.of<Settings>(context).theme.dropShadowColor());
Widget wdgSpacer = Expanded(child: SizedBox(width: 60, height: 10));
2021-04-14 02:33:21 +00:00
var widgetRow = <Widget>[];
if (fromMe) {
widgetRow = <Widget>[
wdgSpacer,
//wdgIcons,
2021-04-14 02:33:21 +00:00
wdgBubble,
];
} else {
var contact = Provider.of<ContactInfoState>(context);
Widget wdgPortrait = GestureDetector(
2021-05-12 22:39:10 +00:00
onTap: _btnAdd,
child: Padding(
padding: EdgeInsets.all(4.0),
child: ProfileImage(
2021-05-25 00:11:39 +00:00
diameter: 48.0,
imagePath: Provider.of<MessageState>(context).senderImage ?? contact.imagePath,
//maskOut: contact.status != "Authenticated",
border: contact.status == "Authenticated" ? Provider.of<Settings>(context).theme.portraitOnlineBorderColor() : Provider.of<Settings>(context).theme.portraitOfflineBorderColor(),
badgeTextColor: Colors.red, badgeColor: Colors.red,
)));
2021-04-14 02:33:21 +00:00
widgetRow = <Widget>[
wdgPortrait,
wdgBubble,
//wdgIcons,
2021-04-14 02:33:21 +00:00
wdgSpacer,
];
}
2021-04-27 20:39:07 +00:00
return Padding(padding: EdgeInsets.all(2), child: Row(mainAxisAlignment: fromMe ? MainAxisAlignment.end : MainAxisAlignment.start, children: widgetRow));
2021-04-14 02:33:21 +00:00
}
Widget widgetForOverlay(int o) {
switch (o) {
2021-05-12 22:39:10 +00:00
case 1:
return MessageBubble();
case 100:
2021-05-12 22:39:10 +00:00
case 101:
return InvitationBubble();
}
2021-05-25 00:11:39 +00:00
return MalformedBubble();
}
void _btnAdd() {
var sender = Provider.of<MessageState>(context, listen: false).senderOnion;
if (sender == null || sender == "") {
print("sender not yet loaded");
return;
}
var profileOnion = Provider.of<ProfileInfoState>(context, listen: false).onion;
final setPeerAttribute = {
"EventType": "AddContact",
"Data": {"ImportString": sender},
};
final setPeerAttributeJson = jsonEncode(setPeerAttribute);
Provider.of<FlwtchState>(context, listen: false).cwtch.SendProfileEvent(profileOnion, setPeerAttributeJson);
2021-06-07 22:12:24 +00:00
final snackBar = SnackBar(
content: Text(AppLocalizations.of(context)!.successfullAddedContact),
duration: Duration(seconds: 2),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
2021-04-14 02:33:21 +00:00
}