Files
Xpress-rider/lib/views/helpers/constants/Font_constant.dart

111 lines
3.6 KiB
Dart

// ignore: file_names
import 'package:flutter/material.dart';
class FontConstants {
static String fontFamily = 'Proxima Nova';
// Base screen width for scaling (iPhone standard: 375)
static const double _baseWidth = 375.0;
// Base font sizes (for baseWidth = 375)
static const double _baseExtraSmall = 10.0;
static const double _baseSmall = 12.0;
static const double _baseMedium = 14.0;
static const double _baseRegular = 16.0;
static const double _baseLarge = 20.0;
static const double _baseXLarge = 21.0;
static const double _baseXXLarge = 22.0;
static const double _baseXXXLarge = 24.0;
static const double _baseHuge = 30.0;
/// Get fixed font size (no width scaling) so small & large phones look same.
static double getResponsiveFontSize(BuildContext context, double baseSize) {
return baseSize;
}
/// Extra Small Text (10px base) - For labels, captions
static double extraSmall(BuildContext context) =>
getResponsiveFontSize(context, _baseExtraSmall);
/// Small Text (12px base) - For small labels, timestamps
static double small(BuildContext context) =>
getResponsiveFontSize(context, _baseSmall);
/// Medium Text (14px base) - For body text, descriptions
static double medium(BuildContext context) =>
getResponsiveFontSize(context, _baseMedium);
/// Regular Text (16px base) - Standard body text, most common
static double regular(BuildContext context) =>
getResponsiveFontSize(context, _baseRegular);
/// Large Text (18px base) - For subheadings, important text
static double large(BuildContext context) =>
getResponsiveFontSize(context, _baseLarge);
/// Extra Large Text (20px base) - For headings, titles
static double xLarge(BuildContext context) =>
getResponsiveFontSize(context, _baseXLarge);
/// 2X Large Text (22px base) - For main headings
static double xxLarge(BuildContext context) =>
getResponsiveFontSize(context, _baseXXLarge);
/// 3X Large Text (24px base) - For prominent headings
static double xxxLarge(BuildContext context) =>
getResponsiveFontSize(context, _baseXXXLarge);
/// Huge Text (26px base) - For hero text, very prominent headings
static double huge(BuildContext context) =>
getResponsiveFontSize(context, _baseHuge);
}
class ReusableTextWidget extends StatelessWidget {
final String text;
final double? fontSize;
final double? textHeight;
final String? fontFamily;
final FontWeight? fontWeight;
final FontStyle? fontStyle;
final Color? color;
final TextAlign? textAlign;
final int? maxLines;
final TextDecoration? isUnderText;
const ReusableTextWidget({
super.key,
required this.text,
this.fontSize,
this.textHeight,
this.fontFamily,
this.fontWeight,
this.fontStyle,
this.color,
this.textAlign,
this.maxLines,
this.isUnderText,
});
@override
Widget build(BuildContext context) {
return Text(
text,
softWrap: true,
style: TextStyle(
fontSize: fontSize ?? FontConstants.medium(context),
decoration: isUnderText,
fontFamily: fontFamily ?? FontConstants.fontFamily,
decorationColor: color,
fontWeight: fontWeight ?? FontWeight.normal,
fontStyle: fontStyle ?? FontStyle.normal,
color: color ?? Colors.grey.shade900,
overflow: TextOverflow.ellipsis,
decorationStyle: TextDecorationStyle.solid,
decorationThickness: 1,
height: textHeight,
),
maxLines: maxLines,
textAlign: textAlign ?? TextAlign.start,
);
}
}