import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sis_flutter/models/actividad_model.dart'; import 'package:sis_flutter/models/tarea_model.dart'; import 'package:sis_flutter/themes/themes.dart'; import 'package:sis_flutter/viewmodels/login_view_model.dart'; import 'package:sis_flutter/viewmodels/tarea_view_model.dart'; import 'package:sis_flutter/widgets/app_drawer.dart'; import 'package:sis_flutter/widgets/custom_bottom_navigation_bar.dart'; import 'package:sis_flutter/widgets/widgets_components.dart'; class HomeScreen extends StatefulWidget { static const String route = '/home'; const HomeScreen({super.key}); @override Formulario createState() => Formulario(); } class Formulario extends State { DateTime? fechaInicio = DateTime.now(); DateTime? fechaFin; ScrollController horizontalScrollController = ScrollController(); ScrollController verticalScrollController = ScrollController(); @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey.shade200, drawer: AppDrawer(), appBar: encabezado( estilo: TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold, ), backgroundColor: AppTheme.divider, acciones: [ IconButton( onPressed: () {}, icon: const Icon(Icons.restart_alt_rounded)), ], titulo: "Actividades", ), body: const Bodytest(), bottomNavigationBar: const CustomBottomNavigationBar(), ); } } class Bodytest extends StatefulWidget { const Bodytest({ super.key, }); @override State createState() => _BodytestState(); } class _BodytestState extends State { @override void initState() { super.initState(); Future( () async { final idusuario = Provider.of(context, listen: false).idUsuario; // Provider.of(context, listen: false) // .fetchPriodidades(idusuario); Provider.of(context, listen: false) .fetchActividad(idusuario); }, ); } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { var vm = Provider.of(context); // var prioridades = vm.prioridades; var actividadDetalle = vm.actividadList; final height = MediaQuery.of(context).size.height; final width = MediaQuery.of(context).size.width; return SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Container( height: height * 0.9, child: ListView.builder( itemCount: actividadDetalle.length, itemBuilder: (context, index) { var actividad = actividadDetalle[index]; return _infoCard(actividad); }), ), ], ), ); } Card _infoCard(Actividad actividad) { List tareaWidgets = []; for (var tarea in actividad.tareas!) { final posicion = (actividad.tareas!.indexOf(tarea) + 1).toString(); tareaWidgets.add( ListTile( title: Text(tarea.contenido!), subtitle: Text("Subtarea $posicion"), ), ); } return Card( margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8), elevation: 4, shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(6.0)), child: ExpansionTile( backgroundColor: Colors.white24, leading: const Icon(Icons.local_fire_department_rounded), title: Text( "${actividad.nombreProyecto!} - ${actividad.nombre!} ", style: const TextStyle(fontSize: 20), strutStyle: const StrutStyle(fontWeight: FontWeight.bold), ), trailing: const Icon(Icons.arrow_drop_down), subtitle: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text(actividad.avance!), const SizedBox(width: 10), Expanded( child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(10)), child: LinearProgressIndicator( value: double.parse(actividad.avance!) / 100, backgroundColor: Colors.grey, valueColor: AlwaysStoppedAnimation( _calcularColorPorcentaje(actividad.avance!), ), ), ), ), ], ), children: tareaWidgets, ), ); } } Color _calcularColorPorcentaje(String avance) { final porcentaje = double.parse(avance); if (porcentaje > 66) return Colors.green; if (porcentaje > 33) return Colors.orange; return Colors.red; }