Line data Source code
1 : import 'dart:convert'; 2 : 3 : import 'package:cwtch/models/message.dart'; 4 : import 'package:cwtch/models/messages/malformedmessage.dart'; 5 : import 'package:cwtch/widgets/malformedbubble.dart'; 6 : import 'package:cwtch/widgets/messageBubbleWidgetHelpers.dart'; 7 : import 'package:cwtch/widgets/messagerow.dart'; 8 : import 'package:cwtch/widgets/quotedmessage.dart'; 9 : import 'package:flutter/widgets.dart'; 10 : import 'package:provider/provider.dart'; 11 : 12 : import '../../settings.dart'; 13 : 14 : class QuotedMessageStructure { 15 : final String quotedHash; 16 : final String body; 17 0 : QuotedMessageStructure(this.quotedHash, this.body); 18 : 19 0 : Map<String, dynamic> toJson() => {'quotedHash': quotedHash, 'body': body}; 20 : } 21 : 22 : class QuotedMessage extends Message { 23 : final MessageMetadata metadata; 24 : final String content; 25 0 : QuotedMessage(this.metadata, this.content); 26 : 27 0 : @override 28 : Widget getPreviewWidget(BuildContext context, {BoxConstraints? constraints}) { 29 0 : return ChangeNotifierProvider.value( 30 0 : value: this.metadata, 31 0 : builder: (bcontext, child) { 32 : try { 33 0 : dynamic message = jsonDecode(this.content); 34 0 : var content = message["body"]; 35 0 : var formatMessages = Provider.of<Settings>(bcontext).isExperimentEnabled(FormattingExperiment); 36 0 : return compileMessageContentWidget(context, constraints ?? BoxConstraints.loose(MediaQuery.sizeOf(context)), false, content, FocusNode(), formatMessages, false); 37 : } catch (e) { 38 0 : return MalformedBubble(); 39 : } 40 : }, 41 : ); 42 : } 43 : 44 0 : @override 45 : MessageMetadata getMetadata() { 46 0 : return this.metadata; 47 : } 48 : 49 0 : @override 50 : Widget getWidget(BuildContext context, Key key, int index) { 51 : try { 52 0 : dynamic message = jsonDecode(this.content); 53 : 54 0 : if (message["body"] == null || message["quotedHash"] == null) { 55 0 : return MalformedMessage(this.metadata).getWidget(context, key, index); 56 : } 57 : 58 0 : return ChangeNotifierProvider.value( 59 0 : value: this.metadata, 60 0 : builder: (bcontext, child) { 61 0 : return MessageRow( 62 0 : QuotedMessageBubble(message["body"], messageHandler(bcontext, metadata.profileOnion, metadata.conversationIdentifier, ByContentHash(message["quotedHash"]))), 63 : index, 64 : key: key, 65 : ); 66 : }, 67 : ); 68 : } catch (e) { 69 0 : return MalformedMessage(this.metadata).getWidget(context, key, index); 70 : } 71 : } 72 : }