first commit
This commit is contained in:
111
unionflow-mobile-apps/lib/core/utils/responsive_utils.dart
Normal file
111
unionflow-mobile-apps/lib/core/utils/responsive_utils.dart
Normal file
@@ -0,0 +1,111 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Utilitaires pour rendre l'app responsive
|
||||
class ResponsiveUtils {
|
||||
static late MediaQueryData _mediaQueryData;
|
||||
static late double screenWidth;
|
||||
static late double screenHeight;
|
||||
static late double blockSizeHorizontal;
|
||||
static late double blockSizeVertical;
|
||||
static late double safeAreaHorizontal;
|
||||
static late double safeAreaVertical;
|
||||
static late double safeBlockHorizontal;
|
||||
static late double safeBlockVertical;
|
||||
static late double textScaleFactor;
|
||||
|
||||
static void init(BuildContext context) {
|
||||
_mediaQueryData = MediaQuery.of(context);
|
||||
screenWidth = _mediaQueryData.size.width;
|
||||
screenHeight = _mediaQueryData.size.height;
|
||||
|
||||
blockSizeHorizontal = screenWidth / 100;
|
||||
blockSizeVertical = screenHeight / 100;
|
||||
|
||||
final safeAreaPadding = _mediaQueryData.padding;
|
||||
safeAreaHorizontal = screenWidth - safeAreaPadding.left - safeAreaPadding.right;
|
||||
safeAreaVertical = screenHeight - safeAreaPadding.top - safeAreaPadding.bottom;
|
||||
|
||||
safeBlockHorizontal = safeAreaHorizontal / 100;
|
||||
safeBlockVertical = safeAreaVertical / 100;
|
||||
|
||||
textScaleFactor = _mediaQueryData.textScaleFactor;
|
||||
}
|
||||
|
||||
// Responsive width
|
||||
static double wp(double percentage) => blockSizeHorizontal * percentage;
|
||||
|
||||
// Responsive height
|
||||
static double hp(double percentage) => blockSizeVertical * percentage;
|
||||
|
||||
// Responsive font size (basé sur la largeur)
|
||||
static double fs(double percentage) => safeBlockHorizontal * percentage;
|
||||
|
||||
// Responsive spacing
|
||||
static double sp(double percentage) => safeBlockHorizontal * percentage;
|
||||
|
||||
// Responsive padding/margin
|
||||
static EdgeInsets paddingAll(double percentage) =>
|
||||
EdgeInsets.all(sp(percentage));
|
||||
|
||||
static EdgeInsets paddingSymmetric({double? horizontal, double? vertical}) =>
|
||||
EdgeInsets.symmetric(
|
||||
horizontal: horizontal != null ? sp(horizontal) : 0,
|
||||
vertical: vertical != null ? hp(vertical) : 0,
|
||||
);
|
||||
|
||||
static EdgeInsets paddingOnly({
|
||||
double? left,
|
||||
double? top,
|
||||
double? right,
|
||||
double? bottom,
|
||||
}) =>
|
||||
EdgeInsets.only(
|
||||
left: left != null ? sp(left) : 0,
|
||||
top: top != null ? hp(top) : 0,
|
||||
right: right != null ? sp(right) : 0,
|
||||
bottom: bottom != null ? hp(bottom) : 0,
|
||||
);
|
||||
|
||||
// Adaptive values based on screen size
|
||||
static double adaptive({
|
||||
required double small, // < 600px (phones)
|
||||
required double medium, // 600-900px (tablets)
|
||||
required double large, // > 900px (desktop)
|
||||
}) {
|
||||
if (screenWidth < 600) return small;
|
||||
if (screenWidth < 900) return medium;
|
||||
return large;
|
||||
}
|
||||
|
||||
// Check device type
|
||||
static bool get isMobile => screenWidth < 600;
|
||||
static bool get isTablet => screenWidth >= 600 && screenWidth < 900;
|
||||
static bool get isDesktop => screenWidth >= 900;
|
||||
|
||||
// Responsive border radius
|
||||
static BorderRadius borderRadius(double percentage) =>
|
||||
BorderRadius.circular(sp(percentage));
|
||||
|
||||
// Responsive icon size
|
||||
static double iconSize(double percentage) =>
|
||||
adaptive(
|
||||
small: sp(percentage),
|
||||
medium: sp(percentage * 0.9),
|
||||
large: sp(percentage * 0.8),
|
||||
);
|
||||
}
|
||||
|
||||
// Extension pour faciliter l'utilisation
|
||||
extension ResponsiveExtension on num {
|
||||
// Width percentage
|
||||
double get wp => ResponsiveUtils.wp(toDouble());
|
||||
|
||||
// Height percentage
|
||||
double get hp => ResponsiveUtils.hp(toDouble());
|
||||
|
||||
// Font size
|
||||
double get fs => ResponsiveUtils.fs(toDouble());
|
||||
|
||||
// Spacing
|
||||
double get sp => ResponsiveUtils.sp(toDouble());
|
||||
}
|
||||
Reference in New Issue
Block a user