Yimaru-Mobile/StudioProjects/yimaru_app/lib/ui/common/ui_helpers.dart

127 lines
3.8 KiB
Dart

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:yimaru_app/ui/common/app_colors.dart';
const double _tinySize = 5.0;
const double _smallSize = 10.0;
const double _mediumSize = 25.0;
const double _largeSize = 50.0;
const double _massiveSize = 120.0;
const Widget horizontalSpaceTiny = SizedBox(width: _tinySize);
const Widget horizontalSpaceSmall = SizedBox(width: _smallSize);
const Widget horizontalSpaceMedium = SizedBox(width: _mediumSize);
const Widget horizontalSpaceLarge = SizedBox(width: _largeSize);
const Widget verticalSpaceTiny = SizedBox(height: _tinySize);
const Widget verticalSpaceSmall = SizedBox(height: _smallSize);
const Widget verticalSpaceMedium = SizedBox(height: _mediumSize);
const Widget verticalSpaceLarge = SizedBox(height: _largeSize);
const Widget verticalSpaceMassive = SizedBox(height: _massiveSize);
Widget spacedDivider = const Column(
children: <Widget>[
verticalSpaceMedium,
Divider(color: Colors.blueGrey, height: 5.0),
verticalSpaceMedium,
],
);
Widget verticalSpace(double height) => SizedBox(height: height);
double screenWidth(BuildContext context) => MediaQuery.of(context).size.width;
double screenHeight(BuildContext context) => MediaQuery.of(context).size.height;
double screenHeightFraction(
BuildContext context, {
int dividedBy = 1,
double offsetBy = 0,
double max = 3000,
}) =>
min((screenHeight(context) - offsetBy) / dividedBy, max);
double screenWidthFraction(
BuildContext context, {
int dividedBy = 1,
double offsetBy = 0,
double max = 3000,
}) =>
min((screenWidth(context) - offsetBy) / dividedBy, max);
double halfScreenWidth(BuildContext context) =>
screenWidthFraction(context, dividedBy: 2);
double thirdScreenWidth(BuildContext context) =>
screenWidthFraction(context, dividedBy: 3);
double quarterScreenWidth(BuildContext context) =>
screenWidthFraction(context, dividedBy: 4);
double getResponsiveHorizontalSpaceMedium(BuildContext context) =>
screenWidthFraction(context, dividedBy: 10);
double getResponsiveSmallFontSize(BuildContext context) =>
getResponsiveFontSize(context, fontSize: 14, max: 15);
double getResponsiveMediumFontSize(BuildContext context) =>
getResponsiveFontSize(context, fontSize: 16, max: 17);
double getResponsiveLargeFontSize(BuildContext context) =>
getResponsiveFontSize(context, fontSize: 21, max: 31);
double getResponsiveExtraLargeFontSize(BuildContext context) =>
getResponsiveFontSize(context, fontSize: 25);
double getResponsiveMassiveFontSize(BuildContext context) =>
getResponsiveFontSize(context, fontSize: 30);
double getResponsiveFontSize(
BuildContext context, {
double? fontSize,
double? max,
}) {
max ??= 100;
var responsiveSize = min(
screenWidthFraction(context, dividedBy: 10) * ((fontSize ?? 100) / 100),
max,
);
return responsiveSize;
}
InputDecoration inputDecoration({
String? hint,
required bool focus,
}) =>
InputDecoration(
hintText: hint,
filled: true,
border: border,
errorBorder: errorBorder,
enabledBorder: enabledBorder,
focusedBorder: focusedBorder,
fillColor: focus ? kcPrimaryColor.withOpacity(0.2) : kcWhiteColor,
);
Border rightBorder = Border(
right: BorderSide(
width: 1,
color: kcLightGrey.withOpacity(0.25),
),
);
OutlineInputBorder border =
const OutlineInputBorder(borderSide: BorderSide(color: kcPrimaryColor));
OutlineInputBorder errorBorder =
const OutlineInputBorder(borderSide: BorderSide(color: kcPrimaryColor));
OutlineInputBorder enabledBorder =
const OutlineInputBorder(borderSide: BorderSide(color: kcPrimaryColor));
OutlineInputBorder focusedBorder =
const OutlineInputBorder(borderSide: BorderSide(color: kcPrimaryColor));
UnderlineInputBorder searchBorder =
const UnderlineInputBorder(borderSide: BorderSide(color: kcPrimaryColor));