Files
fcs/lib/pages/chat/bubble.dart
2024-01-09 13:11:22 +06:30

147 lines
5.1 KiB
Dart

import 'package:fcs/helpers/theme.dart';
import 'package:fcs/pages/package/package_info.dart';
import 'package:fcs/pages/main/util.dart';
import 'package:fcs/pages/widgets/fcs_id_icon.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
DateFormat dayFormat = DateFormat("MMM dd yyyy");
DateFormat timeFormat = DateFormat("HH:mm");
typedef CallbackOnViewDetail();
class Bubble extends StatelessWidget {
Bubble(
{this.message,
required this.date,
required this.delivered,
required this.isMine,
this.sender,
required this.isSystem,
required this.isCustomer,
required this.showDate,
this.callbackOnViewDetail});
final CallbackOnViewDetail? callbackOnViewDetail;
final DateTime date;
final String? message, sender;
final bool delivered, isMine, isSystem, isCustomer, showDate;
@override
Widget build(BuildContext context) {
final bg = isMine ? Colors.greenAccent.shade100 : Colors.white;
final align = isMine ? CrossAxisAlignment.end : CrossAxisAlignment.start;
final icon = delivered ? Icons.done_all : Icons.done;
final radius = isMine
? BorderRadius.only(
topLeft: Radius.circular(25.0),
bottomLeft: Radius.circular(25.0),
bottomRight: Radius.circular(30.0),
)
: BorderRadius.only(
topRight: Radius.circular(25.0),
bottomLeft: Radius.circular(30.0),
bottomRight: Radius.circular(25.0),
);
return Column(
crossAxisAlignment: align,
children: <Widget>[
showDate ? Center(child: Text(dateFormat.format(date))) : Container(),
Container(
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * 0.8, minWidth: 10),
margin: const EdgeInsets.all(3.0),
padding: const EdgeInsets.all(8.0),
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
blurRadius: .5,
spreadRadius: 1.0,
color: Colors.black.withOpacity(.32))
],
color: bg,
borderRadius: radius,
),
child: Column(
crossAxisAlignment: align,
children: (isMine && isCustomer) || (!isMine && !isCustomer)
? [getMsg(context, icon)]
: isSystem
? [
FcsIDIcon(),
getMsg(context, icon),
TextButton(
style: TextButton.styleFrom(
backgroundColor:Colors.blue[50],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
)),
onPressed: () {},
child: Text(
getLocalString(context, "message.view.detail"),
style: TextStyle(
color: primaryColor,
fontWeight: FontWeight.bold)))
// FlatButton(
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(10.0),
// ),
// color: Colors.blue[50],
// onPressed: () => _viewDetail(),
// child: Text(
// getLocalString(context, "message.view.detail"),
// style: TextStyle(
// color: primaryColor,
// fontWeight: FontWeight.bold)))
]
: [
Text(isCustomer ? "FCS Team" : sender ?? "",
style: TextStyle(
color: Colors.black38,
fontSize: 10.0,
)),
getMsg(context, icon),
],
),
)
],
);
}
getMsg(BuildContext context, IconData iconData) {
return Stack(
children: <Widget>[
Padding(
padding: EdgeInsets.only(right: 48.0),
child: Text(message ?? "",
style: hasUnicode(message ?? "")
? newLabelStyleMM(color: primaryColor)
: newLabelStyle(color: primaryColor))),
Positioned(
bottom: 0.0,
right: 0.0,
child: Row(
children: <Widget>[
Text(timeFormat.format(date),
style: TextStyle(
color: Colors.black38,
fontSize: 10.0,
)),
SizedBox(width: 3.0),
Icon(
iconData,
size: 12.0,
color: Colors.black38,
)
],
),
),
],
);
}
_viewDetail() {
if (callbackOnViewDetail != null) callbackOnViewDetail!();
}
}