import 'dart:developer'; import 'package:bubble/bubble.dart'; import 'package:flutter/material.dart'; import 'package:muaawana/config/style.dart'; import 'package:muaawana/models/chat_v2/message.dart'; import '../config/app_constant.dart'; class TextMessageCard extends StatefulWidget { final bool isCurrentUser; final MessageModel message; const TextMessageCard({ Key? key, required this.isCurrentUser, required this.message, }) : super(key: key); @override State createState() => _TextMessageCardState(); } class _TextMessageCardState extends State { late DateTime date; @override Widget build(BuildContext context) { date = DateTime.fromMillisecondsSinceEpoch(widget.message.timestamp!); return SizedBox( child: Column( children: [ widget.isCurrentUser ? userInfoModel() : companyInfo(), Column( children: [ Row( mainAxisAlignment: widget.isCurrentUser ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Flexible( child: Column( children: [ Bubble( color: widget.isCurrentUser ? AppNewStyle.primaryButton : Theme.of(context).colorScheme.surface, shadowColor: Colors.transparent, borderUp: false, nip: widget.isCurrentUser ? BubbleNip.rightTop : BubbleNip.leftTop, margin: widget.isCurrentUser ? const BubbleEdges.fromLTRB(50, 10, 20, 0) : const BubbleEdges.fromLTRB(20, 10, 50, 0), child: Padding( padding: const EdgeInsets.all(8.0), child: Text( widget.message.content!, style: TextStyle( height: 1.8, fontFamily: "MontserratMedium", color: widget.isCurrentUser ? Colors.white : Theme.of(context).colorScheme.onSurface), ), ), ), ], ), ), ], ), Row( mainAxisAlignment: widget.isCurrentUser ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Padding( padding: widget.isCurrentUser ? const EdgeInsetsDirectional.only(end: 25, top: 10) : const EdgeInsetsDirectional.only(start: 25, top: 10), child: Text( "${date.hour}:${date.minute}", style: TextStyle( fontFamily: 'MontserratMedium', color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6)), ), ) ], ), ], ), ], ), ); } Widget userInfoModel() { log("chatter name: ${widget.message.senderName}"); log("chatter image: ${widget.message.sender?.image?.url}"); return Row( mainAxisAlignment: widget.isCurrentUser ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Text( widget.message.senderName!, style: const TextStyle( fontFamily: 'MontserratMedium', fontSize: 14, ), ), const SizedBox(width: 5), CircleAvatar( radius: 14, backgroundImage: widget.message.sender != null ? widget.message.sender!.image == null ? const AssetImage(Consts.personVide) : widget.message.sender!.image!.url != null ? NetworkImage(widget.message.sender!.image!.url!) : const AssetImage(Consts.personVide) as ImageProvider : const AssetImage(Consts.personVide), backgroundColor: Colors.transparent, ), ], ); } Widget companyInfo() { final bool isMessageFromSocket = widget.message.sender == null || widget.message.recipient == null; return isMessageFromSocket ? Row( mainAxisAlignment: widget.isCurrentUser ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ widget.message.imagePicture != null ? widget.message.imagePicture != "" ? CircleAvatar( radius: 14, backgroundImage: NetworkImage( widget.message.imagePicture!), backgroundColor: Colors.transparent, ) : const CircleAvatar( radius: 14, backgroundColor: Colors.transparent, child: Icon( Icons.person, color: AppNewStyle.primaryButton, ), ) : const CircleAvatar( radius: 14, backgroundColor: Colors.transparent, child: Icon( Icons.person, color: AppNewStyle.primaryButton, ), ), const SizedBox( width: 5, ), Text( "${widget.message.senderName}", style: const TextStyle( fontFamily: 'MontserratMedium', fontSize: 14, ), ), ], ) : Row( mainAxisAlignment: widget.isCurrentUser ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ widget.message.sender!.image != null ? CircleAvatar( radius: 14, backgroundImage: widget.message.sender != null && widget.message.sender!.image!.url != null ? NetworkImage("https://server.muaawana.com/${widget.message.sender!.image!.url!}") : widget.message.imagePicture != null ? NetworkImage("https://server.muaawana.com/${widget.message.imagePicture!}") : const AssetImage(Consts.personVide)as ImageProvider, backgroundColor: Colors.transparent, ) : const CircleAvatar( radius: 14, backgroundColor: Colors.transparent, child: Icon(Icons.person), ), const SizedBox( width: 5, ), Text( "${widget.message.senderName}", style: const TextStyle( fontFamily: 'MontserratMedium', fontSize: 14, ), ), ], ); } }