diff --git a/frontend/app_student/android/app/src/main/AndroidManifest.xml b/frontend/app_student/android/app/src/main/AndroidManifest.xml index e67becb..ecf500b 100644 --- a/frontend/app_student/android/app/src/main/AndroidManifest.xml +++ b/frontend/app_student/android/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ + android:icon="@mipmap/launcher_icon"> entity.ine; String get name => entity.firstName; DateTime get birthDate => entity.birthDate; - String? get className => entity.className ?? ''; + String? get className => entity.className; } diff --git a/frontend/app_student/lib/api/users/repositories/user_repository.dart b/frontend/app_student/lib/api/users/repositories/user_repository.dart index 6f3d76a..d94e2da 100644 --- a/frontend/app_student/lib/api/users/repositories/user_repository.dart +++ b/frontend/app_student/lib/api/users/repositories/user_repository.dart @@ -54,4 +54,12 @@ class UserRepository { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString('className', className); } + + Future delete() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + await prefs.remove('ine'); + await prefs.remove('name'); + await prefs.remove('birthDate'); + await prefs.remove('className'); + } } diff --git a/frontend/app_student/lib/class_groups/views/class_group.dart b/frontend/app_student/lib/class_groups/views/class_group.dart new file mode 100644 index 0000000..e8a04d1 --- /dev/null +++ b/frontend/app_student/lib/class_groups/views/class_group.dart @@ -0,0 +1,76 @@ +import 'package:app_student/api/class_groups/repositories/class_group_repository.dart'; +import 'package:app_student/class_groups/cubit/class_group_cubit.dart'; +import 'package:app_student/class_groups/views/widgets/card_list.dart'; +import 'package:app_student/users/cubit/user_cubit.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; + +import '../../api/users/repositories/user_repository.dart'; +import '../../shared_components/app_bar.dart'; +import '../../shared_components/header_subtitle.dart'; +import '../../shared_components/header_title.dart'; + +class ClassGroupPage extends StatelessWidget { + const ClassGroupPage({super.key}); + + @override + Widget build(BuildContext context) { + final classRepository = + RepositoryProvider.of(context); + final userRepository = RepositoryProvider.of(context); + final classCubit = ClassGroupCubit(classRepository: classRepository) + ..fetchClasses(); + final userCubit = UserCubit(userRepository: userRepository)..fetchUser(); + + return MultiBlocProvider( + providers: [ + BlocProvider(create: (context) => classCubit), + BlocProvider(create: (context) => userCubit), + ], + child: Scaffold( + appBar: const CustomAppBar(), + body: BlocBuilder( + builder: (context, userState) { + if (userState is UserClassesSelected) { + WidgetsBinding.instance.addPostFrameCallback((_) { + context.go('/schedule'); + }); + return const Center(child: CircularProgressIndicator()); + } else if (userState is UserLoading) { + return const Center(child: CircularProgressIndicator()); + } else if (userState is UserLoaded) { + final user = userState.user; + return BlocBuilder( + builder: (context, classState) { + if (classState is ClassGroupLoading) { + return const Center(child: CircularProgressIndicator()); + } else if (classState is ClassGroupLoaded) { + return Column( + children: [ + HeaderTitle(AppLocalizations.of(context)! + .classSelectionTitle(user.name)), + HeaderSubtitle(AppLocalizations.of(context)! + .classSelectionSubtitle), + Expanded( + child: CardList(classesList: classState.classes), + ), + ], + ); + } else if (classState is ClassGroupError) { + return Center(child: Text(classState.message)); + } else { + return const Center(child: CircularProgressIndicator()); + } + }, + ); + } else { + return const Center(child: CircularProgressIndicator()); + } + }, + ), + ), + ); + } +} diff --git a/frontend/app_student/lib/class_groups/views/class_group_page.dart b/frontend/app_student/lib/class_groups/views/class_group_page.dart deleted file mode 100644 index 8f98f17..0000000 --- a/frontend/app_student/lib/class_groups/views/class_group_page.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:app_student/api/class_groups/repositories/class_group_repository.dart'; -import 'package:app_student/class_groups/cubit/class_group_cubit.dart'; -import 'package:app_student/class_groups/views/widgets/card_list.dart'; -import 'package:app_student/class_groups/views/widgets/header/header_logo.dart'; -import 'package:app_student/class_groups/views/widgets/header/header_text.dart'; -import 'package:app_student/class_groups/views/widgets/header/header_title.dart'; -import 'package:app_student/users/cubit/user_cubit.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:go_router/go_router.dart'; - -import '../../api/users/models/user_model.dart'; - -class ClassGroupPage extends StatelessWidget { - const ClassGroupPage({super.key}); - - @override - Widget build(BuildContext context) { - final classRepository = - RepositoryProvider.of(context); - final classCubit = ClassGroupCubit( - classRepository: classRepository, - )..fetchClasses(); - - return BlocProvider( - create: (context) => classCubit, - child: FutureBuilder( - future: context.read().getCurrentUser(), - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const Center(child: CircularProgressIndicator()); - } else if (snapshot.hasError) { - return Center(child: Text('Erreur: ${snapshot.error}')); - } else { - final user = snapshot.data; - return Scaffold( - body: BlocListener( - listener: (context, state) { - if (state is UserClassesSelected) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go('/schedule'); - }); - } - }, - child: BlocBuilder( - builder: (context, state) { - if (state is ClassGroupLoading) { - return const Center(child: CircularProgressIndicator()); - } else if (state is ClassGroupLoaded) { - return Column( - children: [ - const HeaderLogo(), - HeaderTitle('Bonjour, ${user?.name}'), - const HeaderText('Choisis ta promotion :'), - Expanded( - child: CardList(classesList: state.classes), - ), - ], - ); - } else if (state is ClassGroupError) { - return Center(child: Text(state.message)); - } else { - return const SizedBox.shrink(); - } - }, - ), - ), - ); - } - }, - ), - ); - } -} diff --git a/frontend/app_student/lib/class_groups/views/widgets/header/header_logo.dart b/frontend/app_student/lib/class_groups/views/widgets/header/header_logo.dart deleted file mode 100644 index 3aa3ab3..0000000 --- a/frontend/app_student/lib/class_groups/views/widgets/header/header_logo.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -class HeaderLogo extends StatelessWidget { - const HeaderLogo({super.key}); - - @override - Widget build(BuildContext context) { - return AppBar( - backgroundColor: const Color(0xFF005067), - toolbarHeight: 70.0, - title: Opacity( - opacity: 0.5, - child: Image.asset( - 'assets/images/3il-icon-white.png', - fit: BoxFit.contain, - ), - ), - centerTitle: true, - ); - } -} diff --git a/frontend/app_student/lib/generated/assets.dart b/frontend/app_student/lib/generated/assets.dart new file mode 100644 index 0000000..f553066 --- /dev/null +++ b/frontend/app_student/lib/generated/assets.dart @@ -0,0 +1,22 @@ +///This file is automatically generated. DO NOT EDIT, all your changes would be lost. +class Assets { + Assets._(); + + static const String appStudent = '.env'; + static const String fontsArial = 'assets/fonts/arial.ttf'; + static const String icon3ilIcon = 'assets/icon/3il-icon.png'; + static const String icon3ilLogoWhite = 'assets/icon/3il-logo-white.jpeg'; + static const String images3ilIcon = 'assets/images/3il-icon.png'; + static const String images3ilIconBlue = 'assets/images/3il-icon-blue.png'; + static const String images3ilIconWhite = 'assets/images/3il-icon-white.png'; + static const String images3ilLogo = 'assets/images/3il-logo.jpg'; + static const String images3ilLogoWhite = 'assets/images/3il-logo-white.jpeg'; + static const String imagesCalendar = 'assets/images/calendar.svg'; + static const String imagesDisconnect = 'assets/images/disconnect.svg'; + static const String imagesEating = 'assets/images/eating.svg'; + static const String imagesProfil = 'assets/images/profil.svg'; + static const String imagesSchool = 'assets/images/school.svg'; + static const String imagesStudentInfo = 'assets/images/student-info.svg'; + static const String imagesTeams = 'assets/images/teams.svg'; + static const String imagesUser = 'assets/images/user.svg'; +} diff --git a/frontend/app_student/lib/l10n/app_fr.arb b/frontend/app_student/lib/l10n/app_fr.arb index 07ed565..153c924 100644 --- a/frontend/app_student/lib/l10n/app_fr.arb +++ b/frontend/app_student/lib/l10n/app_fr.arb @@ -79,6 +79,22 @@ "description": "Label pour la salle", "example": "Salle" }, + "disconnectedMessage": "Vous avez été déconnecté", + "@disconnectedMessage": { + "description": "Message d'erreur pour une déconnexion" + }, + "disconnect": "Déconnexion", + "@disconnect": { + "description": "Texte du bouton de déconnexion" + }, + "schedule": "Emploi du temps", + "@schedule": { + "description": "Texte du bouton pour l'emploi du temps" + }, + "profil": "Profil", + "@profil": { + "description": "Texte du bouton pour le profil" + }, "profilMessageTitle": "Quel beau profil {firstName} !", "@profilMessageTitle": { "description": "Message d'accueil de la page de profil", @@ -93,4 +109,4 @@ "@profilChangeClassButton": { "description": "Texte du bouton pour changer de classe" } -} +} \ No newline at end of file diff --git a/frontend/app_student/lib/login/cubit/login_cubit.dart b/frontend/app_student/lib/login/cubit/login_cubit.dart index ba67eff..81cb043 100644 --- a/frontend/app_student/lib/login/cubit/login_cubit.dart +++ b/frontend/app_student/lib/login/cubit/login_cubit.dart @@ -31,7 +31,12 @@ class LoginCubit extends Cubit { Future checkUserAuthentication() async { try { - await userRepository.getUser(); + var user = await userRepository.getUser(); + // Si la classe est vide + if (user.className == '') { + emit(LoginInitial()); + return false; + } emit(LoginAuthenticated()); return true; } catch (e) { diff --git a/frontend/app_student/lib/login/views/login.dart b/frontend/app_student/lib/login/views/login.dart new file mode 100644 index 0000000..b82f8f2 --- /dev/null +++ b/frontend/app_student/lib/login/views/login.dart @@ -0,0 +1,52 @@ +import 'package:app_student/login/cubit/login_cubit.dart'; +import 'package:app_student/login/views/login_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:go_router/go_router.dart'; + +import '../../users/cubit/user_cubit.dart'; + +class LoginPage extends StatelessWidget { + const LoginPage({super.key}); + + @override + Widget build(BuildContext context) { + return BlocConsumer( + listener: (context, state) {}, + builder: (context, state) { + return BlocBuilder( + builder: (context, userState) { + if (state is RedirectToClassSelection) { + WidgetsBinding.instance.addPostFrameCallback((_) { + context.go('/classList'); + }); + return Container(); + } else if (state is LoginInitial) { + return LoginView(AppLocalizations.of(context)!.loginWelcomeTitle); + } else if (state is LoginAuthenticated) { + WidgetsBinding.instance.addPostFrameCallback((_) { + context.go('/schedule'); + }); + return Container(); + } else if (state is LoginFieldError) { + WidgetsBinding.instance.addPostFrameCallback((_) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: + Text(AppLocalizations.of(context)!.loginFieldError), + backgroundColor: Colors.red, + ), + ); + }); + return LoginView( + AppLocalizations.of(context)!.loginWelcomeTitleError); + } else { + return Container(); + } + }, + ); + }, + ); + } +} diff --git a/frontend/app_student/lib/login/views/login_page.dart b/frontend/app_student/lib/login/views/login_page.dart deleted file mode 100644 index a2756fe..0000000 --- a/frontend/app_student/lib/login/views/login_page.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:app_student/login/cubit/login_cubit.dart'; -import 'package:app_student/login/widgets/form/form_login.dart'; -import 'package:app_student/login/widgets/header/header_text.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:go_router/go_router.dart'; - -import '../widgets/header/header_logo.dart'; - -class LoginPage extends StatelessWidget { - const LoginPage({super.key}); - - @override - Widget build(BuildContext context) { - return BlocBuilder( - builder: (context, state) { - if (state is RedirectToClassSelection) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go('/classList'); - }); - return Container(); - } else if (state is LoginInitial) { - return Scaffold( - body: Column( - children: [ - const HeaderLogo(), - HeaderText(AppLocalizations.of(context)!.loginWelcomeTitle), - const Expanded(child: FormLogin()), - ], - ), - ); - } else if (state is LoginAuthenticated) { - WidgetsBinding.instance.addPostFrameCallback((_) { - context.go('/schedule'); - }); - return Container(); - } else if (state is LoginFieldError) { - WidgetsBinding.instance.addPostFrameCallback((_) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.loginFieldError), - backgroundColor: Colors.red, - ), - ); - }); - return Scaffold( - body: Column( - children: [ - const HeaderLogo(), - HeaderText( - AppLocalizations.of(context)!.loginWelcomeTitleError), - const Expanded(child: FormLogin()), - ], - ), - ); - } else { - return Container(); - } - }, - ); - } -} diff --git a/frontend/app_student/lib/login/views/login_view.dart b/frontend/app_student/lib/login/views/login_view.dart new file mode 100644 index 0000000..f2c7b63 --- /dev/null +++ b/frontend/app_student/lib/login/views/login_view.dart @@ -0,0 +1,23 @@ +import 'package:app_student/login/views/widgets/form/form_login.dart'; +import 'package:flutter/material.dart'; + +import '../../shared_components/header_logo.dart'; +import '../../shared_components/header_title.dart'; + +class LoginView extends StatelessWidget { + final String title; + const LoginView(this.title, {super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + const HeaderLogo(), + HeaderTitle(title), + const Expanded(child: FormLogin()), + ], + ), + ); + } +} diff --git a/frontend/app_student/lib/login/widgets/form/button_submit.dart b/frontend/app_student/lib/login/views/widgets/form/button_submit.dart similarity index 98% rename from frontend/app_student/lib/login/widgets/form/button_submit.dart rename to frontend/app_student/lib/login/views/widgets/form/button_submit.dart index d0ed049..923df43 100644 --- a/frontend/app_student/lib/login/widgets/form/button_submit.dart +++ b/frontend/app_student/lib/login/views/widgets/form/button_submit.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import '../../cubit/login_cubit.dart'; +import '../../../cubit/login_cubit.dart'; class SubmitButton extends StatelessWidget { final TextEditingController ineController; diff --git a/frontend/app_student/lib/login/widgets/form/form_login.dart b/frontend/app_student/lib/login/views/widgets/form/form_login.dart similarity index 100% rename from frontend/app_student/lib/login/widgets/form/form_login.dart rename to frontend/app_student/lib/login/views/widgets/form/form_login.dart diff --git a/frontend/app_student/lib/login/widgets/form/inputs/input_birthdate.dart b/frontend/app_student/lib/login/views/widgets/form/inputs/input_birthdate.dart similarity index 100% rename from frontend/app_student/lib/login/widgets/form/inputs/input_birthdate.dart rename to frontend/app_student/lib/login/views/widgets/form/inputs/input_birthdate.dart diff --git a/frontend/app_student/lib/login/widgets/form/inputs/input_ine.dart b/frontend/app_student/lib/login/views/widgets/form/inputs/input_ine.dart similarity index 100% rename from frontend/app_student/lib/login/widgets/form/inputs/input_ine.dart rename to frontend/app_student/lib/login/views/widgets/form/inputs/input_ine.dart diff --git a/frontend/app_student/lib/login/widgets/form/inputs/input_prenom.dart b/frontend/app_student/lib/login/views/widgets/form/inputs/input_prenom.dart similarity index 100% rename from frontend/app_student/lib/login/widgets/form/inputs/input_prenom.dart rename to frontend/app_student/lib/login/views/widgets/form/inputs/input_prenom.dart diff --git a/frontend/app_student/lib/login/widgets/header/header_text.dart b/frontend/app_student/lib/login/widgets/header/header_text.dart deleted file mode 100644 index b6c3cd7..0000000 --- a/frontend/app_student/lib/login/widgets/header/header_text.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class HeaderText extends StatelessWidget { - final String content; - - const HeaderText(this.content, {super.key}); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(top: 35.0, left: 25.0, bottom: 40), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - content, - style: const TextStyle( - fontSize: 34.0, - fontFamily: 'Arial', - fontWeight: FontWeight.bold, - ), - ), - ), - ); - } -} diff --git a/frontend/app_student/lib/main_dev.dart b/frontend/app_student/lib/main_dev.dart index 9ba04b1..e0b0860 100644 --- a/frontend/app_student/lib/main_dev.dart +++ b/frontend/app_student/lib/main_dev.dart @@ -1,12 +1,13 @@ import 'package:app_student/config/dev_config.dart'; import 'package:app_student/routes.dart'; +import 'package:app_student/utils/custom_theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:go_router/go_router.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:provider/provider.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'config/config.dart'; @@ -48,7 +49,11 @@ class MyApp extends StatelessWidget { title: '3iL Student App', theme: ThemeData( primarySwatch: Colors.blue, - focusColor: const Color(0xffE84E0F), + // Orange 3IL + focusColor: CustomTheme.secondaryColor, + primaryColor: CustomTheme.primaryColor, + // Bleu 3IL + secondaryHeaderColor: CustomTheme.primaryColor, fontFamily: 'Arial', ), localizationsDelegates: const [ diff --git a/frontend/app_student/lib/main_prod.dart b/frontend/app_student/lib/main_prod.dart index d8d39ad..4cd20ec 100644 --- a/frontend/app_student/lib/main_prod.dart +++ b/frontend/app_student/lib/main_prod.dart @@ -1,5 +1,5 @@ import 'package:app_student/config/prod_config.dart'; -import 'package:app_student/profils/views/profil_page.dart'; +import 'package:app_student/profils/views/profil.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/frontend/app_student/lib/menu/menu_item.dart b/frontend/app_student/lib/menu/menu_item.dart index 78ca14e..83a5177 100644 --- a/frontend/app_student/lib/menu/menu_item.dart +++ b/frontend/app_student/lib/menu/menu_item.dart @@ -1,20 +1,24 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import '../utils/custom_theme.dart'; + class MenuIcon extends BottomNavigationBarItem { MenuIcon({ required String iconPath, required int selectedIndex, required int itemIndex, + required String label, }) : super( icon: SvgPicture.asset( iconPath, height: 20, width: 20, colorFilter: selectedIndex == itemIndex - ? const ColorFilter.mode(Colors.blue, BlendMode.srcIn) + ? const ColorFilter.mode( + CustomTheme.primaryColor, BlendMode.srcIn) : null, ), - label: '', + label: label, ); } diff --git a/frontend/app_student/lib/menu/menu_view.dart b/frontend/app_student/lib/menu/menu_view.dart index 01b83ed..c713ec0 100644 --- a/frontend/app_student/lib/menu/menu_view.dart +++ b/frontend/app_student/lib/menu/menu_view.dart @@ -1,5 +1,8 @@ import 'package:app_student/routes.dart'; +import 'package:app_student/users/cubit/user_cubit.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:go_router/go_router.dart'; import 'menu_item.dart'; @@ -39,7 +42,13 @@ class MenuBarViewState extends State { switch (index) { case 0: + context.read().deleteUserClass(); GoRouter.of(context).go(AppRoutes.loginPage); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(AppLocalizations.of(context)!.disconnectedMessage), + ), + ); break; case 1: GoRouter.of(context).go(AppRoutes.schedulePage); @@ -58,16 +67,19 @@ class MenuBarViewState extends State { iconPath: 'assets/images/disconnect.svg', selectedIndex: _selectedIndex, itemIndex: 0, + label: AppLocalizations.of(context)!.disconnect, ), MenuIcon( iconPath: 'assets/images/calendar.svg', selectedIndex: _selectedIndex, itemIndex: 1, + label: AppLocalizations.of(context)!.schedule, ), MenuIcon( iconPath: 'assets/images/profil.svg', selectedIndex: _selectedIndex, itemIndex: 2, + label: AppLocalizations.of(context)!.profil, ), ], currentIndex: _selectedIndex, diff --git a/frontend/app_student/lib/profils/views/profil_page.dart b/frontend/app_student/lib/profils/views/profil.dart similarity index 87% rename from frontend/app_student/lib/profils/views/profil_page.dart rename to frontend/app_student/lib/profils/views/profil.dart index 4a32bc7..027e6d3 100644 --- a/frontend/app_student/lib/profils/views/profil_page.dart +++ b/frontend/app_student/lib/profils/views/profil.dart @@ -1,14 +1,14 @@ -import 'package:app_student/class_groups/views/widgets/header/header_text.dart'; import 'package:app_student/menu/menu_view.dart'; import 'package:app_student/profils/views/widgets/class_group_button.dart'; import 'package:app_student/profils/views/widgets/user_class_card.dart'; import 'package:app_student/profils/views/widgets/user_info_card.dart'; import 'package:flutter/material.dart'; -import 'package:app_student/login/widgets/header/header_logo.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:intl/intl.dart'; +import '../../shared_components/header_logo.dart'; +import '../../shared_components/header_title.dart'; import '../../users/cubit/user_cubit.dart'; class ProfilPage extends StatelessWidget { @@ -38,8 +38,8 @@ class ProfilPage extends StatelessWidget { children: [ const HeaderLogo(), Padding( - padding: const EdgeInsets.all(15.0), - child: HeaderText( + padding: const EdgeInsets.all(10.0), + child: HeaderTitle( AppLocalizations.of(context)!.profilMessageTitle(firstName), ), ), diff --git a/frontend/app_student/lib/routes.dart b/frontend/app_student/lib/routes.dart index ba9bc93..7daa713 100644 --- a/frontend/app_student/lib/routes.dart +++ b/frontend/app_student/lib/routes.dart @@ -5,7 +5,7 @@ import 'package:app_student/api/users/repositories/user_repository.dart'; import 'package:app_student/api/week_schedule/repositories/week_schedule_repository.dart'; import 'package:app_student/class_groups/cubit/class_group_cubit.dart'; import 'package:app_student/config/config.dart'; -import 'package:app_student/profils/views/profil_page.dart'; +import 'package:app_student/profils/views/profil.dart'; import 'package:app_student/users/cubit/user_cubit.dart'; import 'package:app_student/week_schedule/cubit/week_schedule_cubit.dart'; import 'package:app_student/week_schedule/views/week_schedule.dart'; @@ -13,9 +13,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; -import 'class_groups/views/class_group_page.dart'; +import 'class_groups/views/class_group.dart'; import 'login/cubit/login_cubit.dart'; -import 'login/views/login_page.dart'; +import 'login/views/login.dart'; class AppRoutes { static const classListPage = '/classList'; @@ -55,10 +55,21 @@ class AppRoutes { path: loginPage, pageBuilder: (context, state) => MaterialPage( key: state.pageKey, - child: RepositoryProvider( - create: (context) => UserRepository(), - child: BlocProvider( - create: (context) => LoginCubit(context.read()), + child: MultiRepositoryProvider( + providers: [ + RepositoryProvider(create: (context) => UserRepository()), + ], + child: MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) => LoginCubit(context.read()), + ), + BlocProvider( + create: (context) => + UserCubit(userRepository: context.read()) + ..fetchUser(), + ), + ], child: const LoginPage(), ), ), @@ -99,12 +110,18 @@ class AppRoutes { path: profilPage, pageBuilder: (context, state) => MaterialPage( key: state.pageKey, - child: RepositoryProvider( - create: (context) => UserRepository(), - child: BlocProvider( - create: (context) => - UserCubit(userRepository: context.read()) - ..fetchUser(), + child: MultiRepositoryProvider( + providers: [ + RepositoryProvider(create: (context) => UserRepository()), + ], + child: MultiBlocProvider( + providers: [ + BlocProvider( + create: (context) => + UserCubit(userRepository: context.read()) + ..fetchUser(), + ), + ], child: const ProfilPage(), ), ), diff --git a/frontend/app_student/lib/shared_components/app_bar.dart b/frontend/app_student/lib/shared_components/app_bar.dart new file mode 100644 index 0000000..78df248 --- /dev/null +++ b/frontend/app_student/lib/shared_components/app_bar.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../users/cubit/user_cubit.dart'; + +class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { + final String? title; + final Widget? widget; + + const CustomAppBar({super.key, this.title, this.widget}); + + @override + Widget build(BuildContext context) { + final userState = context.watch().state; + String className = ''; + if (userState is UserLoaded) { + className = userState.user.className ?? ''; + } + return AppBar( + backgroundColor: Theme.of(context).secondaryHeaderColor, + title: title != null ? Text(title!) : const SizedBox.shrink(), + flexibleSpace: Stack( + children: [ + ClipRect( + child: Center( + child: Opacity( + opacity: 0.5, + child: Transform.scale( + scale: 3.0, + child: Image.asset( + 'assets/images/3il-icon-white.png', + fit: BoxFit.cover, + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 45.0), + child: Stack( + children: [ + Center( + child: Text( + className, + style: const TextStyle( + color: Colors.white, + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + ), + if (widget != null) + Positioned( + right: 0.0, + top: 10.0, + child: widget!, + ), + ], + ), + ), + ], + ), + ); + } + + @override + Size get preferredSize => const Size.fromHeight(65.0); +} diff --git a/frontend/app_student/lib/login/widgets/header/header_logo.dart b/frontend/app_student/lib/shared_components/header_logo.dart similarity index 50% rename from frontend/app_student/lib/login/widgets/header/header_logo.dart rename to frontend/app_student/lib/shared_components/header_logo.dart index 0c1ff84..429a206 100644 --- a/frontend/app_student/lib/login/widgets/header/header_logo.dart +++ b/frontend/app_student/lib/shared_components/header_logo.dart @@ -6,13 +6,16 @@ class HeaderLogo extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 210.0, // Hauteur du Container + height: 300.0, // Hauteur du Container color: const Color(0xFF005067), child: Center( - child: SizedBox( - width: 200.0, - height: 200.0, - child: Image.asset('assets/images/3il-logo.jpg'), + child: Padding( + padding: const EdgeInsets.only(top: 50.0), + child: SizedBox( + width: 200.0, + height: 200.0, + child: Image.asset('assets/images/3il-logo.jpg'), + ), ), ), ); diff --git a/frontend/app_student/lib/class_groups/views/widgets/header/header_text.dart b/frontend/app_student/lib/shared_components/header_subtitle.dart similarity index 83% rename from frontend/app_student/lib/class_groups/views/widgets/header/header_text.dart rename to frontend/app_student/lib/shared_components/header_subtitle.dart index ff6d4b2..0da61db 100644 --- a/frontend/app_student/lib/class_groups/views/widgets/header/header_text.dart +++ b/frontend/app_student/lib/shared_components/header_subtitle.dart @@ -1,9 +1,9 @@ import 'package:flutter/cupertino.dart'; -class HeaderText extends StatelessWidget { +class HeaderSubtitle extends StatelessWidget { final String content; - const HeaderText(this.content, {super.key}); + const HeaderSubtitle(this.content, {super.key}); @override Widget build(BuildContext context) { diff --git a/frontend/app_student/lib/class_groups/views/widgets/header/header_title.dart b/frontend/app_student/lib/shared_components/header_title.dart similarity index 87% rename from frontend/app_student/lib/class_groups/views/widgets/header/header_title.dart rename to frontend/app_student/lib/shared_components/header_title.dart index 35f3e0a..7cd9a8a 100644 --- a/frontend/app_student/lib/class_groups/views/widgets/header/header_title.dart +++ b/frontend/app_student/lib/shared_components/header_title.dart @@ -8,7 +8,7 @@ class HeaderTitle extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only(top: 20.0, left: 25.0, bottom: 2), + padding: const EdgeInsets.only(top: 35.0, left: 25.0, bottom: 40), child: Align( alignment: Alignment.centerLeft, child: Text( diff --git a/frontend/app_student/lib/users/cubit/user_cubit.dart b/frontend/app_student/lib/users/cubit/user_cubit.dart index 0554d9f..049ab7a 100644 --- a/frontend/app_student/lib/users/cubit/user_cubit.dart +++ b/frontend/app_student/lib/users/cubit/user_cubit.dart @@ -30,4 +30,8 @@ class UserCubit extends Cubit { await userRepository.saveUserClass(classGroup.name.toString()); emit(UserClassesSelected()); } + + Future deleteUserClass() async { + await userRepository.delete(); + } } diff --git a/frontend/app_student/lib/utils/custom_theme.dart b/frontend/app_student/lib/utils/custom_theme.dart new file mode 100644 index 0000000..97242b3 --- /dev/null +++ b/frontend/app_student/lib/utils/custom_theme.dart @@ -0,0 +1,6 @@ +import 'package:flutter/material.dart'; + +class CustomTheme { + static const Color primaryColor = Color(0xFF005067); + static const Color secondaryColor = Color(0xffE84E0F); +} diff --git a/frontend/app_student/lib/week_schedule/cubit/week_schedule_state.dart b/frontend/app_student/lib/week_schedule/cubit/week_schedule_state.dart index 6a21522..436d239 100644 --- a/frontend/app_student/lib/week_schedule/cubit/week_schedule_state.dart +++ b/frontend/app_student/lib/week_schedule/cubit/week_schedule_state.dart @@ -13,8 +13,8 @@ class WeekScheduleLoaded extends WeekScheduleState { final List allDaySchedules; final UserModel user; // Ajout du champ UserModel - WeekScheduleLoaded(this.weekSchedule, this.todayIndex, this.allDaySchedules, - this.user); // Ajout du UserModel au constructeur + WeekScheduleLoaded( + this.weekSchedule, this.todayIndex, this.allDaySchedules, this.user); WeekScheduleLoaded copyWith({ List? weekSchedule, diff --git a/frontend/app_student/lib/week_schedule/views/week_schedule.dart b/frontend/app_student/lib/week_schedule/views/week_schedule.dart index a68a809..27d8bdb 100644 --- a/frontend/app_student/lib/week_schedule/views/week_schedule.dart +++ b/frontend/app_student/lib/week_schedule/views/week_schedule.dart @@ -1,13 +1,14 @@ import 'package:app_student/api/week_schedule/repositories/week_schedule_repository.dart'; -import 'package:app_student/menu/menu_view.dart'; import 'package:app_student/users/cubit/user_cubit.dart'; import 'package:app_student/week_schedule/cubit/week_schedule_cubit.dart'; +import 'package:app_student/week_schedule/views/widgets/components/datepicker_button.dart'; import 'package:app_student/week_schedule/views/widgets/day_schedule_widget.dart'; -import 'package:app_student/week_schedule/views/widgets/components/app_bar_week_schedule.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../api/users/repositories/user_repository.dart'; +import '../../menu/menu_view.dart'; +import '../../shared_components/app_bar.dart'; class WeekSchedulePage extends StatelessWidget { final DateTime? initialDate; @@ -30,7 +31,7 @@ class WeekSchedulePage extends StatelessWidget { create: (context) => UserCubit(userRepository: userRepository)..fetchUser(), child: Scaffold( - appBar: const AppBarWeekSchedule(), + appBar: const CustomAppBar(widget: DatePickerButton()), body: BlocBuilder( builder: (context, state) { if (state is WeekScheduleLoading) { diff --git a/frontend/app_student/lib/week_schedule/views/widgets/components/app_bar_week_schedule.dart b/frontend/app_student/lib/week_schedule/views/widgets/components/app_bar_week_schedule.dart deleted file mode 100644 index 7fa4de5..0000000 --- a/frontend/app_student/lib/week_schedule/views/widgets/components/app_bar_week_schedule.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:app_student/users/cubit/user_cubit.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import 'datepicker_button.dart'; - -class AppBarWeekSchedule extends StatelessWidget - implements PreferredSizeWidget { - const AppBarWeekSchedule({super.key}); - - static const double appBarHeight = 80.0; - - @override - Widget build(BuildContext context) { - final userState = context.watch().state; - String className = ''; - if (userState is UserLoaded) { - className = userState.user.entity.className ?? ''; - } - return AppBar( - backgroundColor: const Color(0xFF005067), - title: const SizedBox.shrink(), - flexibleSpace: Stack( - alignment: Alignment.center, - children: [ - ClipRect( - child: Center( - child: Opacity( - opacity: 0.5, - child: Transform.scale( - scale: 3.0, - child: Image.asset( - 'assets/images/3il-icon-white.png', - fit: BoxFit.cover, - ), - ), - ), - ), - ), - Text( - className, - style: const TextStyle( - color: Colors.white, - fontSize: 25.0, - fontWeight: FontWeight.bold, - ), - ), - const Positioned( - right: 0, - child: DatePickerButton(), - ), - ], - ), - ); - } - - @override - Size get preferredSize => const Size.fromHeight(appBarHeight); -} diff --git a/frontend/app_student/lib/week_schedule/views/widgets/events/event_card.dart b/frontend/app_student/lib/week_schedule/views/widgets/events/event_card.dart index 90eb2d2..4f4cbbc 100644 --- a/frontend/app_student/lib/week_schedule/views/widgets/events/event_card.dart +++ b/frontend/app_student/lib/week_schedule/views/widgets/events/event_card.dart @@ -1,7 +1,8 @@ import 'package:app_student/api/events/models/event_model.dart'; +import 'package:app_student/utils/custom_theme.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:flutter_svg/svg.dart'; class EventCard extends StatelessWidget { const EventCard({ @@ -14,12 +15,12 @@ class EventCard extends StatelessWidget { @override Widget build(BuildContext context) { return Card( - color: const Color(0xFF007A8D).withOpacity(0.3), + color: CustomTheme.primaryColor.withOpacity(0.5), child: Container( decoration: const BoxDecoration( border: Border( left: BorderSide( - color: Color(0xFF005067), + color: CustomTheme.primaryColor, width: 10.0, ), ), diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index a2ec33f..96d3fee 100644 --- a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,68 +1,68 @@ { - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" + "info": { + "version": 1, + "author": "xcode" }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 82b6f9d..d9ba492 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 13b35eb..4150c7f 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 0a3f5fa..c9d50a4 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bdb5722..06d210a 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index f083318..110d8db 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index 326c0e7..d426b97 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 2f1632c..e4fa0af 100644 Binary files a/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/frontend/app_student/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/frontend/app_student/pubspec.lock b/frontend/app_student/pubspec.lock index 21eeab5..1b6aa82 100644 --- a/frontend/app_student/pubspec.lock +++ b/frontend/app_student/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" + url: "https://pub.dev" + source: hosted + version: "3.4.10" args: dependency: transitive description: @@ -41,6 +49,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" clock: dependency: transitive description: @@ -57,6 +81,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -110,6 +150,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.1.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" flutter_lints: dependency: "direct dev" description: @@ -165,6 +213,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + url: "https://pub.dev" + source: hosted + version: "4.1.7" intl: dependency: "direct main" description: @@ -173,6 +229,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.18.1" + js: + dependency: transitive + description: + name: js + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + url: "https://pub.dev" + source: hosted + version: "0.7.1" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" leak_tracker: dependency: transitive description: @@ -309,6 +381,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" + url: "https://pub.dev" + source: hosted + version: "3.7.4" provider: dependency: "direct main" description: @@ -506,6 +586,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.3.0 <4.0.0" flutter: ">=3.19.0" diff --git a/frontend/app_student/pubspec.yaml b/frontend/app_student/pubspec.yaml index c99d581..e5aaadd 100644 --- a/frontend/app_student/pubspec.yaml +++ b/frontend/app_student/pubspec.yaml @@ -47,6 +47,7 @@ dependencies: flutter_dotenv: ^5.1.0 flutter_localizations: sdk: flutter + flutter_launcher_icons: ^0.13.1 dev_dependencies: diff --git a/frontend/app_student/web/favicon.png b/frontend/app_student/web/favicon.png index 8aaa46a..c9d50a4 100644 Binary files a/frontend/app_student/web/favicon.png and b/frontend/app_student/web/favicon.png differ diff --git a/frontend/app_student/web/icons/Icon-192.png b/frontend/app_student/web/icons/Icon-192.png index b749bfe..c48b091 100644 Binary files a/frontend/app_student/web/icons/Icon-192.png and b/frontend/app_student/web/icons/Icon-192.png differ diff --git a/frontend/app_student/web/icons/Icon-512.png b/frontend/app_student/web/icons/Icon-512.png index 88cfd48..d426b97 100644 Binary files a/frontend/app_student/web/icons/Icon-512.png and b/frontend/app_student/web/icons/Icon-512.png differ diff --git a/frontend/app_student/web/icons/Icon-maskable-192.png b/frontend/app_student/web/icons/Icon-maskable-192.png index eb9b4d7..c48b091 100644 Binary files a/frontend/app_student/web/icons/Icon-maskable-192.png and b/frontend/app_student/web/icons/Icon-maskable-192.png differ diff --git a/frontend/app_student/web/icons/Icon-maskable-512.png b/frontend/app_student/web/icons/Icon-maskable-512.png index d69c566..d426b97 100644 Binary files a/frontend/app_student/web/icons/Icon-maskable-512.png and b/frontend/app_student/web/icons/Icon-maskable-512.png differ diff --git a/frontend/app_student/web/manifest.json b/frontend/app_student/web/manifest.json index c361b52..fed36ce 100644 --- a/frontend/app_student/web/manifest.json +++ b/frontend/app_student/web/manifest.json @@ -3,8 +3,8 @@ "short_name": "app_student", "start_url": ".", "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", + "background_color": "#FFFFF", + "theme_color": "#FFFFF", "description": "A new Flutter project.", "orientation": "portrait-primary", "prefer_related_applications": false, @@ -32,4 +32,4 @@ "purpose": "maskable" } ] -} +} \ No newline at end of file diff --git a/frontend/app_student/windows/runner/resources/app_icon.ico b/frontend/app_student/windows/runner/resources/app_icon.ico index c04e20c..5d5febd 100644 Binary files a/frontend/app_student/windows/runner/resources/app_icon.ico and b/frontend/app_student/windows/runner/resources/app_icon.ico differ