11import 'package:flutter/material.dart' ;
22import 'package:provider/provider.dart' ;
3+ import '../../../data/models/professor_model.dart' ;
4+ import '../../../data/models/subject_model.dart' ;
35import '../../../data/models/user_model.dart' ;
46import '../../../theme/theme.dart' ;
57import '../viewmodels/academy_home_viewmodel.dart' ;
68import '../viewmodels/home_menu_viewmodel.dart' ;
7- import 'student_detail_view.dart' ;
89import 'student_list_view.dart' ;
910import 'subject_management_view.dart' ;
1011
1112class AcademyHomeView extends StatelessWidget {
1213 const AcademyHomeView ({super .key});
1314
14- void _navigateToStudentList (BuildContext context, String title, List <UserModel > students) {
15- Navigator .push (
16- context,
17- MaterialPageRoute (builder: (context) => StudentListView (title: title, students: students)),
15+ void _showAssignmentForm (BuildContext context, AcademyViewModel vm, UserModel student) {
16+ vm.filterSubjectsForStudent (student);
17+ showModalBottomSheet (
18+ context: context,
19+ isScrollControlled: true ,
20+ shape: const RoundedRectangleBorder (borderRadius: BorderRadius .vertical (top: Radius .circular (20 ))),
21+ builder: (_) => ChangeNotifierProvider .value (
22+ value: vm,
23+ child: _AssignmentForm (student: student),
24+ ),
1825 );
1926 }
2027
@@ -81,19 +88,53 @@ class AcademyHomeView extends StatelessWidget {
8188 childAspectRatio: 1.5 ,
8289 children: [
8390 GestureDetector (
84- onTap: () => _navigateToStudentList (context, 'Pendientes de Asignación' , vm.pendingStudents),
91+ onTap: () => Navigator .push (
92+ context,
93+ MaterialPageRoute (builder: (_) =>
94+ StudentListView (
95+ title: 'Pendientes de Asignación' ,
96+ students: vm.pendingStudents,
97+ onAssign: (student) => _showAssignmentForm (context, vm, student),
98+ )
99+ ),
100+ ),
85101 child: _buildSummaryCard ('Pendientes' , vm.pendingStudents.length.toString (), Icons .hourglass_top_outlined, Colors .orange.shade700),
86102 ),
87103 GestureDetector (
88- onTap: () => _navigateToStudentList (context, 'Alumnos en Curso' , vm.assignedStudents),
104+ onTap: () => Navigator .push (
105+ context,
106+ MaterialPageRoute (builder: (_) =>
107+ StudentListView (
108+ title: 'Alumnos en Curso' ,
109+ students: vm.assignedStudents,
110+ onAssign: (student) => _showAssignmentForm (context, vm, student),
111+ )
112+ ),
113+ ),
89114 child: _buildSummaryCard ('En Curso' , vm.assignedStudents.length.toString (), Icons .school_outlined, AppTheme .bluePrimary),
90115 ),
91- GestureDetector (
92- onTap: () => _navigateToStudentList (context, 'Alumnos Acreditados' , vm.accreditedStudents),
116+ GestureDetector (
117+ onTap: () => Navigator .push (
118+ context,
119+ MaterialPageRoute (builder: (_) =>
120+ StudentListView (
121+ title: 'Alumnos Acreditados' ,
122+ students: vm.accreditedStudents,
123+ )
124+ ),
125+ ),
93126 child: _buildSummaryCard ('Acreditados' , vm.accreditedStudents.length.toString (), Icons .check_circle_outlined, Colors .green.shade700),
94127 ),
95128 GestureDetector (
96- onTap: () => _navigateToStudentList (context, 'Alumnos No Acreditados' , vm.notAccreditedStudents),
129+ onTap: () => Navigator .push (
130+ context,
131+ MaterialPageRoute (builder: (_) =>
132+ StudentListView (
133+ title: 'Alumnos No Acreditados' ,
134+ students: vm.notAccreditedStudents,
135+ )
136+ ),
137+ ),
97138 child: _buildSummaryCard ('No Acreditados' , vm.notAccreditedStudents.length.toString (), Icons .cancel_outlined, Colors .red.shade700),
98139 ),
99140 ],
@@ -130,19 +171,7 @@ class AcademyHomeView extends StatelessWidget {
130171 ),
131172 ],
132173 ),
133- <<<<<< < HEAD
134- ====== =
135- const Divider (height: 1 , indent: 16 , endIndent: 16 ),
136- Padding (
137- padding: const EdgeInsets .symmetric (horizontal: 8.0 , vertical: 4 ),
138- child: TextButton .icon (
139- icon: const Icon (Icons .add_circle_outline, size: 18 ),
140- label: const Text ("Asignar Materia" ),
141- style: TextButton .styleFrom (foregroundColor: AppTheme .bluePrimary),
142- onPressed: onAssign,
143- ),
144- )
145- ]),
174+ ),
146175 );
147176 }
148177}
@@ -165,7 +194,6 @@ class _AssignmentFormState extends State<_AssignmentForm> {
165194 @override
166195 void initState () {
167196 super .initState ();
168- // Auto-select the subject if there's only one available
169197 final vm = context.read <AcademyViewModel >();
170198 if (vm.availableSubjectsForStudent.length == 1 ) {
171199 _selectedSubject = vm.availableSubjectsForStudent.first;
@@ -217,10 +245,9 @@ class _AssignmentFormState extends State<_AssignmentForm> {
217245 Text ("Alumno: ${widget .student .name }" , style: const TextStyle (color: Colors .grey)),
218246 const SizedBox (height: 20 ),
219247
220- // --- FIX: Use the filtered list of subjects ---
221248 DropdownButtonFormField <SubjectModel >(
222249 key: ValueKey (_selectedSubject),
223- initialValue : _selectedSubject,
250+ value : _selectedSubject,
224251 decoration: const InputDecoration (labelText: "Materia" , border: OutlineInputBorder ()),
225252 items: vm.availableSubjectsForStudent.map ((s) => DropdownMenuItem (value: s, child: Text (s.name))).toList (),
226253 onChanged: (val) => setState (() {
@@ -260,7 +287,6 @@ class _AssignmentFormState extends State<_AssignmentForm> {
260287 ),
261288 )
262289 ],
263- >>>>>> > b02e3f38a199391d13e8c793264fe648935ec0f9
264290 ),
265291 );
266292 }
0 commit comments