111 lines
3.6 KiB
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,
|
|
);
|
|
}
|
|
} |