home_screen.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import 'package:flutter/material.dart';
  2. import 'package:provider/provider.dart';
  3. import 'package:sis_flutter/models/actividad_model.dart';
  4. import 'package:sis_flutter/models/tarea_model.dart';
  5. import 'package:sis_flutter/themes/themes.dart';
  6. import 'package:sis_flutter/viewmodels/login_view_model.dart';
  7. import 'package:sis_flutter/viewmodels/tarea_view_model.dart';
  8. import 'package:sis_flutter/widgets/app_drawer.dart';
  9. import 'package:sis_flutter/widgets/custom_bottom_navigation_bar.dart';
  10. import 'package:sis_flutter/widgets/widgets_components.dart';
  11. class HomeScreen extends StatefulWidget {
  12. static const String route = '/home';
  13. const HomeScreen({super.key});
  14. @override
  15. Formulario createState() => Formulario();
  16. }
  17. class Formulario extends State<HomeScreen> {
  18. DateTime? fechaInicio = DateTime.now();
  19. DateTime? fechaFin;
  20. ScrollController horizontalScrollController = ScrollController();
  21. ScrollController verticalScrollController = ScrollController();
  22. @override
  23. void initState() {
  24. super.initState();
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. return Scaffold(
  29. backgroundColor: Colors.grey.shade200,
  30. drawer: AppDrawer(),
  31. appBar: encabezado(
  32. estilo: TextStyle(
  33. color: Colors.white,
  34. fontSize: 20,
  35. fontWeight: FontWeight.bold,
  36. ),
  37. backgroundColor: AppTheme.divider,
  38. acciones: [
  39. IconButton(
  40. onPressed: () {}, icon: const Icon(Icons.restart_alt_rounded)),
  41. ],
  42. titulo: "Actividades",
  43. ),
  44. body: const Bodytest(),
  45. bottomNavigationBar: const CustomBottomNavigationBar(),
  46. );
  47. }
  48. }
  49. class Bodytest extends StatefulWidget {
  50. const Bodytest({
  51. super.key,
  52. });
  53. @override
  54. State<Bodytest> createState() => _BodytestState();
  55. }
  56. class _BodytestState extends State<Bodytest> {
  57. @override
  58. void initState() {
  59. super.initState();
  60. Future(
  61. () async {
  62. final idusuario =
  63. Provider.of<LoginViewModel>(context, listen: false).idUsuario;
  64. // Provider.of<PrioridadesViewMode>(context, listen: false)
  65. // .fetchPriodidades(idusuario);
  66. Provider.of<PrioridadesViewMode>(context, listen: false)
  67. .fetchActividad(idusuario);
  68. },
  69. );
  70. }
  71. @override
  72. void dispose() {
  73. super.dispose();
  74. }
  75. @override
  76. Widget build(BuildContext context) {
  77. var vm = Provider.of<PrioridadesViewMode>(context);
  78. // var prioridades = vm.prioridades;
  79. var actividadDetalle = vm.actividadList;
  80. final height = MediaQuery.of(context).size.height;
  81. final width = MediaQuery.of(context).size.width;
  82. return SingleChildScrollView(
  83. child: Column(
  84. mainAxisAlignment: MainAxisAlignment.start,
  85. children: [
  86. Container(
  87. height: height * 0.9,
  88. child: ListView.builder(
  89. itemCount: actividadDetalle.length,
  90. itemBuilder: (context, index) {
  91. var actividad = actividadDetalle[index];
  92. return _infoCard(actividad);
  93. }),
  94. ),
  95. ],
  96. ),
  97. );
  98. }
  99. Card _infoCard(Actividad actividad) {
  100. List<Widget> tareaWidgets = [];
  101. for (var tarea in actividad.tareas!) {
  102. final posicion = (actividad.tareas!.indexOf(tarea) + 1).toString();
  103. tareaWidgets.add(
  104. ListTile(
  105. title: Text(tarea.contenido!),
  106. subtitle: Text("Subtarea $posicion"),
  107. ),
  108. );
  109. }
  110. return Card(
  111. margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8),
  112. elevation: 4,
  113. shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(6.0)),
  114. child: ExpansionTile(
  115. backgroundColor: Colors.white24,
  116. leading: const Icon(Icons.local_fire_department_rounded),
  117. title: Text(
  118. "${actividad.nombreProyecto!} - ${actividad.nombre!} ",
  119. style: const TextStyle(fontSize: 20),
  120. strutStyle: const StrutStyle(fontWeight: FontWeight.bold),
  121. ),
  122. trailing: const Icon(Icons.arrow_drop_down),
  123. subtitle: Row(
  124. mainAxisAlignment: MainAxisAlignment.start,
  125. crossAxisAlignment: CrossAxisAlignment.center,
  126. children: [
  127. Text(actividad.avance!),
  128. const SizedBox(width: 10),
  129. Expanded(
  130. child: ClipRRect(
  131. borderRadius: const BorderRadius.all(Radius.circular(10)),
  132. child: LinearProgressIndicator(
  133. value: double.parse(actividad.avance!) / 100,
  134. backgroundColor: Colors.grey,
  135. valueColor: AlwaysStoppedAnimation<Color>(
  136. _calcularColorPorcentaje(actividad.avance!),
  137. ),
  138. ),
  139. ),
  140. ),
  141. ],
  142. ),
  143. children: tareaWidgets,
  144. ),
  145. );
  146. }
  147. }
  148. Color _calcularColorPorcentaje(String avance) {
  149. final porcentaje = double.parse(avance);
  150. if (porcentaje > 66) return Colors.green;
  151. if (porcentaje > 33) return Colors.orange;
  152. return Colors.red;
  153. }