Files
buzz/mobile/lib/shared/widgets/toast_capsule_content.dart
klopez4212 cfcaef4e9f Update mobile toast animations (#8855)
Updates mobile toast animations and styling.



| Sign in | Retry | Copied |
| --- | --- | --- |
| ![Reconnect to
Builderlab](https://github.com/user-attachments/assets/5298b507-df5b-49da-a021-03f337e997fa)
| ![Save error with
Retry](https://github.com/user-attachments/assets/492c8929-4f91-4342-943b-a72b96547992)
| ![Copied
confirmation](https://github.com/user-attachments/assets/864fd629-7414-415e-81ef-5f7d3d5333a4)
|

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz>
2026-10-31 07:50:00 -07:00

67 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import '../theme/theme.dart';
/// Shared text and inset action pill for temporary and persistent feedback.
class ToastCapsuleContent extends StatelessWidget {
const ToastCapsuleContent({
super.key,
required this.message,
required this.foreground,
this.actionLabel = 'Retry',
this.onAction,
});
final String message;
final Color foreground;
final String actionLabel;
final VoidCallback? onAction;
@override
Widget build(BuildContext context) {
final text = Padding(
padding: const EdgeInsets.symmetric(
horizontal: Grid.gutter,
vertical: Grid.twelve,
),
child: Text(
message,
textAlign: TextAlign.center,
style: context.textTheme.bodyMedium?.copyWith(
color: foreground,
fontWeight: FontWeight.w600,
),
),
);
if (onAction == null) return text;
return IntrinsicWidth(
child: IntrinsicHeight(
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(child: Center(widthFactor: 1, child: text)),
Padding(
padding: const EdgeInsets.only(top: 6, right: 6, bottom: 6),
child: FilledButton(
onPressed: onAction,
style: FilledButton.styleFrom(
backgroundColor: Colors.white,
foregroundColor: Colors.black,
shape: const RoundedSuperellipseBorder(
borderRadius: BorderRadius.all(Radius.circular(999)),
),
minimumSize: const Size(48, 36),
padding: const EdgeInsets.symmetric(horizontal: Grid.gutter),
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
),
child: Text(actionLabel),
),
),
],
),
),
);
}
}