main.dart 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:provider/provider.dart';
  4. import 'package:sqflite_common_ffi/sqflite_ffi.dart';
  5. import 'dart:io';
  6. import 'core/models/models.dart';
  7. import 'core/services/services.dart';
  8. import 'mvvm/views/home/home_screen.dart';
  9. import 'mvvm/views/login/login_screen.dart';
  10. import '/utils/themes.dart';
  11. import 'mvvm/viewmodels/viewmodels.dart';
  12. import 'package:timezone/data/latest.dart' as tzdata;
  13. void main() async {
  14. WidgetsFlutterBinding.ensureInitialized();
  15. tzdata.initializeTimeZones();
  16. // Inicialización de la base de datos para plataformas de escritorio con FFI
  17. if (Platform.isWindows || Platform.isLinux) {
  18. sqfliteFfiInit();
  19. databaseFactory = databaseFactoryFfi;
  20. }
  21. Database? db = await DatabaseService().db;
  22. final repositoryFactory = SQLiteRepositoryFactory(db!);
  23. // 3) Obtener el repositorio de Mesa
  24. final mesaRepository = repositoryFactory.getRepository<Mesa>(
  25. tableName: 'Mesa',
  26. fromMap: Mesa.fromMap,
  27. toMap: (m) => m.toMap(),
  28. );
  29. final categoriaRepository =
  30. repositoryFactory.getRepository<CategoriaProducto>(
  31. tableName: 'CategoriaProducto',
  32. fromMap: CategoriaProducto.fromMap,
  33. toMap: (m) => m.toMap(),
  34. );
  35. final productoRepository = repositoryFactory.getRepository<Producto>(
  36. tableName: 'Producto',
  37. fromMap: Producto.fromMap,
  38. toMap: (m) => m.toMap(),
  39. );
  40. SystemChrome.setPreferredOrientations([
  41. DeviceOrientation.landscapeRight,
  42. DeviceOrientation.landscapeLeft,
  43. ]).then((_) {
  44. runApp(MultiProvider(providers: [
  45. ChangeNotifierProvider(create: (_) => LoginViewModel()),
  46. ChangeNotifierProvider(create: (_) => SucursalViewModel()),
  47. ChangeNotifierProvider(create: (_) => PermisoViewModel()),
  48. ChangeNotifierProvider(create: (_) => UsuarioViewModel()),
  49. ChangeNotifierProvider(create: (_) => ProductoViewModel()),
  50. ChangeNotifierProvider(
  51. create: (_) => HomeViewModel(
  52. categoriaRepository: categoriaRepository,
  53. productoRepository: productoRepository)),
  54. ChangeNotifierProvider(
  55. create: (_) => MesaViewModel(mesaRepository: mesaRepository)),
  56. ChangeNotifierProvider(create: (_) => CategoriaProductoViewModel()),
  57. // Agrega aquí cualquier otro provider que necesites
  58. ], child: const MyApp()));
  59. });
  60. }
  61. class MyApp extends StatelessWidget {
  62. const MyApp({super.key});
  63. @override
  64. Widget build(BuildContext context) {
  65. return MaterialApp(
  66. locale: const Locale("en", "ES"),
  67. debugShowCheckedModeBanner: false,
  68. title: 'Turquessa',
  69. theme: AppTheme.lightTheme,
  70. initialRoute: 'login',
  71. routes: {
  72. 'login': (context) => const LoginScreen(),
  73. 'home': (context) => const HomeScreen(),
  74. },
  75. );
  76. }
  77. }