Line data Source code
1 : import 'package:basf_flutter_components/basf_flutter_components.dart'; 2 : import 'package:flutter/material.dart'; 3 : 4 : /// {@template app_snackbar} 5 : /// Basf AppSnackBar 6 : /// {@endtemplate} 7 : class AppSnackBar extends StatelessWidget { 8 : /// {@macro app_snackbar} 9 : /// default 10 1 : const AppSnackBar({ 11 : super.key, 12 : required this.message, 13 : this.prefixIcon, 14 : this.backgroundColor, 15 : }); 16 : 17 : /// {@macro app_snackbar} 18 : /// info 19 2 : factory AppSnackBar.info({required String message}) => AppSnackBar( 20 : message: message, 21 : prefixIcon: Icons.info, 22 : ); 23 : 24 : /// {@macro app_snackbar} 25 : /// error 26 1 : factory AppSnackBar.error({required String message}) { 27 1 : return AppSnackBar( 28 : message: message, 29 : prefixIcon: Icons.error, 30 : backgroundColor: BasfColors.red, 31 : ); 32 : } 33 : 34 : /// Prefix icon of the snackbar 35 : final IconData? prefixIcon; 36 : 37 : /// Background color of the snackbar 38 : final Color? backgroundColor; 39 : 40 : /// Message of the snackbar 41 : final String message; 42 : 43 1 : @override 44 : Widget build(BuildContext context) { 45 1 : return _content(); 46 : } 47 : 48 1 : Widget _content() { 49 1 : return Row( 50 1 : children: [ 51 1 : _leftIcon(), 52 1 : HorizontalSpacer.semi(), 53 1 : _text(), 54 : ], 55 : ); 56 : } 57 : 58 1 : Widget _leftIcon() { 59 1 : return Builder( 60 1 : builder: (context) { 61 1 : return Icon( 62 1 : prefixIcon, 63 : size: 22, 64 3 : color: Theme.of(context).snackBarTheme.contentTextStyle?.color, 65 : ); 66 : }, 67 : ); 68 : } 69 : 70 1 : Widget _text() { 71 1 : return Builder( 72 1 : builder: (context) { 73 1 : return Expanded( 74 1 : child: Text( 75 1 : message, 76 : maxLines: 4, 77 3 : style: Theme.of(context).snackBarTheme.contentTextStyle, 78 : ), 79 : ); 80 : }, 81 : ); 82 : } 83 : }