{"id":22034,"date":"2025-07-10T09:58:00","date_gmt":"2025-07-10T07:58:00","guid":{"rendered":"https:\/\/carontestudio.com\/blog\/?p=22034"},"modified":"2025-07-15T12:35:19","modified_gmt":"2025-07-15T10:35:19","slug":"como-crear-app-con-flutter-guia-basica-3","status":"publish","type":"post","link":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/","title":{"rendered":"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3"},"content":{"rendered":"\n<p>Continuamos con nuestro proyecto de crear una aplicaci\u00f3n en Flutter, en este punto ya tenemos claro como crear un proyecto, como emularlo y unas cuantas cosas sobre como obtener y mostrar la informaci\u00f3n. En este art\u00edculo nos centraremos en otras funcionalidades muy \u00fatiles que te ser\u00e1n de gran ayuda para tu aplicaci\u00f3n. Si no has le\u00eddo los anteriores art\u00edculos, te los dejo aqu\u00ed abajo, si ya est\u00e1s al d\u00eda con esta serie de art\u00edculos, \u00a1comenzamos!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paquetes y plugins en Flutter<\/h2>\n\n\n\n<p>Los paquetes y plugins en Flutter son componentes reutilizables que a\u00f1aden funcionalidad a nuestras aplicaciones. La diferencia principal es que los plugins pueden contener c\u00f3digo nativo espec\u00edfico de plataforma.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Instalaci\u00f3n<\/h3>\n\n\n\n<p>Para instalar paquetes y plugins, abrimos el archivo pubspec.yaml, aqu\u00ed encontraremos un apartado llamado <em>dependencies<\/em>. Aqu\u00ed debemos poner los paquetes y plugins que queremos instalar junto con la versi\u00f3n del mismo. Podemos especificar una versi\u00f3n espec\u00edfica, o una versi\u00f3n m\u00ednima. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dependencies:\n  paquete_1: ^2.3.0    # Todas las versiones superiores a 2.3.0 hasta la 3.0.0\n  paquete_2: '6.3.7'   # Solo la versi\u00f3n 6.3.7<\/code><\/pre>\n\n\n\n<p>Ya tenemos definidos los paquetes o plugins a instalar, ahora ejecutamos el comando <code>flutter pub get<\/code> y observamos la consola, aqu\u00ed nos dir\u00e1 si todo ha ido bien, o si hay alg\u00fan problema con alg\u00fan paquete o plugin.<\/p>\n\n\n\n<p>\u00a1Genial! Ya has instalado los paquetes y plugins que quer\u00edas, ahora los puedes usar en tu c\u00f3digo. Para usarlos deber\u00e1s importarlos en tu c\u00f3digo de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'package:nombre_del_paquete\/nombre_del_paquete.dart';<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tabs y drawers en Flutter<\/h2>\n\n\n\n<p>En aplicaciones que usan Material Design, hay dos opciones principales para navegar, las tabs y los drawers. Estos \u00faltimos son muy \u00fatiles cuando no disponemos de espacio suficiente para las tabs. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tabs<\/h3>\n\n\n\n<p>Para poder trabajar con tabs, es necesario tener un TabController, podemos crear uno personalizado, o usar el que viene por defecto (DefaultTabController). El TabController, es el encargado de mantener la pesta\u00f1a activa y el contenido sincronizado.<\/p>\n\n\n\n<p>Cada pesta\u00f1a se crea con el widget TabBar, y su contenido con TabBarView. El uso es bastante sencillo, en la documentaci\u00f3n oficial, podr\u00e1s encontrar un <a href=\"https:\/\/docs.flutter.dev\/cookbook\/design\/tabs#interactive-example\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ejemplo interactivo<\/a> que muestra muy bien el uso de estos widgets.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"322\" height=\"385\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/tabsdemo.jpg\" alt=\"C\u00f3mo crear tu primera App con Flutter: Tabs\" class=\"wp-image-22080\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/tabsdemo.jpg 322w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/tabsdemo-251x300.jpg 251w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\"><code>    return MaterialApp(\n      home: DefaultTabController(\n        length: 3,\n        child: Scaffold(\n          appBar: AppBar(\n            bottom: const TabBar(\n              tabs: &#91;\n                Tab(icon: Icon(Icons.directions_car)),\n                Tab(icon: Icon(Icons.directions_transit)),\n                Tab(icon: Icon(Icons.directions_bike)),\n              ],\n            ),\n            title: const Text('Tabs Demo'),\n          ),\n          body: const TabBarView(\n            children: &#91;\n              Icon(Icons.directions_car),\n              Icon(Icons.directions_transit),\n              Icon(Icons.directions_bike),\n            ],\n          ),\n        ),\n      ),\n    );\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Drawer<\/h3>\n\n\n\n<p>En Flutter, los drawer se crean combinando el widget Drawer con Scaffold.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"323\" height=\"381\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/drawer.jpg\" alt=\"C\u00f3mo crear tu primera App con Flutter: Drawer\" class=\"wp-image-22085\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/drawer.jpg 323w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/drawer-254x300.jpg 254w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\"><code>static const List&lt;Widget&gt; _widgetOptions = &lt;Widget&gt;&#91;\n    Text(\n      'Index 0: Home',\n      style: optionStyle,\n    ),\n    Text(\n      'Index 1: Business',\n      style: optionStyle,\n    ),\n    Text(\n      'Index 2: School',\n      style: optionStyle,\n    ),\n  ];\n   ListTile(\n      title: const Text('Home'),\n      selected: _selectedIndex == 0,\n      onTap: () {\n         \/\/ Update the state of the app\n         _onItemTapped(0);\n         \/\/ Then close the drawer\n         Navigator.pop(context);\n         },\n      ),\n    ListTile(\n       title: const Text('Business'),\n       selected: _selectedIndex == 1,\n       onTap: () {\n         \/\/ Update the state of the app\n         _onItemTapped(1);\n         \/\/ Then close the drawer\n         Navigator.pop(context);\n         },\n    ),\n    ListTile(\n         title: const Text('School'),\n         selected: _selectedIndex == 2,\n         onTap: () {\n            \/\/ Update the state of the app\n            _onItemTapped(2);\n            \/\/ Then close the drawer\n            Navigator.pop(context);\n         },\n   ),<\/code><\/pre>\n\n\n\n<p>Una vez tenemos esta estructura creada, solo nos queda a\u00f1adir contenido al drawer. Esto se podr\u00eda hacer con el widget Column, pero es m\u00e1s recomendable usar un ListView, que permite al usuario hacer scroll en caso de tener mucho contenido. <a href=\"https:\/\/docs.flutter.dev\/cookbook\/design\/drawer#interactive-example\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Aqu\u00ed te dejo el ejemplo completo.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Almacenamiento local<\/h2>\n\n\n\n<p>El almacenamiento local es algo muy necesario en la mayor\u00eda de aplicaciones. Con Flutter es muy sencillo integrarlo. Para ello tenemos que hacer uso de la librer\u00eda <em><a href=\"https:\/\/pub.dev\/packages\/shared_preferences\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">shared_preferences<\/a><\/em>.<\/p>\n\n\n\n<p>Una vez tenemos instalada la librer\u00eda, tenemos que obtener las preferencias compartidas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>final ls = await SharedPreferences.getInstance();<\/code><\/pre>\n\n\n\n<p>\u00a1Perfecto! Ya podemos usar el almacenamiento local. Para guardar datos, es tan sencillo como usar la funci\u00f3n set con el tipo de dato que queremos guardar. Aqu\u00ed unos ejemplos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Guardar un n\u00famero entero llamado \"numero\"\nawait ls.setInt('numero', 5);\n\n\/\/ Guardar un n\u00famero decimal llamado \"numerodec\"\nawait ls.setDouble('numerodec', 12.3);\n\n\/\/ Guardar un booleano \nawait ls.setBool('booleano', true);\n\n\/\/ Guardar un string llamado cadena\nawait ls.setString('cadena', 'Hola mundo');\n\n\/\/ Guardar una lista de Strings llamado cadenas \nawait ls.setStringList('cadenas', &lt;String&gt;&#91;'Hola', 'Mundo']);<\/code><\/pre>\n\n\n\n<p>Para recuperar datos es parecido, solo que usamos la funci\u00f3n get en vez de set.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await ls.getInt('numero');<\/code><\/pre>\n\n\n\n<p>Para borrar los datos, usamos remove con la clave, en este caso para borrar los datos de cadenas har\u00edamos lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>final borrar = await ls.remove('cadenas');<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Firebase para Flutter<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"654\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/firebaseflutter-1024x654.png\" alt=\"C\u00f3mo crear tu primera App con Flutter: Firebase para Flutter\" class=\"wp-image-22072\" style=\"width:399px;height:auto\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/firebaseflutter-1024x654.png 1024w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/firebaseflutter-300x192.png 300w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/firebaseflutter-768x491.png 768w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/firebaseflutter.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Firebase es una plataforma BaaS (Backend-as-a-Service) de Google, que proporciona servicios como autenticaci\u00f3n, bases de datos, machine learning y mucho m\u00e1s. Para usar cada uno de estos servicios, debes instalarlos individualmente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dependencies:\n  firebase_core: ^1.10.0\n  firebase_auth: ^3.1.0\n  cloud_firestore: ^2.5.0\n  firebase_storage: ^10.2.0<\/code><\/pre>\n\n\n\n<p>La configuraci\u00f3n es diferente para Android e iOS, recomendamos seguir paso a paso la <a href=\"https:\/\/firebase.google.com\/docs\/flutter\/setup?hl=es-419&amp;platform=ios\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">documentaci\u00f3n oficial<\/a> para configurarlo. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Notificaciones en aplicaciones Flutter<\/h2>\n\n\n\n<p>Vamos a distinguir dos tipos de notificaciones, las notificaciones locales y las notificaciones push.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Notificaciones locales<\/h3>\n\n\n\n<p>Las notificaciones locales las genera la propia aplicaci\u00f3n, son completamente personalizables y no requieren de conexi\u00f3n a internet. Esto es muy \u00fatil para alarmas, eventos o notificaciones relacionadas con el tiempo. El paquete flutter m\u00e1s usado para esto es <em>flutter_local_notifications<\/em>. En el siguiente c\u00f3digo vemos como programar\u00edamos una notificaci\u00f3n para que avise de una reuni\u00f3n a las 11:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/notificaiones-683x1024.jpg\" alt=\"Notificaciones locales y notificaciones push\" class=\"wp-image-22075\" style=\"width:404px;height:auto\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/notificaiones-683x1024.jpg 683w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/notificaiones-200x300.jpg 200w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/notificaiones-768x1152.jpg 768w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/notificaiones.jpg 896w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\"><code>import 'package:flutter_local_notifications\/flutter_local_notifications.dart';\n\nvoid scheduleMeetingNotification() async {\n  \/\/ Configuraci\u00f3n espec\u00edfica para Android\n  var androidDetails = AndroidNotificationDetails(\n    'meeting_channel_id', \/\/ ID del canal\n    'Meeting Notifications', \/\/ Nombre del canal\n    'Notificationes para reuniones programadas', \/\/ Descripci\u00f3n del canal\n    importance: Importance.high, \/\/ Importancia alta\n    priority: Priority.high, \/\/ Prioridad alta\n  );\n\n  \/\/ Configuraci\u00f3n espec\u00edfica para iOS\n  var iosDetails = IOSNotificationDetails();\n\n  \/\/ Configuraci\u00f3n general para ambas plataformas\n  var notificationDetails = NotificationDetails(\n    android: androidDetails,\n    iOS: iosDetails,\n  );\n\n  \/\/ Instancia del plugin\n  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =\n      FlutterLocalNotificationsPlugin();\n\n  \/\/ Inicializaci\u00f3n del plugin\n  var initializationSettingsAndroid =\n      AndroidInitializationSettings('@mipmap\/ic_launcher');\n  var initializationSettingsIOS = IOSInitializationSettings();\n  var initializationSettings = InitializationSettings(\n    android: initializationSettingsAndroid,\n    iOS: initializationSettingsIOS,\n  );\n  await flutterLocalNotificationsPlugin.initialize(initializationSettings);\n\n  \/\/ Programar la notificaci\u00f3n para las 11:00 AM\n  var scheduledTime = DateTime.now();\n  scheduledTime = DateTime(\n    scheduledTime.year,\n    scheduledTime.month,\n    scheduledTime.day,\n    11, \/\/ Hora\n    0,  \/\/ Minutos\n  );\n\n  \/\/ Mostrar la notificaci\u00f3n programada\n  await flutterLocalNotificationsPlugin.zonedSchedule(\n    0, \/\/ ID \u00fanico de la notificaci\u00f3n\n    'Reuni\u00f3n Programada', \/\/ T\u00edtulo\n    'No olvides tu reuni\u00f3n a las 11:00 AM.', \/\/ Cuerpo\n    scheduledTime, \/\/ Fecha y hora programadas\n    notificationDetails, \/\/ Detalles de la notificaci\u00f3n\n    androidAllowWhileIdle: true, \/\/ Permitir mientras est\u00e1 inactivo\n    uiLocalNotificationDateInterpretation:\n        UILocalNotificationDateInterpretation.absoluteTime,\n  );\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Notificaciones push<\/h3>\n\n\n\n<p>En el caso de las notificaciones push, no se generan en la aplicaci\u00f3n, sino que es un servicio cloud externo quien las lanza, lo que hace que requieran de conexi\u00f3n a internet. Es muy \u00fatil para notificaciones en tiempo real. Su personalizaci\u00f3n es limitada, sobre todo si la aplicaci\u00f3n se encuentra cerrada o ejecut\u00e1ndose en segundo plano, en estos casos los estilos de la notificaci\u00f3n dependen del sistema operativo. El paquete con el que se gestiona esto en flutter es <em>firebase_messaging<\/em>, usando Firebase Cloud Messaging (FCM).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  void _setupFirebaseMessaging() {\n    _firebaseMessaging = FirebaseMessaging.instance;\n\n    \/\/ Solicita permisos para notificaciones en iOS\n    _firebaseMessaging.requestPermission(\n      alert: true,\n      badge: true,\n      sound: true,\n    );\n\n    \/\/ Manejo de notificaciones en segundo plano y terminadas\n    FirebaseMessaging.onBackgroundMessage(_firebaseBackgroundHandler);\n\n    \/\/ Escucha mensajes cuando la app est\u00e1 en primer plano\n    FirebaseMessaging.onMessage.listen((RemoteMessage message) {\n      print('Mensaje recibido en primer plano: ${message.notification?.title}');\n      _showNotification(message.notification?.title, message.notification?.body);\n    });\n\n    \/\/ Obtiene el token de FCM del dispositivo\n    _firebaseMessaging.getToken().then((token) {\n      print(\"Token de dispositivo: $token\");\n      \/\/ Puedes enviar este token a tu servidor para enviar notificaciones dirigidas\n    });\n  }\n\n  \/\/ Muestra una notificaci\u00f3n en la pantalla\n  void _showNotification(String? title, String? body) {\n    showDialog(\n      context: context,\n      builder: (context) =&gt; AlertDialog(\n        title: Text(title ?? 'Nueva notificaci\u00f3n'),\n        content: Text(body ?? 'Sin contenido'),\n        actions: &#91;\n          TextButton(\n            onPressed: () =&gt; Navigator.of(context).pop(),\n            child: Text('Cerrar'),\n          ),\n        ],\n      ),\n    );\n  }\n\n\/\/ Manejo de notificaciones en segundo plano\nFuture&lt;void&gt; _firebaseBackgroundHandler(RemoteMessage message) async {\n  print('Mensaje recibido en segundo plano: ${message.notification?.title}');\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Gestos en apps Flutter<\/h2>\n\n\n\n<p>Los gestos se usan para que los usuarios interact\u00faen con la aplicaci\u00f3n, vamos a ver cu\u00e1les son estos gestos y c\u00f3mo los podemos manejar.<\/p>\n\n\n\n<p>Los gestos m\u00e1s comunes son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tap:<\/strong>&nbsp;tocar la superficie del dispositivo con la yema del dedo durante un breve per\u00edodo de tiempo y finalmente soltar el dedo.<\/li>\n\n\n\n<li><strong><strong>Double Tap<\/strong>:<\/strong>&nbsp;tocar dos veces en un per\u00edodo corto.<\/li>\n\n\n\n<li><strong>Drag:<\/strong>&nbsp;Tocar la superficie del dispositivo con la yema del dedo y luego mover el dedo de manera constante y finalmente soltar.<\/li>\n\n\n\n<li><strong>Flick:<\/strong>&nbsp;Similar a arrastrar, pero haci\u00e9ndolo de forma m\u00e1s r\u00e1pida.<\/li>\n\n\n\n<li><strong>Pinch:<\/strong>&nbsp;Pellizcar la superficie del dispositivo utilizando dos dedos, como si hici\u00e9semos zoom-out.<\/li>\n\n\n\n<li><strong>Zoom:<\/strong>&nbsp;Lo opuesto de pellizcar.<\/li>\n\n\n\n<li><strong><strong>Panning<\/strong>:<\/strong>&nbsp;tocar la superficie del dispositivo con la yema del dedo y moverlo en la direcci\u00f3n deseada sin soltar el dedo.<\/li>\n<\/ul>\n\n\n\n<p>Cada gesto tiene asociados ciertos eventos, por ejemplo el gesto tap tiene los eventos onTapDown, onTapUp, onTap y onTapCancel. Con estos eventos y con ayuda del widget GestureDetector, podemos gestionar las acciones de los gestos en nuestra aplicaci\u00f3n. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> child: GestureDetector(\n              onTap: () =&gt; _updateMessage(\"Tap detectado\"),\n              onDoubleTap: () =&gt; _updateMessage(\"Double Tap detectado\"),\n              onLongPress: () =&gt; _updateMessage(\"Long Press detectado\"),\n              onPanUpdate: (details) =&gt; _updateMessage(\n                  \"Panning detectado: dx=${details.delta.dx}, dy=${details.delta.dy}\"),\n              onScaleStart: (_) =&gt; _updateMessage(\"Pinch\/Zoom detectado\"),\n              child: Container(\n                width: 200,\n                height: 200,\n                color: Colors.blueAccent,\n                child: Center(\n                  child: Text(\n                    \"Toca aqu\u00ed\",\n                    style: TextStyle(color: Colors.white, fontSize: 18),\n                  ),\n                ),\n              ),\n            ),<\/code><\/pre>\n\n\n\n<p>Adem\u00e1s de GestureDetector, en Flutter tenemos otros widgets para gestionar gestos m\u00e1s espec\u00edficos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><strong>Dismissible<\/strong>:<\/strong>&nbsp;admite el gesto de deslizar para finalizar el widget.<\/li>\n\n\n\n<li><strong><strong>Draggable<\/strong>:<\/strong>&nbsp;admite el gesto de arrastrar para hacer que el widget sea m\u00f3vil.<\/li>\n\n\n\n<li><strong>LongPressDraggable:<\/strong>&nbsp;si los widgets principales se pueden arrastrar, admite el gesto de arrastrar para mover el widget secundario.<\/li>\n\n\n\n<li><strong>DragTarget:<\/strong>&nbsp;acepta cualquier widget arrastrable<\/li>\n\n\n\n<li><strong>IgnorePointer:<\/strong>&nbsp;cuando se usa, oculta el widget y sus elementos secundarios correspondientes del proceso de detecci\u00f3n de gestos.<\/li>\n\n\n\n<li><strong>AbsorbPointer:<\/strong>&nbsp;detiene el proceso de detecci\u00f3n de gestos para evitar el env\u00edo de acciones a widgets superpuestos.<\/li>\n\n\n\n<li><strong><strong>Scrollable<\/strong>:<\/strong>&nbsp;hace que el contenido disponible dentro del widget sea desplazable.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Integraci\u00f3n de Flutter con c\u00f3digo nativo<\/h2>\n\n\n\n<p>Flutter ofrece una&nbsp;poderosa capacidad&nbsp;de integraci\u00f3n con c\u00f3digo nativo, permiti\u00e9ndonos aprovechar funcionalidades espec\u00edficas de plataforma y APIs nativas. Esta integraci\u00f3n se puede lograr de&nbsp;varias maneras:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/andoridios.jpg\" alt=\"Integraci\u00f3n con c\u00f3digo nativo\" class=\"wp-image-22077\" style=\"width:353px;height:auto\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/andoridios.jpg 800w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/andoridios-300x300.jpg 300w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/andoridios-150x150.jpg 150w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/andoridios-768x768.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">M\u00e9todo de plataforma<\/h3>\n\n\n\n<p>Los m\u00e9todos de plataforma permiten la comunicaci\u00f3n entre el c\u00f3digo Dart de Flutter y el c\u00f3digo nativo. Se implementan utilizando MethodChannel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const platform = MethodChannel('com.example\/native');\n\ntry {\n  final result = await platform.invokeMethod('getNativeData');\n  \/\/ Usar el resultado\n} on PlatformException catch (e) {\n  \/\/ Manejar errores\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">FFI (Foreign Function Interface)<\/h3>\n\n\n\n<p>FFI permite llamar directamente a funciones de bibliotecas nativas desde Dart:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'dart:ffi' as ffi;\n\nfinal dylib = ffi.DynamicLibrary.open('path\/to\/native\/library');\nfinal multiply = dylib.lookupFunction&lt;ffi.Int32 Function(ffi.Int32, ffi.Int32), int Function(int, int)&gt;('multiply');\n\nint result = multiply(3, 4);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Vistas de plataforma<\/h3>\n\n\n\n<p>Las vistas de plataforma permiten incrustar vistas nativas directamente en la interfaz de usuario de Flutter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AndroidView(\n  viewType: 'native-view',\n  creationParams: {'param1': 'value1'},\n  creationParamsCodec: StandardMessageCodec(),\n)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u00a1Ya lo tienes!<\/h2>\n\n\n\n<p>\u00a1Genial! Ya dominas muchas de las funcionalidades que nos ofrece Flutter. En este art\u00edculo hemos visto funcionalidades muy interesantes y \u00fatiles. \u00bfCu\u00e1l ha sido tu favorita? \u00a1D\u00e9janoslo en comentarios!<\/p>\n\n\n\n<div class=\"wp-block-columns sabermas is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/carontestudio.com\/blog\/crear-app-con-flutter-guia-basica\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"604\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/portada-flutter-1024x604.jpg\" alt=\"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 1\" class=\"wp-image-21748\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/portada-flutter-1024x604.jpg 1024w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/portada-flutter-300x177.jpg 300w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/portada-flutter-768x453.jpg 768w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/portada-flutter.jpg 1250w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/carontestudio.com\/blog\/crear-app-con-flutter-guia-basica-2\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"604\" src=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/flutter21-1024x604.jpg\" alt=\"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 2\" class=\"wp-image-21860\" srcset=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/flutter21-1024x604.jpg 1024w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/flutter21-300x177.jpg 300w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/flutter21-768x453.jpg 768w, https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/flutter21.jpg 1250w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros. <\/p>\n","protected":false},"author":22,"featured_media":22054,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[50],"tags":[],"class_list":["post-22034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion-web"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crea tu primera App con Flutter: Paquetes, almacenamiento...<\/title>\n<meta name=\"description\" content=\"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crea tu primera App con Flutter: Paquetes, almacenamiento...\" \/>\n<meta property=\"og:description\" content=\"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog de maketing | Caronte\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/carontewebstudio\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-10T07:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-15T10:35:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1250\" \/>\n\t<meta property=\"og:image:height\" content=\"737\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Irune Guinea\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Irune Guinea\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/\"},\"author\":{\"name\":\"Irune Guinea\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/person\\\/300ad5e85146a39ec7ea40f21abc8b38\"},\"headline\":\"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3\",\"datePublished\":\"2025-07-10T07:58:00+00:00\",\"dateModified\":\"2025-07-15T10:35:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/\"},\"wordCount\":1232,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/guiabasica3.jpg\",\"articleSection\":[\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/\",\"name\":\"Crea tu primera App con Flutter: Paquetes, almacenamiento...\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/guiabasica3.jpg\",\"datePublished\":\"2025-07-10T07:58:00+00:00\",\"dateModified\":\"2025-07-15T10:35:19+00:00\",\"description\":\"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/guiabasica3.jpg\",\"contentUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/guiabasica3.jpg\",\"width\":1250,\"height\":737,\"caption\":\"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/como-crear-app-con-flutter-guia-basica-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\",\"name\":\"Blog de marketing | Caronte\",\"description\":\"En nuestro blog encontrar\u00e1s art\u00edculos semanales sobre SEO, marketing online, programaci\u00f3n web y mucho m\u00e1s.\",\"publisher\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#organization\",\"name\":\"Caronte - Agencia de marketing\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/caronte-agencia-de-marketing-logo.png\",\"contentUrl\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/caronte-agencia-de-marketing-logo.png\",\"width\":1090,\"height\":155,\"caption\":\"Caronte - Agencia de marketing\"},\"image\":{\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/carontewebstudio\\\/\",\"https:\\\/\\\/www.instagram.com\\\/caronte_studio\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@carontewebstudio\",\"https:\\\/\\\/www.youtube.com\\\/@carontewebstudio\",\"https:\\\/\\\/es.linkedin.com\\\/company\\\/carontewebstudio\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/#\\\/schema\\\/person\\\/300ad5e85146a39ec7ea40f21abc8b38\",\"name\":\"Irune Guinea\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g\",\"caption\":\"Irune Guinea\"},\"url\":\"https:\\\/\\\/carontestudio.com\\\/blog\\\/author\\\/irune\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crea tu primera App con Flutter: Paquetes, almacenamiento...","description":"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/","og_locale":"es_ES","og_type":"article","og_title":"Crea tu primera App con Flutter: Paquetes, almacenamiento...","og_description":"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.","og_url":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/","og_site_name":"Blog de maketing | Caronte","article_publisher":"https:\/\/www.facebook.com\/carontewebstudio\/","article_published_time":"2025-07-10T07:58:00+00:00","article_modified_time":"2025-07-15T10:35:19+00:00","og_image":[{"width":1250,"height":737,"url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg","type":"image\/jpeg"}],"author":"Irune Guinea","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Irune Guinea","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#article","isPartOf":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/"},"author":{"name":"Irune Guinea","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/person\/300ad5e85146a39ec7ea40f21abc8b38"},"headline":"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3","datePublished":"2025-07-10T07:58:00+00:00","dateModified":"2025-07-15T10:35:19+00:00","mainEntityOfPage":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/"},"wordCount":1232,"commentCount":0,"publisher":{"@id":"https:\/\/carontestudio.com\/blog\/#organization"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#primaryimage"},"thumbnailUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg","articleSection":["Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/","url":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/","name":"Crea tu primera App con Flutter: Paquetes, almacenamiento...","isPartOf":{"@id":"https:\/\/carontestudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#primaryimage"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#primaryimage"},"thumbnailUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg","datePublished":"2025-07-10T07:58:00+00:00","dateModified":"2025-07-15T10:35:19+00:00","description":"En esta tercera parte de crear tu primera app, veremos como funcionan en Flutter los paquetes, el almacenamiento o Firebase entre otros.","breadcrumb":{"@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#primaryimage","url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg","contentUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/01\/guiabasica3.jpg","width":1250,"height":737,"caption":"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3"},{"@type":"BreadcrumbList","@id":"https:\/\/carontestudio.com\/blog\/como-crear-app-con-flutter-guia-basica-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/carontestudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo crear tu primera App con Flutter: Gu\u00eda b\u00e1sica 3"}]},{"@type":"WebSite","@id":"https:\/\/carontestudio.com\/blog\/#website","url":"https:\/\/carontestudio.com\/blog\/","name":"Blog de marketing | Caronte","description":"En nuestro blog encontrar\u00e1s art\u00edculos semanales sobre SEO, marketing online, programaci\u00f3n web y mucho m\u00e1s.","publisher":{"@id":"https:\/\/carontestudio.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/carontestudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/carontestudio.com\/blog\/#organization","name":"Caronte - Agencia de marketing","url":"https:\/\/carontestudio.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/06\/caronte-agencia-de-marketing-logo.png","contentUrl":"https:\/\/carontestudio.com\/blog\/wp-content\/uploads\/2025\/06\/caronte-agencia-de-marketing-logo.png","width":1090,"height":155,"caption":"Caronte - Agencia de marketing"},"image":{"@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/carontewebstudio\/","https:\/\/www.instagram.com\/caronte_studio\/","https:\/\/www.tiktok.com\/@carontewebstudio","https:\/\/www.youtube.com\/@carontewebstudio","https:\/\/es.linkedin.com\/company\/carontewebstudio"]},{"@type":"Person","@id":"https:\/\/carontestudio.com\/blog\/#\/schema\/person\/300ad5e85146a39ec7ea40f21abc8b38","name":"Irune Guinea","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3002e85ac73b53aad9f60e3f1b230ffa3c9dcfcf1167b8cc8131a093f97a15da?s=96&d=mm&r=g","caption":"Irune Guinea"},"url":"https:\/\/carontestudio.com\/blog\/author\/irune\/"}]}},"_links":{"self":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/22034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/comments?post=22034"}],"version-history":[{"count":54,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/22034\/revisions"}],"predecessor-version":[{"id":23961,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/posts\/22034\/revisions\/23961"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/media\/22054"}],"wp:attachment":[{"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/media?parent=22034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/categories?post=22034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carontestudio.com\/blog\/wp-json\/wp\/v2\/tags?post=22034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}