107 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:easy_localization/easy_localization.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:gap/gap.dart';
 | 
						|
import 'package:island/models/activity.dart';
 | 
						|
import 'package:island/services/time.dart';
 | 
						|
import 'package:island/utils/activity_utils.dart';
 | 
						|
import 'package:material_symbols_icons/symbols.dart';
 | 
						|
import 'package:styled_widget/styled_widget.dart';
 | 
						|
 | 
						|
class EventDetailsWidget extends StatelessWidget {
 | 
						|
  final DateTime selectedDay;
 | 
						|
  final SnEventCalendarEntry? event;
 | 
						|
 | 
						|
  const EventDetailsWidget({
 | 
						|
    super.key,
 | 
						|
    required this.selectedDay,
 | 
						|
    required this.event,
 | 
						|
  });
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return Column(
 | 
						|
      crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
						|
      children: [
 | 
						|
        Text(DateFormat.EEEE().format(selectedDay))
 | 
						|
            .fontSize(16)
 | 
						|
            .bold()
 | 
						|
            .textColor(Theme.of(context).colorScheme.onSecondaryContainer),
 | 
						|
        Text(DateFormat.yMd().format(selectedDay))
 | 
						|
            .fontSize(12)
 | 
						|
            .textColor(Theme.of(context).colorScheme.onSecondaryContainer),
 | 
						|
        const Gap(16),
 | 
						|
        if (event?.checkInResult != null)
 | 
						|
          Column(
 | 
						|
            crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
						|
            children: [
 | 
						|
              Text(
 | 
						|
                'checkInResultLevel${event!.checkInResult!.level}',
 | 
						|
              ).tr().fontSize(16).bold(),
 | 
						|
              for (final tip in event!.checkInResult!.tips)
 | 
						|
                Row(
 | 
						|
                  crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                  spacing: 8,
 | 
						|
                  children: [
 | 
						|
                    Icon(
 | 
						|
                      Symbols.circle,
 | 
						|
                      size: 12,
 | 
						|
                      fill: 1,
 | 
						|
                    ).padding(top: 4, right: 4),
 | 
						|
                    Icon(
 | 
						|
                      tip.isPositive ? Symbols.thumb_up : Symbols.thumb_down,
 | 
						|
                      size: 14,
 | 
						|
                    ).padding(top: 2.5),
 | 
						|
                    Expanded(
 | 
						|
                      child: Column(
 | 
						|
                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                        children: [Text(tip.title).bold(), Text(tip.content)],
 | 
						|
                      ),
 | 
						|
                    ),
 | 
						|
                  ],
 | 
						|
                ).padding(top: 8),
 | 
						|
              if (event!.statuses.isNotEmpty) ...[
 | 
						|
                const Gap(16),
 | 
						|
                Text('statusLabel').tr().fontSize(16).bold(),
 | 
						|
              ],
 | 
						|
              for (final status in event!.statuses) ...[
 | 
						|
                Row(
 | 
						|
                  spacing: 8,
 | 
						|
                  children: [
 | 
						|
                    Icon(switch (status.attitude) {
 | 
						|
                      0 => Symbols.sentiment_satisfied,
 | 
						|
                      2 => Symbols.sentiment_dissatisfied,
 | 
						|
                      _ => Symbols.sentiment_neutral,
 | 
						|
                    }),
 | 
						|
                    Expanded(
 | 
						|
                      child: Column(
 | 
						|
                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                        children: [
 | 
						|
                          if ((getActivityTitle(status.label, status.meta) ??
 | 
						|
                                  status.label)
 | 
						|
                              .isNotEmpty)
 | 
						|
                            Text(
 | 
						|
                              getActivityTitle(status.label, status.meta) ??
 | 
						|
                                  status.label,
 | 
						|
                            ),
 | 
						|
                          if (getActivitySubtitle(status.meta) != null)
 | 
						|
                            Text(
 | 
						|
                              getActivitySubtitle(status.meta)!,
 | 
						|
                            ).fontSize(11).opacity(0.8),
 | 
						|
                          Text(
 | 
						|
                            '${status.createdAt.formatSystem()} - ${status.clearedAt?.formatSystem() ?? 'present'.tr()}',
 | 
						|
                          ).fontSize(11).opacity(0.8),
 | 
						|
                        ],
 | 
						|
                      ),
 | 
						|
                    ),
 | 
						|
                  ],
 | 
						|
                ).padding(vertical: 8),
 | 
						|
              ],
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
        if (event?.checkInResult == null && (event?.statuses.isEmpty ?? true))
 | 
						|
          Text('eventCalendarEmpty').tr(),
 | 
						|
      ],
 | 
						|
    ).padding(vertical: 24, horizontal: 24);
 | 
						|
  }
 | 
						|
}
 |