diff --git a/assets/target_clean.png b/assets/target_clean.png new file mode 100644 index 0000000..b341847 Binary files /dev/null and b/assets/target_clean.png differ diff --git a/assets/targets/image (10).jpg b/assets/targets/image (10).jpg new file mode 100644 index 0000000..be46bc4 Binary files /dev/null and b/assets/targets/image (10).jpg differ diff --git a/assets/targets/image (11).jpg b/assets/targets/image (11).jpg new file mode 100644 index 0000000..d368831 Binary files /dev/null and b/assets/targets/image (11).jpg differ diff --git a/assets/targets/image (12).jpg b/assets/targets/image (12).jpg new file mode 100644 index 0000000..708c18e Binary files /dev/null and b/assets/targets/image (12).jpg differ diff --git a/assets/targets/image (13).jpg b/assets/targets/image (13).jpg new file mode 100644 index 0000000..b4b288c Binary files /dev/null and b/assets/targets/image (13).jpg differ diff --git a/assets/targets/image (14).jpg b/assets/targets/image (14).jpg new file mode 100644 index 0000000..ff89465 Binary files /dev/null and b/assets/targets/image (14).jpg differ diff --git a/assets/targets/image (16).jpg b/assets/targets/image (16).jpg new file mode 100644 index 0000000..ab5d66c Binary files /dev/null and b/assets/targets/image (16).jpg differ diff --git a/assets/targets/image (17).jpg b/assets/targets/image (17).jpg new file mode 100644 index 0000000..fb5b208 Binary files /dev/null and b/assets/targets/image (17).jpg differ diff --git a/assets/targets/image (18).jpg b/assets/targets/image (18).jpg new file mode 100644 index 0000000..00be973 Binary files /dev/null and b/assets/targets/image (18).jpg differ diff --git a/assets/targets/image (19).jpg b/assets/targets/image (19).jpg new file mode 100644 index 0000000..8cb11d0 Binary files /dev/null and b/assets/targets/image (19).jpg differ diff --git a/assets/targets/image (20).jpg b/assets/targets/image (20).jpg new file mode 100644 index 0000000..39e48a9 Binary files /dev/null and b/assets/targets/image (20).jpg differ diff --git a/assets/targets/image (21).jpg b/assets/targets/image (21).jpg new file mode 100644 index 0000000..7d6a804 Binary files /dev/null and b/assets/targets/image (21).jpg differ diff --git a/assets/targets/image (23).jpg b/assets/targets/image (23).jpg new file mode 100644 index 0000000..2b9f8c3 Binary files /dev/null and b/assets/targets/image (23).jpg differ diff --git a/assets/targets/image (24).jpg b/assets/targets/image (24).jpg new file mode 100644 index 0000000..aa693d4 Binary files /dev/null and b/assets/targets/image (24).jpg differ diff --git a/assets/targets/image (25).jpg b/assets/targets/image (25).jpg new file mode 100644 index 0000000..0484e26 Binary files /dev/null and b/assets/targets/image (25).jpg differ diff --git a/assets/targets/image (26).jpg b/assets/targets/image (26).jpg new file mode 100644 index 0000000..23657ac Binary files /dev/null and b/assets/targets/image (26).jpg differ diff --git a/assets/targets/image (29).jpg b/assets/targets/image (29).jpg new file mode 100644 index 0000000..91ed36a Binary files /dev/null and b/assets/targets/image (29).jpg differ diff --git a/assets/targets/image (5).jpg b/assets/targets/image (5).jpg new file mode 100644 index 0000000..9929a58 Binary files /dev/null and b/assets/targets/image (5).jpg differ diff --git a/assets/targets/image (6).jpg b/assets/targets/image (6).jpg new file mode 100644 index 0000000..57ddc6d Binary files /dev/null and b/assets/targets/image (6).jpg differ diff --git a/assets/targets/image (7).jpg b/assets/targets/image (7).jpg new file mode 100644 index 0000000..dda932e Binary files /dev/null and b/assets/targets/image (7).jpg differ diff --git a/assets/targets/image (8).jpg b/assets/targets/image (8).jpg new file mode 100644 index 0000000..919f037 Binary files /dev/null and b/assets/targets/image (8).jpg differ diff --git a/assets/targets/image (9).jpg b/assets/targets/image (9).jpg new file mode 100644 index 0000000..d1c265f Binary files /dev/null and b/assets/targets/image (9).jpg differ diff --git a/lib/main.dart b/lib/main.dart index 6ca68b1..6b7c050 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,6 +46,16 @@ class MyApp extends StatelessWidget { backgroundColor: Colors.grey[900], ), ), + builder: (context, child) { + final originalTextScaler = MediaQuery.of(context).textScaler; + final clampedScale = originalTextScaler.clamp(minScaleFactor: 0.8, maxScaleFactor: 1.2); + return MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaler: clampedScale, + ), + child: child!, + ); + }, home: const HomeScreen(), ); } diff --git a/lib/screens/calendar_screen.dart b/lib/screens/calendar_screen.dart index e50f6aa..d8e7062 100644 --- a/lib/screens/calendar_screen.dart +++ b/lib/screens/calendar_screen.dart @@ -670,6 +670,22 @@ class _CalendarScreenState extends State { ), const SizedBox(height: 8), _buildSampleEventCard(accentColor, EventType.sestanek), + const SizedBox(height: 32), + // Other dates section + Text( + 'Other Dates (without emphasis)', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.grey[600], + ), + ), + const SizedBox(height: 8), + _buildOtherDateEventCard(accentColor, EventType.regular, 'Tomorrow'), + const SizedBox(height: 12), + _buildOtherDateEventCard(accentColor, EventType.competition, 'Next Week'), + const SizedBox(height: 12), + _buildOtherDateEventCard(accentColor, EventType.sestanek, 'In 5 days'), const SizedBox(height: 24), ], ), @@ -942,11 +958,11 @@ class _CalendarScreenState extends State { color: backgroundColor, borderRadius: BorderRadius.circular(12), boxShadow: [ - // Card glow effect for today's events + // Strong glow effect for today's events (sample is always today) BoxShadow( - color: cardAccentColor.withValues(alpha: 0.3), - blurRadius: 16, - offset: const Offset(0, 4), + color: cardAccentColor.withValues(alpha: 0.4), + blurRadius: 20, + offset: const Offset(0, 6), ), // Subtle inner shadow BoxShadow( @@ -964,7 +980,7 @@ class _CalendarScreenState extends State { width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( - color: cardAccentColor.withValues(alpha: 0.2), + color: cardAccentColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(12), topRight: Radius.circular(12), @@ -972,22 +988,22 @@ class _CalendarScreenState extends State { ), child: Row( children: [ - // Small colored indicator + // Small white indicator line Container( width: 4, height: 16, decoration: BoxDecoration( - color: cardAccentColor, + color: Colors.white, borderRadius: BorderRadius.circular(2), ), ), const SizedBox(width: 8), Text( _t('Today'), - style: TextStyle( + style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, - color: cardAccentColor, + color: Colors.white, ), ), const Spacer(), @@ -1005,7 +1021,7 @@ class _CalendarScreenState extends State { const SizedBox(width: 4), Text( eventType == EventType.competition - ? _t('TEKMOVANJE') + ? _t('TEKMOWANIE') : eventType == EventType.sestanek ? _t('SESTANEK') : _t('DEŽURSTVO'), @@ -1052,13 +1068,6 @@ class _CalendarScreenState extends State { value: time, accentColor: cardAccentColor, ), - const SizedBox(height: 6), - // Location - _buildDetailRowInline( - icon: Icons.location_on, - value: _t('Strelišče Ljubljana'), - accentColor: cardAccentColor, - ), ], ), ), @@ -1068,6 +1077,147 @@ class _CalendarScreenState extends State { ); } + Widget _buildOtherDateEventCard(Color accentColor, EventType eventType, String dateLabel) { + // Color coding for each event type + Color cardAccentColor; + Color backgroundColor = Colors.grey[300]!; + IconData eventIcon; + String title; + String time; + + switch (eventType) { + case EventType.competition: + cardAccentColor = Colors.orange; + eventIcon = Icons.emoji_events; + title = _t('League / Competition'); + time = '09:00 - 18:00'; + break; + case EventType.sestanek: + cardAccentColor = Colors.red; + eventIcon = Icons.groups; + title = _t('Team Meeting'); + time = '18:00 - 19:00'; + break; + case EventType.regular: + cardAccentColor = Colors.blue; + eventIcon = Icons.event; + title = _t('Duty Shift'); + time = '14:00 - 16:00'; + break; + } + + return RepaintBoundary( + child: Container( + margin: const EdgeInsets.symmetric(vertical: 6, horizontal: 16), + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(12), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Date header + Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + decoration: BoxDecoration( + color: cardAccentColor.withValues(alpha: 0.7), + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(12), + topRight: Radius.circular(12), + ), + ), + child: Row( + children: [ + // Small white indicator line + Container( + width: 4, + height: 16, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(width: 8), + Text( + dateLabel, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + const Spacer(), + // Event type badge + Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), + decoration: BoxDecoration( + color: cardAccentColor, + borderRadius: BorderRadius.circular(12), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(eventIcon, size: 12, color: Colors.white), + const SizedBox(width: 4), + Text( + eventType == EventType.competition + ? _t('TEKMOVANJE') + : eventType == EventType.sestanek + ? _t('SESTANEK') + : _t('DEŽURSTVO'), + style: const TextStyle( + fontSize: 10, + fontWeight: FontWeight.bold, + color: Colors.white, + letterSpacing: 0.8, + ), + ), + ], + ), + ), + ], + ), + ), + // Main content + Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Title with icon + Row( + children: [ + Icon(eventIcon, size: 20, color: cardAccentColor), + const SizedBox(width: 8), + Expanded( + child: Text( + title, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: Colors.black87, + ), + ), + ), + ], + ), + const SizedBox(height: 8), + // Time range + _buildDetailRowInline( + icon: Icons.access_time, + value: time, + accentColor: cardAccentColor, + ), + ], + ), + ), + ], + ), + ), + ); + } + Widget _buildEventCard(CalendarEvent event, Color accentColor) { final startTime = event.startTime; final isAllDay = event.isAllDay; @@ -1131,19 +1281,19 @@ class _CalendarScreenState extends State { color: backgroundColor, borderRadius: BorderRadius.circular(12), boxShadow: [ - // Card glow effect (stronger for today's events) - if (isToday) + // Strong glow effect only for today's events + if (isToday) ...[ BoxShadow( - color: cardAccentColor.withValues(alpha: 0.3), - blurRadius: 16, - offset: const Offset(0, 4), + color: cardAccentColor.withValues(alpha: 0.4), + blurRadius: 20, + offset: const Offset(0, 6), ), - // Subtle inner shadow - BoxShadow( - color: Colors.grey.withValues(alpha: 0.1), - blurRadius: 4, - offset: const Offset(0, 2), - ), + BoxShadow( + color: Colors.grey.withValues(alpha: 0.1), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], ], ), child: Column( @@ -1154,7 +1304,7 @@ class _CalendarScreenState extends State { width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( - color: cardAccentColor, + color: isToday ? cardAccentColor : cardAccentColor.withValues(alpha: 0.7), borderRadius: const BorderRadius.only( topLeft: Radius.circular(12), topRight: Radius.circular(12), diff --git a/lib/screens/spectator_screen.dart b/lib/screens/spectator_screen.dart index be98c5d..1a314e8 100644 --- a/lib/screens/spectator_screen.dart +++ b/lib/screens/spectator_screen.dart @@ -228,6 +228,7 @@ class _SpectatorScreenState extends State { ), backgroundColor: Colors.grey[900], elevation: 0, + scrolledUnderElevation: 0, leading: IconButton( icon: const Icon(Icons.arrow_back, color: Colors.white), onPressed: () => Navigator.pop(context), @@ -250,7 +251,7 @@ class _SpectatorScreenState extends State { ), ) : ListView.builder( - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.fromLTRB(8, 8, 8, 24), itemCount: visibleCameras.length, itemBuilder: (context, index) { final camera = visibleCameras[index];