Refactor color management and UI components for consistency

- Updated color references in various widgets to use the new `opaquePrimary` color for better visual consistency.
- Refactored `ColorsManager` to improve color definitions and removed redundant color declarations.
- Enhanced UI elements across multiple dialogs and widgets to ensure a cohesive design language.

This change promotes maintainability and aligns with the updated color scheme.
This commit is contained in:
Faris Armoush
2025-07-24 10:27:17 +03:00
parent 04d1c37308
commit 99924c1e62
164 changed files with 911 additions and 997 deletions

View File

@ -1,23 +1,20 @@
import 'package:flutter/material.dart';
abstract class ColorsManager {
abstract final class ColorsManager {
const ColorsManager._();
static const Color textPrimaryColor = Color(0xFF5D5D5D);
static const Color switchOffColor = Color(0x7F8D99AE);
static const Color primaryColor = Color(0xFF0030CB); //023DFE
static const Color primaryColor = Color(0xFF0030CB);
static const Color secondaryTextColor = Color(0xFF848484);
static Color primaryColorWithOpacity =
const Color(0xFF023DFE).withOpacity(0.6);
static const Color whiteColors = Colors.white;
static Color whiteColorsWithOpacity = Colors.white.withOpacity(0.6);
static final Color opaquePrimary = const Color(0xFF023DFE).withValues(alpha: 0.6);
static const Color white = Color(0xFFFFFFFF);
static Color whiteColorsWithOpacity = Colors.white.withValues(alpha: 0.6);
static const Color secondaryColor = Color(0xFF023DFE);
static const Color onSecondaryColor = Color(0xFF023DFE);
static Color shadowBlackColor = Colors.black.withOpacity(0.2);
static Color dialogBlueTitle = const Color(0xFF023DFE).withOpacity(0.6);
static Color shadowBlackColor = Colors.black.withValues(alpha: 0.2);
static Color dialogBlueTitle = const Color(0xFF023DFE).withValues(alpha: 0.6);
static const Color primaryTextColor = Colors.black;
static const Color greyColor = Color(0xFFd5d5d5);
static const Color lightGreyColor = Color(0xFF999999);
static const Color backgroundColor = Color(0xFFececec);
@ -57,11 +54,10 @@ abstract class ColorsManager {
static const Color neutralGray = Color(0xFFE5E5E5);
static const Color warningRed = Color(0xFFFF6465);
static const Color borderColor = Color(0xFFE5E5E5);
static const Color CircleImageBackground = Color(0xFFF4F4F4);
static const Color circleImageBackground = Color(0xFFF4F4F4);
static const Color softGray = Color(0xFFD5D5D5);
static const Color semiTransparentBlack = Color(0x19000000);
static const Color dataHeaderGrey = Color(0x33999999);
static const Color circleImageBackground = Color(0xFFF4F4F4);
static const Color circleRolesBackground = Color(0xFFF8F8F8);
static const Color activeGreen = Color(0xFF99FF93);
static const Color activeGreenText = Color(0xFF008905);
@ -72,7 +68,7 @@ abstract class ColorsManager {
static const Color invitedOrangeText = Color(0xFFFFBF00);
static const Color lightGrayBorderColor = Color(0xB2D5D5D5);
static const Color vividBlue = Color(0xFF023DFE);
static const Color semiTransparentRed = Color(0x99FF0000);
static const Color semiTransparentRed = Color(0xFFFF6465);
static const Color grey700 = Color(0xFF2D3748);
static const Color goodGreen = Color(0xFF0CEC16);
static const Color moderateYellow = Color(0xFFFAC96C);
@ -95,5 +91,4 @@ abstract class ColorsManager {
static const Color shadowOfDetailsContainer = Color(0x40000000);
static const Color checkBoxBorderGray = Color(0xffD0D0D0);
static const Color timePickerColor = Color(0xff000000);
}

View File

@ -37,7 +37,7 @@ extension AppSnackBarsBuildContextExtension on BuildContext {
Text(
message,
style: textTheme.bodyMedium?.copyWith(
color: ColorsManager.whiteColors,
color: ColorsManager.white,
),
),
],

View File

@ -49,7 +49,7 @@ extension BuildContextExt on BuildContext {
title,
style: titleStyle ??
context.textTheme.bodyMedium!.copyWith(
color: ColorsManager.primaryColorWithOpacity,
color: ColorsManager.opaquePrimary,
fontWeight: FontWeight.bold,
),
),
@ -87,8 +87,8 @@ extension BuildContextExt on BuildContext {
child: Text(
onDismissText ?? 'Cancel',
style: context.textTheme.bodyMedium!.copyWith(
color: onDismissColor ??
ColorsManager.greyColor),
color:
onDismissColor ?? ColorsManager.greyColor),
),
),
),
@ -104,7 +104,7 @@ extension BuildContextExt on BuildContext {
onConfirmText ?? 'Confirm',
style: context.textTheme.bodyMedium!.copyWith(
color: onConfirmColor ??
ColorsManager.primaryColorWithOpacity),
ColorsManager.opaquePrimary),
),
),
),

View File

@ -22,7 +22,7 @@ class CustomSnackBar {
content: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
const Icon(
Icons.check_circle,
color: ColorsManager.whiteColors,
color: ColorsManager.white,
size: 32,
),
const SizedBox(
@ -30,10 +30,8 @@ class CustomSnackBar {
),
Text(
message,
style: Theme.of(currentContext)
.textTheme
.bodySmall!
.copyWith(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.green),
style: Theme.of(currentContext).textTheme.bodySmall!.copyWith(
fontSize: 14, fontWeight: FontWeight.w500, color: Colors.green),
)
]),
);
@ -59,10 +57,8 @@ class CustomSnackBar {
),
Text(
message,
style: Theme.of(currentContext)
.textTheme
.bodySmall!
.copyWith(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.green),
style: Theme.of(currentContext).textTheme.bodySmall!.copyWith(
fontSize: 14, fontWeight: FontWeight.w500, color: Colors.green),
)
]),
);

View File

@ -52,11 +52,11 @@ BoxDecoration containerWhiteDecoration = BoxDecoration(
offset: const Offset(0, 5), // changes position of shadow
),
],
color: ColorsManager.whiteColors,
color: ColorsManager.white,
borderRadius: const BorderRadius.all(Radius.circular(15)));
BoxDecoration subSectionContainerDecoration = BoxDecoration(
color: ColorsManager.whiteColors,
color: ColorsManager.white,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),

View File

@ -24,7 +24,7 @@ class ResponsiveTextTheme extends ThemeExtension<ResponsiveTextTheme> {
deviceManagementTitle: TextStyle(
fontSize: isMobile ? 20 : 30,
fontWeight: FontWeight.w700,
color: ColorsManager.whiteColors),
color: ColorsManager.white),
);
}
}

View File

@ -7,7 +7,7 @@ final myTheme = ThemeData(
textTheme: const TextTheme(
bodySmall: TextStyle(
fontSize: 13,
color: ColorsManager.whiteColors,
color: ColorsManager.white,
fontWeight: FontWeight.normal,
),
bodyMedium: TextStyle(color: Colors.black87, fontSize: 14),
@ -30,13 +30,13 @@ final myTheme = ThemeData(
if (states.contains(WidgetState.selected)) {
return ColorsManager.blueColor;
}
return ColorsManager.whiteColors;
return ColorsManager.white;
}),
trackColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return ColorsManager.blueColor.withOpacity(0.5);
}
return ColorsManager.whiteColors;
return ColorsManager.white;
}),
),
checkboxTheme: CheckboxThemeData(
@ -47,12 +47,12 @@ final myTheme = ThemeData(
return Colors.grey.shade200;
}),
checkColor: WidgetStateProperty.all(Colors.white),
side: const BorderSide(color: ColorsManager.whiteColors),
side: const BorderSide(color: ColorsManager.white),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
),
),
dialogTheme: const DialogThemeData(
backgroundColor: ColorsManager.whiteColors,
backgroundColor: ColorsManager.white,
),
);

View File

@ -1,10 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_bloc.dart';
import 'package:syncrow_web/pages/auth/model/user_model.dart';
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
import 'package:syncrow_web/pages/common/buttons/default_button.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
@ -81,7 +79,7 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
await showMenu(
context: context,
position: position,
color: ColorsManager.whiteColors,
color: ColorsManager.white,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
@ -122,8 +120,7 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
height: 200,
width: 400,
child: Padding(
padding:
const EdgeInsets.only(top: 24, left: 24, right: 24),
padding: const EdgeInsets.only(top: 24, left: 24, right: 24),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
@ -136,14 +133,12 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
padding: const EdgeInsets.only(top: 16),
child: Text(
'Log out of your Syncrow account',
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(
fontSize: 14,
fontWeight: FontWeight.w400,
color: Colors.black,
),
style:
Theme.of(context).textTheme.bodyMedium!.copyWith(
fontSize: 14,
fontWeight: FontWeight.w400,
color: Colors.black,
),
),
),
const SizedBox(
@ -154,7 +149,7 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
SizedBox.square(
dimension: 80,
child: CircleAvatar(
backgroundColor: ColorsManager.whiteColors,
backgroundColor: ColorsManager.white,
child: SizedBox.square(
dimension: 78,
child: SvgPicture.asset(
@ -170,8 +165,7 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
),
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${widget.user?.firstName ?? ''} ${widget.user?.lastName}',
@ -215,13 +209,11 @@ class _UserDropdownMenuState extends State<UserDropdownMenu> {
elevation: 1,
child: Text(
'Cancel',
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(
fontSize: 12,
color: Colors.black,
),
style:
Theme.of(context).textTheme.bodyMedium!.copyWith(
fontSize: 12,
color: Colors.black,
),
),
),
),