TIF_E41201615/lib/components/appbar/basic_appbar.dart

146 lines
4.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:snap_and_cook_mobile/styles/text_styles/tt_commons_text_styles.dart';
import '../../styles/colors.dart';
import '../asset_image_view.dart';
class BasicAppBar extends StatelessWidget implements PreferredSizeWidget {
final String appBarTitleText;
final Color appBarTitleColor;
final double appBarTitleSize;
final FontWeight appBarTitleWeight;
final double appBarHeight;
final String? appBarSubTitleText;
final Color appBarSubTitleColor;
final double appBarSubTitleSize;
final FontWeight appBarSubTitleWeight;
final Function? onTapBack;
final List<Widget>? actions;
final double appBarElevation;
final IconData? leadingIconData;
final String? leadingImage;
final bool centerTitle;
final Color backgroundColor;
final Color leadingIconColor;
final double leadingHeight;
final double leadingWeight;
BasicAppBar({
Key? key,
this.appBarTitleText = '',
this.appBarTitleColor = AppColors.heroBlack,
this.appBarTitleSize = 18,
this.appBarTitleWeight = FontWeight.w500,
this.appBarHeight = 56,
this.appBarSubTitleColor = AppColors.heroBlack,
this.appBarSubTitleSize = 18,
this.appBarSubTitleWeight = FontWeight.w500,
this.appBarSubTitleText,
this.onTapBack,
this.actions,
this.appBarElevation = 0,
this.leadingIconData,
this.leadingImage = '',
this.centerTitle = false,
this.backgroundColor = AppColors.semanticGreen300,
this.leadingIconColor = AppColors.heroBlack,
this.leadingHeight = 24,
this.leadingWeight = 24,
}) : super(key: key);
@override
Size get preferredSize => AppBar().preferredSize;
@override
Widget build(BuildContext context) {
return AppBar(
backgroundColor: backgroundColor,
centerTitle: centerTitle,
elevation: appBarElevation,
toolbarHeight: appBarHeight,
automaticallyImplyLeading: false,
actions: actions,
titleSpacing: 0,
iconTheme: const IconThemeData(
color: AppColors.primaryGrey,
),
title: Container(
width: Get.width,
margin: actions == null
? EdgeInsets.only(
right: 55.sp,
)
: EdgeInsets.zero,
child: Row(
children: [
if (leadingIconData == null && leadingImage!.isEmpty)
SizedBox(width: 16.w),
_basicAppBarTitle(),
SizedBox(width: 8.w),
_basicAppBarSubTitle(),
],
),
),
leading: _basicAppBarLeadingIcon(),
);
}
Widget? _basicAppBarLeadingIcon() {
if (leadingIconData != null || leadingImage!.isNotEmpty) {
return GestureDetector(
child: AbsorbPointer(
child: Center(
child: AssetImageView(
materialIcon: leadingIconData,
height:leadingHeight,
width: leadingWeight,
color: leadingIconColor,
fileName: leadingImage!,
),
),
),
onTap: () {
if (onTapBack != null) {
onTapBack?.call();
} else {
Get.back();
}
},
);
}
return null;
}
Widget _basicAppBarTitle() {
if (appBarTitleText.isNotEmpty) {
return Text(
appBarTitleText,
style: TTCommonsTextStyles.textMd.textMedium().copyWith(
color: appBarTitleColor,
fontSize: appBarTitleSize,
fontWeight: appBarTitleWeight,
),
textAlign: TextAlign.center,
);
}
return const SizedBox();
}
Widget _basicAppBarSubTitle() {
if (appBarSubTitleText != null) {
return Text(
appBarSubTitleText!,
style: TTCommonsTextStyles.textMd.textMedium().copyWith(
color: appBarSubTitleColor,
fontSize: appBarSubTitleSize,
fontWeight: appBarSubTitleWeight,
),
textAlign: TextAlign.center,
);
}
return const SizedBox();
}
}