import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:food_health/api/dto/user_profile_dto.dart'; import 'package:food_health/api/endpoints/profile_api.dart'; import 'package:food_health/config/theme/custom_colors.dart'; import 'package:go_router/go_router.dart'; import 'package:remixicon/remixicon.dart'; import '../../../router/config/route_paths.dart'; import 'widget/title_card.dart'; import 'widget/user_card.dart'; class MyPage extends StatefulWidget { const MyPage({super.key}); @override State createState() => _MyPageState(); } class _MyPageState extends State with AutomaticKeepAliveClientMixin { UserProfileDto _userProfile = UserProfileDto(); @override void initState() { super.initState(); _init(); } void _init() async { var res = await getUserProfileApi(); setState(() { _userProfile = res; }); _showEditProfile(); } void _goEdit() async { await context.push(RoutePaths.myEdit, extra: _userProfile); _init(); } void _showEditProfile() { if (_userProfile.qStatus != 1) { showCupertinoDialog( context: context, builder: (_) => CupertinoAlertDialog( title: Text("Complete Your Profile"), content: Text("Let’s get to know you better! Please take a quick survey to personalize your experience."), actions: [ CupertinoDialogAction( child: Text("Not Now"), onPressed: () { context.pop(); }, ), CupertinoDialogAction( child: Text("Take Survey"), onPressed: () { context.pop(); _goEdit(); }, ), ], ), ); } } @override Widget build(BuildContext context) { return SafeArea( child: ListView( padding: EdgeInsets.all(15), children: [ UserCard( detail: _userProfile, onEdit: _goEdit, ), Column( children: [ TitleCard( title: "Food Allergies", icon: Icon( RemixIcons.shield_line, color: Theme.of(context).colorScheme.danger, ), child: buildTagList( emptyText: "No food allergies reported", tags: _userProfile.foodAllergiesList, color: Theme.of(context).colorScheme.danger, ), ), TitleCard( title: "No preferences", icon: Icon( RemixIcons.heart_line, color: Theme.of(context).colorScheme.success, ), child: buildTagList( emptyText: "No dietary preferences reported", tags: _userProfile.dietaryPreferencesList, color: Theme.of(context).colorScheme.success, ), ), TitleCard( title: "Medical Information", icon: Icon( RemixIcons.user_line, color: Theme.of(context).colorScheme.primary, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only(bottom: 10), child: Text("Medical Conditions"), ), Container( margin: EdgeInsets.only(bottom: 10), child: buildTagList( emptyText: "No medical conditions reported", tags: _userProfile.medicalInformationList, color: Theme.of(context).colorScheme.primary, ), ), Container( margin: EdgeInsets.only(bottom: 10), child: Text("Current Medications"), ), buildTagList( emptyText: "No medications reported", tags: _userProfile.currentMedicationsList, color: Theme.of(context).colorScheme.primary, ), ], ), ), ], ), ], ), ); } Widget buildTagList({ required String emptyText, required List tags, required Color color, }) { if (tags.isEmpty) { return Text( emptyText, style: TextStyle( color: Theme.of(context).colorScheme.success, ), ); } else { return Wrap( spacing: 15, runSpacing: 15, children: tags.map((item) { return Container( padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), decoration: BoxDecoration( color: color.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(20), ), child: Text( item, style: TextStyle( color: color, fontSize: 14, fontWeight: FontWeight.w700, ), ), ); }).toList(), ); } } @override bool get wantKeepAlive => true; }