You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.9 KiB
Dart
89 lines
2.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
|
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
|
|
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
|
|
|
|
class ChatBubble extends StatelessWidget {
|
|
const ChatBubble(
|
|
{Key? key,
|
|
required this.text,
|
|
required this.isCurrentUser,
|
|
required this.isSeen,
|
|
required this.isDelivered,
|
|
required this.dateTime})
|
|
: super(key: key);
|
|
final String text;
|
|
final bool isCurrentUser;
|
|
final bool isSeen;
|
|
final bool isDelivered;
|
|
final String dateTime;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Padding(
|
|
// asymmetric padding
|
|
padding: EdgeInsets.fromLTRB(
|
|
isCurrentUser ? 64.0 : 16.0,
|
|
4,
|
|
isCurrentUser ? 16.0 : 64.0,
|
|
4,
|
|
),
|
|
child: Align(
|
|
// align the child within the container
|
|
alignment: isCurrentUser ? Alignment.centerRight : Alignment.centerLeft,
|
|
child: DecoratedBox(
|
|
// chat bubble decoration
|
|
decoration: BoxDecoration(
|
|
color: Colors.white,
|
|
gradient: isCurrentUser
|
|
? null
|
|
: LinearGradient(
|
|
transform: GradientRotation(.46),
|
|
begin: Alignment.topRight,
|
|
end: Alignment.bottomLeft,
|
|
colors: [
|
|
MyColors.gradiantEndColor,
|
|
MyColors.gradiantStartColor,
|
|
]),
|
|
borderRadius: BorderRadius.circular(10),
|
|
),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(12),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
text.toText12(
|
|
color:
|
|
isCurrentUser ? MyColors.grey57Color : MyColors.white),
|
|
8.height,
|
|
Row(
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
children: [
|
|
dateTime.toText12(
|
|
color: isCurrentUser
|
|
? MyColors.grey41Color.withOpacity(.5)
|
|
: Colors.white.withOpacity(0.7)),
|
|
if (isCurrentUser) 5.width,
|
|
if (isCurrentUser)
|
|
Icon(
|
|
isDelivered
|
|
? Icons.done_all
|
|
: Icons.done_all,
|
|
color: isSeen
|
|
? MyColors.textMixColor
|
|
: MyColors.grey9DColor,
|
|
size: 14,
|
|
)
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|