sucursal_screen.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:flutter/material.dart';
  2. import 'package:provider/provider.dart';
  3. import '../../viewmodels/viewmodels.dart';
  4. import '../../models/models.dart';
  5. import '../../widgets/widgets.dart';
  6. class SucursalesPage extends StatefulWidget {
  7. @override
  8. _SucursalesPageState createState() => _SucursalesPageState();
  9. }
  10. class _SucursalesPageState extends State<SucursalesPage> {
  11. Sucursal? _selectedSucursal;
  12. @override
  13. void initState() {
  14. super.initState();
  15. // Cargar las sucursales desde la base de datos local cuando se inicializa la pantalla
  16. Provider.of<SucursalViewModel>(context, listen: false)
  17. .fetchLocalSucursales()
  18. .then((_) {
  19. // Buscar la sucursal seleccionada automáticamente al cargar la pantalla
  20. final sucursales =
  21. Provider.of<SucursalViewModel>(context, listen: false).sucursales;
  22. setState(() {
  23. _selectedSucursal = sucursales.firstWhere(
  24. (sucursal) => sucursal.seleccionado == 1,
  25. orElse: () => null as Sucursal,
  26. );
  27. });
  28. });
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. final sucursalViewModel = Provider.of<SucursalViewModel>(context);
  33. final sucursales = sucursalViewModel.sucursales;
  34. return Scaffold(
  35. appBar: AppBar(
  36. title: Text('Sucursales'),
  37. ),
  38. body: Padding(
  39. padding: const EdgeInsets.all(16.0),
  40. child: Column(
  41. crossAxisAlignment: CrossAxisAlignment.stretch,
  42. children: [
  43. // Dropdown para seleccionar una sucursal utilizando AppDropdownModel
  44. AppDropdownModel<Sucursal>(
  45. etiqueta: 'Seleccione una sucursal',
  46. hint: 'Elija una sucursal',
  47. selectedValue: _selectedSucursal,
  48. onChanged: (Sucursal? newValue) {
  49. setState(() {
  50. _selectedSucursal = newValue;
  51. });
  52. },
  53. items: sucursales.map((Sucursal sucursal) {
  54. return DropdownMenuItem<Sucursal>(
  55. value: sucursal,
  56. child: Text(
  57. sucursal.nombre ?? '',
  58. style: TextStyle(color: Colors.black),
  59. ),
  60. );
  61. }).toList(),
  62. ),
  63. SizedBox(height: 20),
  64. // Tarjeta con la información de la sucursal seleccionada
  65. if (_selectedSucursal != null)
  66. tarjeta(
  67. Padding(
  68. padding: const EdgeInsets.all(8.0),
  69. child: Column(
  70. crossAxisAlignment: CrossAxisAlignment.start,
  71. children: [
  72. Text(
  73. 'Sucursal: ${_selectedSucursal!.nombre ?? ''}',
  74. style: TextStyle(
  75. fontSize: 16, fontWeight: FontWeight.bold),
  76. ),
  77. SizedBox(height: 5),
  78. Text('Dirección: ${_selectedSucursal!.direccion ?? ''}'),
  79. SizedBox(height: 5),
  80. Text('Ciudad: ${_selectedSucursal!.ciudad ?? ''}'),
  81. SizedBox(height: 5),
  82. Text('Clave: ${_selectedSucursal!.clave ?? ''}'),
  83. SizedBox(height: 5),
  84. ],
  85. ),
  86. ),
  87. ),
  88. SizedBox(height: 20),
  89. // Usar el widget de botón para guardar
  90. boton("Guardar", () async {
  91. await _guardarSucursalSeleccionada();
  92. if (context.mounted) {
  93. Navigator.pop(context);
  94. }
  95. }),
  96. ],
  97. ),
  98. ),
  99. );
  100. }
  101. Future<void> _guardarSucursalSeleccionada() async {
  102. if (_selectedSucursal != null) {
  103. // Guardar la sucursal seleccionada utilizando el ViewModel
  104. await Provider.of<SucursalViewModel>(context, listen: false)
  105. .setSelectedSucursal(_selectedSucursal!);
  106. setState(() {
  107. // Volver a establecer la sucursal seleccionada en el Dropdown
  108. _selectedSucursal = _selectedSucursal;
  109. });
  110. }
  111. }
  112. }