65 lines
1.5 KiB
Dart
65 lines
1.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:moxxyv2/ui/widgets/chat/bottom.dart';
|
|
import 'package:moxxyv2/ui/widgets/chat/gradient.dart';
|
|
|
|
/// A base container allowing to embed a child in a borderless ChatBubble. If onTap is
|
|
/// set, then it will be called as soon as the bubble is tapped. If extra is set, then
|
|
/// it will be put on top of the bubble in the center.
|
|
class MediaBaseChatWidget extends StatelessWidget {
|
|
const MediaBaseChatWidget(
|
|
this.background,
|
|
this.bottom,
|
|
this.radius,
|
|
{
|
|
this.onTap,
|
|
this.extra,
|
|
this.gradient = true,
|
|
super.key,
|
|
}
|
|
);
|
|
final Widget background;
|
|
final Widget? extra;
|
|
final MessageBubbleBottom bottom;
|
|
final BorderRadius radius;
|
|
final void Function()? onTap;
|
|
final bool gradient;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final content = Stack(
|
|
alignment: Alignment.center,
|
|
children: [
|
|
ClipRRect(
|
|
borderRadius: radius,
|
|
child: background,
|
|
),
|
|
|
|
if (gradient)
|
|
BottomGradient(radius),
|
|
|
|
if (extra != null)
|
|
extra!,
|
|
|
|
Positioned(
|
|
bottom: 0,
|
|
left: 0,
|
|
right: 0,
|
|
child: Padding(
|
|
padding: const EdgeInsets.only(bottom: 3, right: 6),
|
|
child: bottom,
|
|
),
|
|
),
|
|
],
|
|
);
|
|
|
|
return IntrinsicWidth(
|
|
child: onTap != null ?
|
|
InkWell(
|
|
onTap: onTap,
|
|
child: content,
|
|
) :
|
|
content,
|
|
);
|
|
}
|
|
}
|