home_screen.dart 4.6 KB

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