refactor: Standardize border radius values across dashboard components

This commit is contained in:
Vaibhav Surve 2025-09-24 15:04:51 +05:30
parent 7d211e24f8
commit 1d9c416f68
6 changed files with 77 additions and 65 deletions

View File

@ -1,15 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:url_strategy/url_strategy.dart'; import 'package:url_strategy/url_strategy.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:marco/controller/permission_controller.dart'; import 'package:marco/controller/permission_controller.dart';
import 'package:marco/controller/project_controller.dart'; import 'package:marco/controller/project_controller.dart';
import 'package:marco/helpers/services/storage/local_storage.dart'; import 'package:marco/helpers/services/storage/local_storage.dart';
import 'package:marco/helpers/services/app_logger.dart'; import 'package:marco/helpers/services/app_logger.dart';
import 'package:marco/helpers/services/auth_service.dart'; import 'package:marco/helpers/services/auth_service.dart';
import 'package:marco/helpers/services/firebase/firebase_messaging_service.dart'; import 'package:marco/helpers/services/firebase/firebase_messaging_service.dart';
import 'package:marco/helpers/services/device_info_service.dart'; import 'package:marco/helpers/services/device_info_service.dart';
import 'package:marco/helpers/theme/theme_customizer.dart'; import 'package:marco/helpers/theme/theme_customizer.dart';
import 'package:marco/helpers/theme/app_theme.dart'; import 'package:marco/helpers/theme/app_theme.dart';
@ -28,7 +27,7 @@ Future<void> initializeApp() async {
await _handleAuthTokens(); await _handleAuthTokens();
await _setupTheme(); await _setupTheme();
await _setupControllers(); await _setupControllers();
await _setupFirebaseMessaging(); await _setupFirebaseMessaging();
_finalizeAppStyle(); _finalizeAppStyle();
@ -47,16 +46,9 @@ Future<void> initializeApp() async {
Future<void> _setupUI() async { Future<void> _setupUI() async {
setPathUrlStrategy(); setPathUrlStrategy();
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( logSafe("💡 UI setup completed with default system behavior.");
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.light,
systemNavigationBarIconBrightness: Brightness.dark,
));
logSafe("💡 UI setup completed.");
} }
Future<void> _setupFirebase() async { Future<void> _setupFirebase() async {
await Firebase.initializeApp(); await Firebase.initializeApp();
logSafe("💡 Firebase initialized."); logSafe("💡 Firebase initialized.");
@ -126,7 +118,6 @@ Future<void> _setupFirebaseMessaging() async {
logSafe("💡 Firebase Messaging initialized."); logSafe("💡 Firebase Messaging initialized.");
} }
void _finalizeAppStyle() { void _finalizeAppStyle() {
AppStyle.init(); AppStyle.init();
logSafe("💡 AppStyle initialized."); logSafe("💡 AppStyle initialized.");

View File

@ -102,7 +102,7 @@ class AttendanceDashboardChart extends StatelessWidget {
BoxDecoration get _containerDecoration => BoxDecoration( BoxDecoration get _containerDecoration => BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(14), borderRadius: BorderRadius.circular(5),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: Colors.grey.withOpacity(0.05), color: Colors.grey.withOpacity(0.05),
@ -160,7 +160,7 @@ class _Header extends StatelessWidget {
), ),
), ),
ToggleButtons( ToggleButtons(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
borderColor: Colors.grey, borderColor: Colors.grey,
fillColor: Colors.blueAccent.withOpacity(0.15), fillColor: Colors.blueAccent.withOpacity(0.15),
selectedBorderColor: Colors.blueAccent, selectedBorderColor: Colors.blueAccent,
@ -204,7 +204,7 @@ class _Header extends StatelessWidget {
: FontWeight.normal, : FontWeight.normal,
), ),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
side: BorderSide( side: BorderSide(
color: selectedRange == label color: selectedRange == label
? Colors.blueAccent ? Colors.blueAccent
@ -279,7 +279,7 @@ class _AttendanceChart extends StatelessWidget {
height: 600, height: 600,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blueGrey.shade50, color: Colors.blueGrey.shade50,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
), ),
child: const Center( child: const Center(
child: Text( child: Text(
@ -307,7 +307,7 @@ class _AttendanceChart extends StatelessWidget {
padding: const EdgeInsets.all(6), padding: const EdgeInsets.all(6),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blueGrey.shade50, color: Colors.blueGrey.shade50,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
), ),
child: SfCartesianChart( child: SfCartesianChart(
tooltipBehavior: TooltipBehavior(enable: true, shared: true), tooltipBehavior: TooltipBehavior(enable: true, shared: true),
@ -383,7 +383,7 @@ class _AttendanceTable extends StatelessWidget {
height: 300, height: 300,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey.shade50, color: Colors.grey.shade50,
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
), ),
child: const Center( child: const Center(
child: Text( child: Text(
@ -405,7 +405,7 @@ class _AttendanceTable extends StatelessWidget {
height: 300, height: 300,
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all(color: Colors.grey.shade300), border: Border.all(color: Colors.grey.shade300),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
color: Colors.grey.shade50, color: Colors.grey.shade50,
), ),
child: SingleChildScrollView( child: SingleChildScrollView(
@ -457,7 +457,7 @@ class _RolePill extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration( decoration: BoxDecoration(
color: color.withOpacity(0.15), color: color.withOpacity(0.15),
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
), ),
child: MyText.labelSmall(role, fontWeight: 500), child: MyText.labelSmall(role, fontWeight: 500),
); );

View File

@ -54,7 +54,7 @@ class DashboardOverviewWidgets {
return SizedBox( return SizedBox(
width: cardWidth, width: cardWidth,
child: MyCard( child: MyCard(
borderRadiusAll: 16, borderRadiusAll: 5,
paddingAll: 20, paddingAll: 20,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -126,7 +126,7 @@ class DashboardOverviewWidgets {
return SizedBox( return SizedBox(
width: cardWidth, width: cardWidth,
child: MyCard( child: MyCard(
borderRadiusAll: 16, borderRadiusAll: 5,
paddingAll: 20, paddingAll: 20,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -208,7 +208,7 @@ class DashboardOverviewWidgets {
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: bgColor, // full color color: bgColor, // full color
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
), ),
child: Column( child: Column(
children: [ children: [
@ -238,7 +238,7 @@ class DashboardOverviewWidgets {
return SizedBox( return SizedBox(
width: cardWidth, width: cardWidth,
child: MyCard( child: MyCard(
borderRadiusAll: 16, borderRadiusAll: 5,
paddingAll: 20, paddingAll: 20,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -262,7 +262,7 @@ class DashboardOverviewWidgets {
width: width, width: width,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey.shade300, color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
), ),
); );
} }

View File

@ -67,7 +67,7 @@ class ProjectProgressChart extends StatelessWidget {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(14), borderRadius: BorderRadius.circular(5),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: Colors.grey.withOpacity(0.04), color: Colors.grey.withOpacity(0.04),
@ -125,7 +125,7 @@ class ProjectProgressChart extends StatelessWidget {
), ),
), ),
ToggleButtons( ToggleButtons(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
borderColor: Colors.grey, borderColor: Colors.grey,
fillColor: Colors.blueAccent.withOpacity(0.15), fillColor: Colors.blueAccent.withOpacity(0.15),
selectedBorderColor: Colors.blueAccent, selectedBorderColor: Colors.blueAccent,
@ -178,7 +178,7 @@ class ProjectProgressChart extends StatelessWidget {
selectedRange == label ? FontWeight.w600 : FontWeight.normal, selectedRange == label ? FontWeight.w600 : FontWeight.normal,
), ),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
side: BorderSide( side: BorderSide(
color: selectedRange == label color: selectedRange == label
? Colors.blueAccent ? Colors.blueAccent
@ -202,7 +202,7 @@ class ProjectProgressChart extends StatelessWidget {
padding: const EdgeInsets.all(6), padding: const EdgeInsets.all(6),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blueGrey.shade50, color: Colors.blueGrey.shade50,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
), ),
child: SfCartesianChart( child: SfCartesianChart(
tooltipBehavior: TooltipBehavior(enable: true), tooltipBehavior: TooltipBehavior(enable: true),
@ -276,7 +276,7 @@ class ProjectProgressChart extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 8), padding: const EdgeInsets.symmetric(vertical: 8),
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all(color: Colors.grey.shade300), border: Border.all(color: Colors.grey.shade300),
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
color: Colors.grey.shade50, color: Colors.grey.shade50,
), ),
child: LayoutBuilder( child: LayoutBuilder(
@ -328,7 +328,7 @@ class ProjectProgressChart extends StatelessWidget {
height: height > 280 ? 280 : height, height: height > 280 ? 280 : height,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blueGrey.shade50, color: Colors.blueGrey.shade50,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
), ),
child: const Center( child: const Center(
child: Text( child: Text(

View File

@ -102,7 +102,7 @@ class _DashboardScreenState extends State<DashboardScreen> with UIMixin {
} }
return ClipRRect( return ClipRRect(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
child: SizedBox( child: SizedBox(
height: 400, height: 400,
child: ProjectProgressChart( child: ProjectProgressChart(
@ -141,7 +141,7 @@ class _DashboardScreenState extends State<DashboardScreen> with UIMixin {
child: IgnorePointer( child: IgnorePointer(
ignoring: !isProjectSelected, ignoring: !isProjectSelected,
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
child: SizedBox( child: SizedBox(
height: 400, height: 400,
child: AttendanceDashboardChart(), child: AttendanceDashboardChart(),
@ -198,7 +198,7 @@ class _DashboardScreenState extends State<DashboardScreen> with UIMixin {
width: width, width: width,
height: 100, height: 100,
paddingAll: 5, paddingAll: 5,
borderRadiusAll: 10, borderRadiusAll: 5,
border: Border.all(color: Colors.grey.withOpacity(0.15)), border: Border.all(color: Colors.grey.withOpacity(0.15)),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -304,12 +304,12 @@ class _DashboardScreenState extends State<DashboardScreen> with UIMixin {
ignoring: !isEnabled, ignoring: !isEnabled,
child: InkWell( child: InkWell(
onTap: () => _handleStatCardTap(statItem, isEnabled), onTap: () => _handleStatCardTap(statItem, isEnabled),
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
child: MyCard.bordered( child: MyCard.bordered(
width: width, width: width,
height: cardHeight, height: cardHeight,
paddingAll: 4, paddingAll: 4,
borderRadiusAll: 6, borderRadiusAll: 5,
border: Border.all(color: Colors.grey.withOpacity(0.15)), border: Border.all(color: Colors.grey.withOpacity(0.15)),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

View File

@ -122,7 +122,7 @@ class _LayoutState extends State<Layout> {
return Card( return Card(
elevation: 4, elevation: 4,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
), ),
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
@ -133,12 +133,48 @@ class _LayoutState extends State<Layout> {
child: Row( child: Row(
children: [ children: [
ClipRRect( ClipRRect(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
child: Image.asset( child: Stack(
Images.logoDark, clipBehavior: Clip.none,
height: 50, children: [
width: 50, Image.asset(
fit: BoxFit.contain, Images.logoDark,
height: 50,
width: 50,
fit: BoxFit.contain,
),
if (isBetaEnvironment)
Positioned(
bottom: 0,
left: 0,
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 4, vertical: 2),
decoration: BoxDecoration(
color: Colors.deepPurple,
borderRadius:
BorderRadius.circular(6), // capsule shape
border: Border.all(
color: Colors.white, width: 1.2),
boxShadow: [
BoxShadow(
color: Colors.black12,
blurRadius: 2,
offset: Offset(0, 1),
)
],
),
child: const Text(
'B',
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
),
),
],
), ),
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
@ -218,21 +254,6 @@ class _LayoutState extends State<Layout> {
], ],
), ),
), ),
if (isBetaEnvironment)
Container(
margin: const EdgeInsets.only(left: 8),
padding: const EdgeInsets.symmetric(
horizontal: 8, vertical: 2),
decoration: BoxDecoration(
color: Colors.deepPurple,
borderRadius: BorderRadius.circular(6),
),
child: MyText.bodySmall(
'BETA',
color: Colors.white,
fontWeight: 700,
),
),
Stack( Stack(
clipBehavior: Clip.none, clipBehavior: Clip.none,
alignment: Alignment.center, alignment: Alignment.center,
@ -268,7 +289,7 @@ class _LayoutState extends State<Layout> {
left: 0, left: 0,
right: 0, right: 0,
child: Container( child: Container(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(5),
color: Colors.white, color: Colors.white,
child: _buildProjectList(context, isMobile), child: _buildProjectList(context, isMobile),
), ),
@ -285,7 +306,7 @@ class _LayoutState extends State<Layout> {
return Card( return Card(
elevation: 4, elevation: 4,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
), ),
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
child: Padding( child: Padding(
@ -297,7 +318,7 @@ class _LayoutState extends State<Layout> {
width: 50, width: 50,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey.shade300, color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(5),
), ),
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
@ -343,11 +364,11 @@ class _LayoutState extends State<Layout> {
right: 16, right: 16,
child: Material( child: Material(
elevation: 4, elevation: 4,
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(5),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
child: _buildProjectList(context, isMobile), child: _buildProjectList(context, isMobile),
@ -397,7 +418,7 @@ class _LayoutState extends State<Layout> {
? Colors.blueAccent.withOpacity(0.1) ? Colors.blueAccent.withOpacity(0.1)
: Colors.transparent, : Colors.transparent,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6), borderRadius: BorderRadius.circular(5),
), ),
visualDensity: const VisualDensity(vertical: -4), visualDensity: const VisualDensity(vertical: -4),
); );