THATMobile/lib/core/components/constants_widget.dart
2026-02-26 10:39:42 +07:00

381 lines
11 KiB
Dart

import 'package:baseproject/core/components/image/custom_image.dart';
import 'package:baseproject/core/language/app_localizations.dart';
import 'package:baseproject/core/theme/custom_color.dart';
import 'package:baseproject/core/theme/size.dart';
import 'package:baseproject/core/theme/text_style.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ConstantWidget {
ConstantWidget._internal();
/// Height
///
/// SizedBox has [height] = 2
static Widget heightSpace2 = const SizedBox(height: 2);
/// SizedBox has [height] = 4
static Widget heightSpace4 = const SizedBox(height: 4);
/// SizedBox has [height] = 6
static Widget heightSpace6 = const SizedBox(height: 6);
/// SizedBox has [height] = 8
static Widget heightSpace8 = const SizedBox(height: 8);
/// SizedBox has [height] = 10
static Widget heightSpace10 = const SizedBox(height: 10);
/// SizedBox has [height] = 12
static Widget heightSpace12 = const SizedBox(height: 12);
/// SizedBox has [height] = 14
static Widget heightSpace14 = const SizedBox(height: 14);
/// SizedBox has [height] = 16
static Widget heightSpace16 = const SizedBox(height: 16);
/// SizedBox has [height] = 18
static Widget heightSpace18 = const SizedBox(height: 18);
/// SizedBox has [height] = 20
static Widget heightSpace20 = const SizedBox(height: 20);
/// SizedBox has [height] = 22
static Widget heightSpace22 = const SizedBox(height: 22);
/// SizedBox has [height] = 24
static Widget heightSpace24 = const SizedBox(height: 24);
/// SizedBox has [height] = 26
static Widget heightSpace26 = const SizedBox(height: 26);
/// SizedBox has [height] = 28
static Widget heightSpace28 = const SizedBox(height: 28);
/// SizedBox has [height] = 30
static Widget heightSpace30 = const SizedBox(height: 30);
/// SizedBox has [height] = 32
static Widget heightSpace32 = const SizedBox(height: 32);
/// SizedBox has [height] = 36
static Widget heightSpace36 = const SizedBox(height: 36);
/// SizedBox has [height] = 40
static Widget heightSpace40 = const SizedBox(height: 40);
/// SizedBox has [height] = 60
static Widget heightSpace60 = const SizedBox(height: 60);
/// SizedBox has [height] = 80
static Widget heightSpace80 = const SizedBox(height: 80);
/// SizedBox has [height] = 90
static Widget heightSpace90 = const SizedBox(height: 90);
/// SizedBox has [height] = 100
static Widget heightSpace100 = const SizedBox(height: 100);
/// Width
///
/// SizedBox has [height] = 2
static Widget widthSpace2 = const SizedBox(width: 2);
/// SizedBox has [height] = 4
static Widget widthSpace4 = const SizedBox(width: 4);
/// SizedBox has [height] = 6
static Widget widthSpace6 = const SizedBox(width: 6);
/// SizedBox has [height] = 8
static Widget widthSpace8 = const SizedBox(width: 8);
/// SizedBox has [height] = 10
static Widget widthSpace10 = const SizedBox(width: 10);
/// SizedBox has [height] = 12
static Widget widthSpace12 = const SizedBox(width: 12);
/// SizedBox has [height] = 14
static Widget widthSpace14 = const SizedBox(width: 14);
/// SizedBox has [height] = 16
static Widget widthSpace16 = const SizedBox(width: 16);
/// SizedBox has [height] = 18
static Widget widthSpace18 = const SizedBox(width: 18);
/// SizedBox has [height] = 20
static Widget widthSpace20 = const SizedBox(width: 20);
/// SizedBox has [height] = 22
static Widget widthSpace22 = const SizedBox(width: 22);
/// SizedBox has [height] = 24
static Widget widthSpace24 = const SizedBox(width: 24);
/// SizedBox has [height] = 26
static Widget widthSpace26 = const SizedBox(width: 26);
/// SizedBox has [height] = 28
static Widget widthSpace28 = const SizedBox(width: 28);
/// SizedBox has [height] = 30
static Widget widthSpace30 = const SizedBox(width: 30);
/// SizedBox has [height] = 32
static Widget widthSpace32 = const SizedBox(width: 32);
/// SizedBox has [height] = 36
static Widget widthSpace36 = const SizedBox(width: 36);
/// SizedBox has [height] = 40
static Widget widthSpace40 = const SizedBox(width: 40);
/// SizedBox has [height] = 60
static Widget widthSpace60 = const SizedBox(width: 60);
/// SizedBox has [height] = 80
static Widget widthSpace80 = const SizedBox(width: 80);
/// SizedBox has [height] = 100
static Widget widthSpace100 = const SizedBox(width: 100);
static Widget dividerDefault = Divider(color: CustomColor.dividerDefaultColor, thickness: 1, height: 1);
static Widget appbarTitleWidget(String text) => Align(
alignment: Alignment.center,
child: Text(
text,
style: textAppBarDefault,
),
);
static Widget appBarBackButtonDefault(BuildContext context, {Function()? onBack}) => IconButton(
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
onPressed: () {
if (onBack != null) {
onBack();
} else {
Navigator.of(context).pop();
}
},
icon: SizedBox(
height: 36,
width: 36,
child: Icon(
Icons.arrow_back_ios,
color: CustomColor.kTextWhiteColor,
size: 18,
),
),
);
static Widget appBarCloseButtonDefault(BuildContext context) => IconButton(
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
onPressed: () {
Navigator.of(context).pop();
},
icon: SizedBox(
height: 36,
width: 36,
child: Icon(
Icons.close,
color: CustomColor.kTextWhiteColor,
size: 20,
),
),
);
static Text textBodyDefault(
String text, {
FontWeight fontWeight = FontWeight.w400,
TextDecoration decoration = TextDecoration.none,
Color? color,
TextAlign? textAlign,
}) =>
Text(
text,
style: textStyleBodyDefault.copyWith(
fontWeight: fontWeight,
decoration: decoration,
color: color,
),
textAlign: textAlign,
);
static Text textHeadline6(String text) => Text(
text,
style: textStyleHeadline6,
);
static Text textHeadline6White(String text) => Text(
text,
style: textStyleHeadline6.copyWith(color: CustomColor.kTextWhiteColor),
);
static Text textBodyDefaultWhite(String text, {FontWeight fontWeight = FontWeight.w400}) => Text(
text,
style: textStyleBodyDefault.copyWith(fontWeight: fontWeight, color: CustomColor.kTextWhiteColor),
);
static Text textBodySmall(
String text, {
FontWeight fontWeight = FontWeight.w400,
Color? color,
TextAlign? textAlign,
}) =>
Text(
text,
style: textStyleBodySmall.copyWith(
fontWeight: fontWeight,
color: color,
),
textAlign: textAlign,
);
static Text subTextBodySmall(String text, {FontWeight fontWeight = FontWeight.w400}) => Text(
text,
style: textStyleBodySmall.copyWith(fontWeight: fontWeight, color: CustomColor.colorSubText),
);
static Text textBodySmallWhite(String text, {FontWeight fontWeight = FontWeight.w400}) => Text(
text,
style: textStyleBodySmallWhite.copyWith(fontWeight: fontWeight, color: CustomColor.kTextWhiteColor),
);
static Card buildCardDefault(
{required Widget child, EdgeInsets? margin, ShapeBorder? border, EdgeInsets? padding, Color? color}) =>
Card(
margin: margin,
shape: border,
child: Container(
color: color,
width: double.infinity,
padding: padding ?? const EdgeInsets.all(12),
child: child,
),
);
static Container defaultContainer({
required Widget child,
double borderRadius = 8,
Color? color,
EdgeInsets? padding,
double? width,
BoxBorder? border,
}) =>
Container(
width: width,
child: child,
padding: padding,
decoration: BoxDecoration(
color: color,
border: border,
borderRadius: BorderRadius.circular(borderRadius),
),
);
static Container circleContainer({
Color? color,
EdgeInsets? padding,
required Widget child,
double? size,
}) =>
Container(
width: size,
height: size,
padding: padding,
decoration: BoxDecoration(
color: color,
shape: BoxShape.circle,
),
child: child,
);
static Row rowIconAndText(String icPath, String text) => Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
svgImage(icPath, color: CustomColor.colorSubText, width: 18),
ConstantWidget.widthSpace10,
Expanded(
child: Text(
text,
style: textStyleBodyDefault,
),
),
],
);
static Container titleDateTime(BuildContext context, DateTime date) => titleBackgroundDefault(
context,
AppLocalizations.of(context)!.displayDateTime(date, isFullTime: false),
);
static Container titleBackgroundDefault(BuildContext context, String text) => Container(
alignment: Alignment.center,
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 6, horizontal: 2),
decoration: BoxDecoration(
color: CustomColor.colorButtonDefault,
borderRadius: BorderRadius.circular(4),
),
child: Text(
text,
maxLines: 1,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
style: textStyleBodyDefault.copyWith(
color: CustomColor.colorTextButtonDefault,
fontWeight: FontWeight.w600,
),
),
);
static Center listLoadingDefault() => const Center(child: CupertinoActivityIndicator());
static Center noData() => Center(
child: ConstantWidget.textBodyDefault("Không có dữ liệu"),
);
static Container bottomContainer({
Color? color,
EdgeInsets? padding,
required Widget child,
}) =>
Container(
padding: padding ?? paddingBodyDefault.copyWith(top: 10, bottom: 10),
decoration: BoxDecoration(
color: CustomColor.kTextWhiteColor,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.3),
spreadRadius: 5,
blurRadius: 7,
offset: Offset(0, 3), // changes position of shadow
),
],
),
child: child,
);
static Widget defaultSafeArea({
bool top = false,
bool bottom = true,
required Widget child,
}) =>
SafeArea(
top: top,
bottom: bottom,
child: child,
);
static ClipRRect defaultTopClipR({required Widget child}) => ClipRRect(
child: child, //widget.userId Todo
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(28),
topRight: Radius.circular(28),
),
);
}