// ignore_for_file: use_build_context_synchronously import 'package:flutter/material.dart'; import 'package:yoshi_papas_app/widgets/widgets.dart'; import 'package:provider/provider.dart'; import 'package:intl/intl.dart'; import '../../viewmodels/viewmodels.dart'; import '../../models/models.dart'; import '../../themes/themes.dart'; import 'pedido_form.dart'; import '../../services/services.dart' as servicio; class PedidoScreen extends StatefulWidget { const PedidoScreen({Key? key}) : super(key: key); @override State createState() => Formulario(); } class Formulario extends State { final _busqueda = TextEditingController(text: ''); ScrollController horizontalScrollController = ScrollController(); DateTime? fechaInicio = DateTime.now(); DateTime? fechaFin; Size? _size; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { // await Provider.of(context, listen: false) // .setIsLoading(true); // await Provider.of(context, listen: false) // .fetchRegistros(); // List lasempresas = // Provider.of(context, listen: false).empresas; // if (lasempresas.isNotEmpty) { // setState(() { // empresa = lasempresas.first; // }); // } // await Future.delayed(const Duration(seconds: 1)); // await Provider.of(context, listen: false) // .setIsLoading(false); }); } @override void dispose() { horizontalScrollController.dispose(); super.dispose(); } // go(Orden item) async { // Provider.of(context, listen: false).limpiarFotos(); // Provider.of(context, listen: false).limpiar(); // Provider.of(context, listen: false).selectOrden(item); // Navigator.push( // context, // MaterialPageRoute( // builder: (context) => const OrdenForm(), // ), // ).then((value) async { // await Provider.of(context, listen: false) // .fetchRegistros(); // }); // } @override Widget build(BuildContext context) { //final mvm = Provider.of(context); double screenWidth = MediaQuery.of(context).size.width; final isMobile = screenWidth < 1250; final double? columnSpacing = isMobile ? null : 0; //final isLoading = mvm.isLoading; // if (isLoading) return const Cargando(); TextStyle estilo = const TextStyle(fontWeight: FontWeight.bold); List registros = []; //if (mvm.registros.isNotEmpty) { var vuelta = 0; //for (Orden item in mvm.registros) { var _tipo = vuelta % 2; vuelta++; String fsalida = ""; // if (item.fechaSalida != null) { // fsalida = DateFormat("dd/MM/yyyy HH:mm") // .format(item.fechaSalida!) // .toString(); // } registros.add(DataRow(selected: _tipo > 0, cells: [ DataCell( Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ PopupMenuButton( surfaceTintColor: AppTheme.primary, itemBuilder: (context) => [ PopupMenuItem( child: const Text('Editar'), onTap: () => {} /*go(item)*/, ), PopupMenuItem( child: const Text( 'Eliminar', ), onTap: () async { return showDialog( context: context, builder: (context) { return AlertDialog( title: const Text("Eliminar registro"), content: const Text('¿Desea eliminar el registro?'), actions: [ Row(children: [ Expanded( child: TextButton( onPressed: () { Navigator.pop(context); }, child: const Text('Cancelar'), )), Expanded( child: TextButton( onPressed: () async { // //await mvm.eliminar(item); // await mvm.fetchRegistros(); // if (context.mounted) { // Navigator.pop(context); // } }, child: const Text('Continuar'), )) ]) ], ); }, ); }, ), PopupMenuItem( child: const Text('Imprimir'), //onTap: () => imprimir(item), ), ], icon: const Icon(Icons.more_vert), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), ), ])), DataCell( Text('Pedido'), //Text(item.folio.toString()), // onTap: () => go(item), ), DataCell( Text('Petición'), //Text(item.numeroUnidad.toString()), //onTap: () => go(item), ), DataCell( Text('Cliente'), //Text(item.nombreChofer.toString()), //onTap: () => go(item), ), DataCell( Text('Mesa'), //Text("${item.categoriaFalla.toString()}: ${item.falla.toString()}"), // onTap: () => go(item), ), DataCell( Text('Productos Terminados'), //Text(item.estatus.toString()), //onTap: () => go(item), ), DataCell( Text('Visto'), //Text(item.estatus.toString()), //onTap: () => go(item), ), ])); //} //} _size = MediaQuery.of(context).size; return Scaffold( appBar: encabezado( titulo: "PEDIDOS", ), floatingActionButton: FloatingActionButton( onPressed: () async { // Aquí asumo que quieres navegar a una nueva página cuando se presione el botón await Navigator.of(context).push( MaterialPageRoute( builder: (context) => PedidoForm(), ), ); }, child: const Icon(Icons .add), // Este es el hijo del FloatingActionButton, que define el ícono que se muestra en el botón. ), body: Column( children: [ Expanded( child: ListView( padding: const EdgeInsets.fromLTRB(8, 0, 8, 0), children: [ const SizedBox(height: 8), tarjeta( Padding( padding: const EdgeInsets.all(8.0), child: LayoutBuilder( builder: (context, constraints) { if (screenWidth > 1000) { return Row( children: [ Expanded( flex: 10, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ BusquedaTextField(), ], )), SizedBox(width: 5), BotonBuscar() ], ); } else { return Column( children: [ Row( children: [BusquedaTextField()], ), SizedBox(height: 10), SizedBox(height: 15), Row( children: [BotonBuscar()], ), ], ); } }, ), ), ), const SizedBox(height: 8), // isLoading // ? const Center(child: CircularProgressIndicator()) // : Container(), tarjeta( Column( children: [ LayoutBuilder(builder: (context, constraints) { return SingleChildScrollView( scrollDirection: Axis.vertical, child: Scrollbar( controller: horizontalScrollController, interactive: true, thumbVisibility: true, thickness: 10.0, // Esto es opcional para cambiar el grosor child: SingleChildScrollView( controller: horizontalScrollController, scrollDirection: Axis.horizontal, child: ConstrainedBox( constraints: BoxConstraints( minWidth: isMobile ? constraints.maxWidth : screenWidth), child: DataTable( columnSpacing: columnSpacing, sortAscending: true, sortColumnIndex: 1, columns: [ DataColumn(label: Text(" ", style: estilo)), DataColumn( label: Text("PEDIDO", style: estilo)), DataColumn( label: Text("PETICIÓN", style: estilo)), DataColumn( label: Text("CLIENTE", style: estilo)), DataColumn( label: Text("MESA", style: estilo)), DataColumn( label: Text("PRODUCTOS TERMINADOS", style: estilo)), DataColumn( label: Text("VISTO", style: estilo)), ], rows: registros, ), ), ), ), ); }), // PaginationButtons( // currentPage: mvm.pagina, // totalPages: mvm.totalPaginas, // onPageChanged: (i) => mvm.cambiarPagina(i, // empresa: _selectedEmpresa, falla: _selectedFalla), // ) ], ), ), ], ), ), ], ), ); } Widget BusquedaTextField() { return Expanded( flex: 4, child: AppTextField( prefixIcon: const Icon(Icons.search), etiqueta: 'Búsqueda por folio...', controller: _busqueda, hintText: 'Búsqueda por folio...', ), ); } Widget BotonBuscar() { return Expanded( flex: 2, child: botonElevated( accion: () async { _busqueda.text = _busqueda.text.trim(); /* if (_busqueda.text.isEmpty && _selectedFalla == null) { return alerta(context); } */ // OrdenesViewModel mvm = // Provider.of(context, listen: false); // await mvm.setIsLoading(true); // await mvm.setBusqueda(_busqueda.text); // await mvm.fetchRegistros( // falla: _selectedFalla, empresa: _selectedEmpresa); // await mvm.setBusqueda(""); // await mvm.setIsLoading(false); }, ), ); } }