From 4f7bb569d8e71131887278732b15930cb98529ee Mon Sep 17 00:00:00 2001 From: nadia Date: Thu, 25 Apr 2024 15:41:24 +0200 Subject: [PATCH] agregado patron bloc y barra de contacto --- lib/main.dart | 308 +++++++++--------- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 86 +++++ pubspec.yaml | 1 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 8 files changed, 254 insertions(+), 152 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 8838c6f..b6005f2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,31 @@ import 'package:flutter/material.dart'; +import 'dart:async'; +import 'package:url_launcher/url_launcher.dart'; -void main() { - runApp(const MyApp()); +// Definir eventos +enum Contenedor { noticias, pregon, embalses, tiempo } + +// Definir estado +class ContenedoresState { + final Contenedor? currentContenedor; + + ContenedoresState({this.currentContenedor}); +} + +// Definir Bloc +class ContenedoresBloc { + final _stateController = StreamController.broadcast(); + + Stream get state => _stateController.stream; + + void dispose() { + _stateController.close(); + } + + void selectContenedor(Contenedor contenedor) { + final newState = ContenedoresState(currentContenedor: contenedor); + _stateController.sink.add(newState); + } } class MyApp extends StatelessWidget { @@ -13,174 +37,154 @@ class MyApp extends StatelessWidget { title: 'Flutter Demo', theme: ThemeData( colorScheme: - ColorScheme.fromSeed(seedColor: Color.fromARGB(255, 0, 67, 168)), + ColorScheme.fromSeed(seedColor: Color.fromARGB(255, 255, 255, 255)), useMaterial3: true, ), - home: const MyHomePage(title: 'COMUNIDAD DE REGANTES DE CIVÁN'), + home: MyHomePage( + title: 'COMUNIDAD DE REGANTES DE CIVÁN', + contenedoresBloc: ContenedoresBloc() + ), ); } } -class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key, required this.title}) : super(key: key); +class MyHomePage extends StatelessWidget { final String title; + final ContenedoresBloc contenedoresBloc; - @override - State createState() => _MyHomePageState(); + MyHomePage({Key? key, required this.title, required this.contenedoresBloc}) + : super(key: key); + + Future _launchURL(String url) async { + try { + await launch(url); + } catch (e) { + // Captura de la excepción + print('An error occurred: $e'); + } } -class _MyHomePageState extends State { + @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text(''), - centerTitle: true, - backgroundColor: const Color.fromARGB(255, 33, 150, 243), - leading: IconButton( - onPressed: () {}, - icon: const Icon(Icons.menu), - color: Colors.white, + appBar: AppBar( + title: const Text(''), + centerTitle: true, + backgroundColor: const Color.fromARGB(255, 33, 150, 243), + leading: IconButton( + onPressed: () {}, + icon: const Icon(Icons.menu), + color: Colors.white, + ), + flexibleSpace: Container( + padding: const EdgeInsets.all(8.0), + child: Center( + child: Image.asset( + 'assets/logo-civan.png', + height: 150, + width: 150, + ), ), - flexibleSpace: Container( + ), + ), + body: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/agua.jpg'), + fit: BoxFit.cover, + ), + ), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildContenedor(context, 'Noticias'), + _buildContenedor(context, 'Pregón del día'), + _buildContenedor(context, 'Embalses'), + _buildContenedor(context, 'Tiempo'), + ], + ), + ), + ), + bottomNavigationBar: BottomNavigationBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.call), + label: 'Llamar', + ), + BottomNavigationBarItem( + icon: Icon(Icons.email), + label: 'Correo', + ), + ], + selectedItemColor: Colors.blue, + unselectedItemColor: Colors.blue, + backgroundColor: const Color.fromARGB(255, 255, 255, 255), + currentIndex: 0, + onTap: (int index) { + if (index == 0) { + // Abre la aplicación de teléfono con el número marcado + _launchURL('tel:+348766361379'); // Reemplazar con el número de teléfono real + } else if (index == 1) { + // Abre la aplicación de correo electrónico + _launchURL('mailto:info@example.com'); // Reemplazar con la dirección de correo electrónico real + } + }, + ), + ); +} + + Widget _buildContenedor(BuildContext context, String nombre) { + return InkWell( + onTap: () { + switch (nombre) { + case 'Noticias': + contenedoresBloc.selectContenedor(Contenedor.noticias); + print("Contenedor noticias pulsado"); + break; + case 'Pregón del día': + contenedoresBloc.selectContenedor(Contenedor.pregon); + print("Contenedor pregon pulsado"); + break; + case 'Embalses': + contenedoresBloc.selectContenedor(Contenedor.embalses); + print("Contenedor embalses pulsado"); + break; + case 'Tiempo': + contenedoresBloc.selectContenedor(Contenedor.tiempo); + print("Contenedor tiempo pulsado"); + break; + } + }, + child: SizedBox( + width: 300.0, + child: Padding( + padding: const EdgeInsets.only(bottom: 20.0), + child: Container( padding: const EdgeInsets.all(8.0), - child: Center( - child: Image.asset( - 'assets/logo-civan.png', - height: 200, // Cambia la altura según sea necesario - width: 200, // Cambia el ancho según sea necesario + decoration: BoxDecoration( + color: nombre == 'Noticias' + ? Colors.blue + : const Color.fromRGBO(33, 150, 243, 1), + borderRadius: BorderRadius.circular(7.0), + ), + child: Text( + nombre, + textAlign: TextAlign.center, + style: const TextStyle( + color: Colors.white, + fontSize: 32.0, + fontWeight: FontWeight.bold, ), ), ), ), - body: Container( - decoration: BoxDecoration( - image: DecorationImage( - image: - AssetImage('assets/agua.jpg'), // Ruta de la imagen de fondo - fit: BoxFit - .cover, // Ajusta la imagen para que cubra todo el contenedor - ), - ), - - - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - InkWell( - onTap: () { - print('Contenedor noticias clickeado'); - }, - child: SizedBox( - width: 300.0, - child: Padding( - padding: const EdgeInsets.only(bottom: 20.0), - child: Container( - padding: const EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.circular(7.0), - ), - child: const Text( - 'Noticias', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 32.0, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ), - ), - InkWell( - onTap: () { - print('Contenedor pregón clickeado'); - }, - customBorder: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(100)), - child: SizedBox( - width: 300.0, - child: Padding( - padding: const EdgeInsets.only(bottom: 20.0), - child: Container( - padding: const EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.circular(7.0), - ), - child: const Text( - 'Pregón del día', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 32.0, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ), - ), - InkWell( - onTap: () { - print('Contenedor embalses clickeado'); - }, - child: SizedBox( - width: 300.0, - child: Padding( - padding: const EdgeInsets.only(bottom: 20.0), - child: Container( - padding: const EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: const Color.fromRGBO(33, 150, 243, 1), - borderRadius: BorderRadius.circular(7.0), - ), - child: const Text( - 'Embalses', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 32.0, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ), - ), - InkWell( - onTap: () { - print('Contenedor tiempo clickeado'); - }, - child: SizedBox( - width: 300.0, - child: Padding( - padding: const EdgeInsets.only(bottom: 20.0), - child: Container( - padding: const EdgeInsets.all(8.0), - decoration: BoxDecoration( - color: const Color.fromRGBO(33, 150, 243, 1), - borderRadius: BorderRadius.circular(7.0), - ), - child: const Text( - 'Tiempo', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 32.0, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - ), - ), - ], - ), - ), - )); + ), + ); } } + +void main() { + runApp(const MyApp()); +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..8236f57 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 64a517a..e35a375 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -75,6 +75,11 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" leak_tracker: dependency: transitive description: @@ -139,6 +144,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" sky_engine: dependency: transitive description: flutter @@ -192,6 +205,70 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" + url: "https://pub.dev" + source: hosted + version: "6.2.6" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" + url: "https://pub.dev" + source: hosted + version: "6.2.5" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + url: "https://pub.dev" + source: hosted + version: "3.1.1" vector_math: dependency: transitive description: @@ -208,5 +285,14 @@ packages: url: "https://pub.dev" source: hosted version: "13.0.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" sdks: dart: ">=3.3.4 <4.0.0" + flutter: ">=3.19.0" diff --git a/pubspec.yaml b/pubspec.yaml index 2662d3a..d36c6a4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,6 +30,7 @@ environment: dependencies: flutter: sdk: flutter + url_launcher: ^6.0.12 # The following adds the Cupertino Icons font to your application. diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8b6d468..4f78848 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b93c4c3..88b22e5 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST