Alex Astudillo
Alex Astudillo
  • 51
  • 70 504
#Flutter Google Mobile Ads | Reutilizable Banner Ad | Android
www.alexastudillo.com
#AlexAstudillo
En este video aprenderás como poner un anuncio en tu aplicación móvil hecha en Flutter, además de como reutilizar el anuncio en distintas páginas todo esto con el anuncio en formato Banner.
Proyecto GitHub: bit.ly/3mGG0mT
Web page: bit.ly/36oeEtL
Instagram: bit.ly/3uMNyKb
Facebook: bit.ly/3Hkc8q4
00:00 Intro
01:10 Ad mob obtener ID
02:55 Añadir dependencia Google Mobile Ads
03:58 Inicializando Mobile Ads
04:35 Error minSdkVersion 19
05:40 Error Multidex flag
06:02 Implementando los anuncios
11:05 Página de Login con Banner
11:35 Banner en medio de la lista
Tracks in the video:
Track: Wiguez & EH!DE - The Path (Ft. Agassi) [NCS Release]
Music provided by NoCopyrightSounds.
Watch: ua-cam.com/video/10P_bK-QwEI/v-deo.html
Free Download / Stream: NCS.io/ThePath
-----------------------------------------------------------------------------
Track: Tobu - If I Disappear (ft. Tom Mårtensson) [NCS Release]
Music provided by NoCopyrightSounds.
Watch: ua-cam.com/video/iHA1utIzpws/v-deo.html
Free Download / Stream: NCS.io/ifidisappear
------------------------------------------------------------------------------
Track: Egzod, Maestro Chives & Alaina Cross - No Rival [NCS Release]
Music provided by NoCopyrightSounds.
Watch: ua-cam.com/video/KbC5_JEhqL8/v-deo.html
Free Download / Stream: ncs.io/NoRival
Переглядів: 919

Відео

Autenticación con email y contraseña en Firebase | Flutter | GetX
Переглядів 3,6 тис.2 роки тому
En esta ocasión usamos Firebase para autenticar un Usuario con su Email y Contraseña, además hacemos uso de #Clean #Architecture. Para seguir el video debes tener conocimiento básico en #Flutter y #Firebase Proyecto GitHub: bit.ly/38uaxAX Web page: www.alexastudillo.com
Use BCrypt password-hashing function to keep your system secure | Flutter #shorts
Переглядів 1,1 тис.2 роки тому
Hello hash your password for more security.
App para registrar tareas de empleados | Backend en #Spring Boot | Frontend en #Flutter
Переглядів 9432 роки тому
#AlexAstudillo #Flutter #SpringBoot En esta ocasión haremos una aplicación que permita controlar las tareas de empleados, haremos tanto el backend como el frontend, para el backend utilizaremos el Framework de Spring Boot para crear un Rest Service y para el Frontend utilizaremos Flutter para consumir nuestro API Rest. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com...
Top 5 widgets que son muy usados o quizás no los conocías | #Flutter
Переглядів 4872 роки тому
#AlexAstudillo #Dart En esta ocasión veremos algunos widgets muy usados y que quizá no conocías, cuéntame en los comentarios si los conocías o cuales no conocías. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web hecha con Flutter en: astudilloalex.github.io Puedes preguntarme algo en Instagram: bit.ly/3uMNyKb 00:00 Intro 00...
Como aplico Clean Architecture a mis proyectos de Flutter | GetX
Переглядів 2,1 тис.2 роки тому
#AlexAstudillo #Flutter En esta ocasión veremos como yo aplico Clean Architecture (Arquitectura Limpia) a mis proyectos de Flutter, pero ten en cuenta que está no es la mejor forma de aplicarle ni mucho menos la única, tu puedes usar las bases de la arquitectura limpia para generar tu propia forma o mejorar la que te muestro. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: git...
#Flutter | Navegación con rutas nombradas de manera simple y sencilla sin el contexto | GetX
Переглядів 6912 роки тому
#AlexAstudillo En esta ocasión usamos GetX para navegar por las distintas páginas de nuestra app, la gran ventaja de GetX es que no requiere el contexto y sobre todo es muy simple usando la navegación con rutas nombradas, por ejemplo podemos usar Get.toNamed('/route') para ir a otra pantalla. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver u...
#Flutter | Base de datos No SQL Hive ejemplo sencillo guardar y obtener los datos | Hive Database
Переглядів 3,8 тис.2 роки тому
#AlexAstudillo En esta ocasión usamos la base de datos No SQL Hive, caracterizada por su alta velocidad de escritura y lectura, además de permitirnos almacenar objetos Dart. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web hecha con Flutter en: astudilloalex.github.io Puedes preguntarme algo en Instagram: alex...
#Flutter | Search delegate con Google Places Autocomplete | Buscar direcciones con la API de Google
Переглядів 1,7 тис.2 роки тому
#AlexAstudillo En esta ocasión implementamos Google Places Autocomplete con Search Delegate en Flutter. Google API Key: ua-cam.com/video/xV6SLvMycuE/v-deo.html Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web hecha con Flutter en: astudilloalex.github.io Puedes preguntarme algo en Instagram: alexastudillooficial
#Flutter | Hacer una petición HTTP muy básica al backend, obtener datos del servidor | #http package
Переглядів 3,3 тис.2 роки тому
#AlexAstudillo En esta ocasión hacemos una petición a un servidor para mostrar datos al usuario usando el paquete http. Este ejemplo es muy sencillo pero te muestra una base para obtener datos desde el servidor (backend). http es un paquete que te permite hacer peticiones al servidor get, post, delete, etc. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloal...
#Flutter | Añade texto en la misma línea con diferentes estilos | #RichText
Переглядів 1,3 тис.2 роки тому
#AlexAstudillo Hola en esta ocasión vemos como podemos hacer uso del Widget RichText para personalizar nuestro texto en la misma línea sin hacer uso del Widget Row. RichText es un widget que te permite darle estilo a tu texto, puedes usar TextSpan para añadir una tras otro. Visita mi blog: www.alexastudillo.com Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web h...
#Flutter | Get X administración del estado simple | GetBuilder, GetX, Obx
Переглядів 8512 роки тому
#AlexAstudillo Veamos un ejemplo sencillo de como gestionar el estado de tu aplicación Flutter con el paquete GetX. Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web hecha con Flutter en: astudilloalex.github.io Puedes preguntarme algo en Instagram: alexastudillooficial
#Flutter | Administración simple del estado de la aplicación con Provider
Переглядів 1,1 тис.2 роки тому
#AlexAstudillo Veamos un ejemplo sencillo de como gestionar el estado de tu aplicación Flutter con el paquete Provider. Puedes visitar ejemplos en: github.com/astudilloalex Puedes ver una aplicación web hecha con Flutter en: astudilloalex.github.io Puedes preguntarme algo en Instagram: alexastudillooficial Track: Tokyo Machine - SLASH [NCS10 Release] Music provided by NoCopyright...
Cuando no deberías usar #Flutter para desarrollar aplicaciones | Recomendaciones
Переглядів 12 тис.2 роки тому
Cuando no deberías usar #Flutter para desarrollar aplicaciones | Recomendaciones
#Flutter inspector | Una introducción básica de como funciona y como nos puede ayudar
Переглядів 1,8 тис.3 роки тому
#Flutter inspector | Una introducción básica de como funciona y como nos puede ayudar
Google Maps #Flutter | Agregando el SDK de Google Maps para dispositivos Android | Tutorial
Переглядів 9683 роки тому
Google Maps #Flutter | Agregando el SDK de Google Maps para dispositivos Android | Tutorial
#Flutter Search Delegate | Buscar en una lista mientras se escribe con una clase propia de Flutter
Переглядів 7 тис.3 роки тому
#Flutter Search Delegate | Buscar en una lista mientras se escribe con una clase propia de Flutter
Flutter - show loading dialog to user very simply #Shorts
Переглядів 2443 роки тому
Flutter - show loading dialog to user very simply #Shorts
Separate your Flutter project into several packages within the same directory | #shorts
Переглядів 863 роки тому
Separate your Flutter project into several packages within the same directory | #shorts
Creando un REST Service en Spring con autenticación | Java
Переглядів 1,8 тис.3 роки тому
Creando un REST Service en Spring con autenticación | Java
Flutter Notes App With SQLite And Provider Package| Speed Coding | Github Repository
Переглядів 1,1 тис.3 роки тому
Flutter Notes App With SQLite And Provider Package| Speed Coding | Github Repository
CN Innovation Challenge
Переглядів 303 роки тому
CN Innovation Challenge
Autenticación con Google en Firebase | Flutter | Tutorial
Переглядів 2,9 тис.3 роки тому
Autenticación con Google en Firebase | Flutter | Tutorial
Authentic Budget
Переглядів 273 роки тому
Authentic Budget
Lista de notas con SQLite y Flutter con Provider Parte 10 | Final
Переглядів 2273 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 10 | Final
Lista de notas con SQLite y Flutter con Provider Parte 9 | Actualizar List Tile Trailing Button
Переглядів 2323 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 9 | Actualizar List Tile Trailing Button
Lista de notas con SQLite y Flutter con Provider Parte 8 | Dismissible Delete
Переглядів 1683 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 8 | Dismissible Delete
Lista de notas con SQLite y Flutter con Provider Parte 7 | Trabajando con MultiProvider
Переглядів 2763 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 7 | Trabajando con MultiProvider
Lista de notas con SQLite y Flutter con Provider Parte 6 | Creando clase SQLiteQuery
Переглядів 2863 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 6 | Creando clase SQLiteQuery
Lista de notas con SQLite y Flutter con Provider Parte 5 | Creando clase SQLiteInsert
Переглядів 3163 роки тому
Lista de notas con SQLite y Flutter con Provider Parte 5 | Creando clase SQLiteInsert

КОМЕНТАРІ

  • @agustincuesta6472
    @agustincuesta6472 Місяць тому

    hblas mucho no esplicas nada

  • @ZaidRodriguez-d3g
    @ZaidRodriguez-d3g 4 місяці тому

    Eres un crack parcero, muy bien explicado. Gracias !

  • @MrWqewqwqwqwqwqe
    @MrWqewqwqwqwqwqe 5 місяців тому

    pues lo peor de todo...se viene la muerte de flutter..

  • @johnalejandocasaspinzon3864
    @johnalejandocasaspinzon3864 6 місяців тому

    Gracias bro súper god😀

  • @JesusManuel965
    @JesusManuel965 8 місяців тому

    Increíble tutorial. Muchísimas gracias!!!

  • @JeffersonChami
    @JeffersonChami 10 місяців тому

    gracias por el video, pero seria genial que compartieras el codigo , en el link de la pagina que pones en la descripción no sale nada, es como si estuviera caido

  • @unknownworld9815
    @unknownworld9815 11 місяців тому

    wish you could speak english bro you explained it well in your native language thanks to caption feature in youtube

  • @JOELANTILLANO
    @JOELANTILLANO 11 місяців тому

    Genial, seria buenos un video implementando los otros formatos de anuncios

  • @marcoantoniovalencia8694
    @marcoantoniovalencia8694 Рік тому

    Olvidaste mencionar que un proyecto hecho en Flutter con lo más básico veras que pesa arriba de 200 MB

  • @aldogameplays990
    @aldogameplays990 Рік тому

    oye por ejemplo , quiero mandar esto "action","consultar", como se lo podriamandar eso medainte flutter ya que me backend espera esos dos parametro

  • @cristian_27
    @cristian_27 Рік тому

    muy buena explicacion , lo hice y funciona muy bien!!

  • @keikusanagi99
    @keikusanagi99 Рік тому

    Worale, esta padre el video, una pregunta, si quiero guardar diferentes listas de contactos, por ejemplo lista de contactos personales y luego lista de contactos de trabajo, como le hago, tendria que crear dos Box?

  • @angelavanegas8201
    @angelavanegas8201 Рік тому

    me sale un error sobre un caracter 20

  • @cmfernandez7
    @cmfernandez7 Рік тому

    Hola Alex. Primero que nada las gracias y felicitaciones por el tremendo aporte profesional en tu presentación. Soy un aficionado todavía en estas materias y quisiera preguntarte: Es posible utilizar como Backend Apache, con mysql (mariadb) y php para interactuar con flutter como frontend? En su defecto, si es necesariamente utilizar un servidor de aplicaciones mas poderoso, usar JBoss o su versión open source Wildfly? Gracias

  • @michael_marin
    @michael_marin Рік тому

    muchas gracias!!

  • @gonzaloquiroga7761
    @gonzaloquiroga7761 Рік тому

    Mil pero mil gracias Maestro.

  • @runingclub
    @runingclub Рік тому

    Como haces para tener acceso a esa api?? siempre me pide detalles de facturacion si deseo entrar a la consola de google cloud. Tuviste que pagar?? o la version gratuita cuanto tiempo dura?

  • @brunolemos5838
    @brunolemos5838 Рік тому

    Gracias!

  • @hectornd-pu5rx
    @hectornd-pu5rx Рік тому

    hfok

  • @tupapichulovegeta8354
    @tupapichulovegeta8354 Рік тому

    EXCELENTE VIDEO!!! GRACIAS POR LA CONTRIBUCIÓN!! En caso se requiera una clave de más de 32 caracteres, como seria? o AES solo se limita a 32 de longitud de llave? TE AGRADECEIA UN MONTO TU RESPUESTA

  • @josealirioyepesmolina
    @josealirioyepesmolina Рік тому

    Amigo Alex, definitivamente me doy por vencido, llevo días y no salgo del atasco, logre todo es mini tutorial super excelente, pero este video de editar no fue posible, revisando el ultimo video, toda la estructura cambia, y entiendo q son buenas practicas, no logro entender la falla en esta pagina. en edit_note.dart final Note note = ModalRoute.of(context)?.settings.arguments; A value of type 'Object?' can't be assigned to a variable of type 'Note'. Try changing the type of the variable, or casting the right-hand type to 'Note'. me gustaría lograrlo. podrías darme una mano? mi versión de flutter es la 3.3.8. y todo el tutorial lo hice. incluyendo la lección 10. 😇

    • @ginopalomino7281
      @ginopalomino7281 Рік тому

      hola puedes reempplazar por esto: final Note _note = ModalRoute.of(context)?.settings.arguments as Note;

    • @ginopalomino7281
      @ginopalomino7281 Рік тому

      culminado si funciona; sigue con los demás videos

  • @josealirioyepesmolina
    @josealirioyepesmolina Рік тому

    Alex muchas gracias, la lógica del curso genial para dummies, todo perfecto hasta la lección 9, pero en la lección donde tratas el error del provider, al cargar la page de note_list, no me funciona, he visto el video con velocidad lenta, para ver detalle a detalle y compararlo con el codigo que tengo, esta igual, pero no carga. hice debug y veo q los datos si los esta almacenando, Yo seguí el curso paso a paso, en Flutter versión 3.3.8. hubo cosas que habia que ajustar como en los modelos required al constructor, revise el video que recomiendas donde haces una mejora a todo el código, para revisar y comparar pero al leerlo me enrede dado que la estructura cambia notablemente. Probé con maquinas virtuales, y directamente en mi dispositivo Motorola One. Afectara la versión con la que lo hice? Revise tu recomendación la actualización del proyecto pero no he logrado hacer que al cargar se muestre la lista, agregue el mismo código de refrescar al floatingActionButton de esta manera si actualiza o si hago un reload se actualiza la page de note-list Para actualizar la lista, en el boton floatingActionButton: FloatingActionButton( onPressed: () { _openAddNote(context); setState(() { _loadProviderData(); }); }, y este es el código que no me funciona para cuando se inicia la pagina de note-list class NoteList extends StatefulWidget { const NoteList({super.key}); @override State<NoteList> createState() => _NoteListState(); //_NoteListState createState() => _NoteListState(); } class _NoteListState extends State<NoteList> { @override void initState() { super.initState(); _loadProviderData(); } Future<void> _loadProviderData() async { final SQliteQuery sqliteQuery = Provider.of<SQliteQuery>(context, listen: false); await _delayed(true, const Duration(milliseconds: 500)); sqliteQuery.updateNotes(); } Future<dynamic> _delayed(dynamic returnVal, Duration duration) { return Future.delayed(duration, () => returnVal); }

  • @josealirioyepesmolina
    @josealirioyepesmolina Рік тому

    Excelente curso, para dummies sqlite/Patron provider, jajaj que bien!!! felicitaciones,

    • @josealirioyepesmolina
      @josealirioyepesmolina Рік тому

      He revisado con mas calma el video Speed Codigo y encontré la respuesta. el MultiProvider se debe colocar a nivel superior en main. es lo que he modificado y ahora si funciona, la carga cuando inicia la app. void main() { runApp(MultiProvider(providers: [ ChangeNotifierProvider(create: (_) => SQliteQuery()), ], child: const MyApp())); } con esto concluyo que siguiendo el tutorial con la versión 3.3.8 me funciono esta parte, en la lección de editar, tengo problemas, seguiré investigando en esa sección hare comentarios si encuentro la respuesta. espero esto le pueda a servir a otra persona. que inice el curso!!.

  • @giselaa8905
    @giselaa8905 Рік тому

    una pregunta y si no quiero usar firebase ya que quiero usar mysql como base de datos, seria lo mismo???

  • @JulianRojas-gc8ur
    @JulianRojas-gc8ur Рік тому

    Hola, tengo una pregunta, como hago para modificar los archivos de estilos que vienen en el proyecto? Las letras me salen rojas con subrayado amarillo y no consigo resetear esos estilos, gracias

  • @worchock
    @worchock Рік тому

    Excelente video, gracias

  • @martellomayorga3064
    @martellomayorga3064 Рік тому

    Bro esa musica de fondo que ???? la verdad te tiraste el video.. gracias por compartir la info pero quita esa musica.

  • @julianrojas4226
    @julianrojas4226 Рік тому

    Hola, necesito autenticar un correo de Microsoft, como lo podría hacer?

  • @jeyrizo1315
    @jeyrizo1315 Рік тому

    Hola amigo estaba siguiendo tu video cuando a mi me pide el sdk 33 algo asi me da el problema no entiendo porque al final he tratado de buscar cual es el problema y sigue igual

  • @Magistrado1914
    @Magistrado1914 Рік тому

    Excelente vídeo Visto en 27/12/2022

  • @fabiantorresm
    @fabiantorresm Рік тому

    Me gusta esta rola 👏👏👏👏

  • @idalopezcastro8211
    @idalopezcastro8211 Рік тому

    muchas gracias por compartir tus conocimientos

  • @Alter_Jazz
    @Alter_Jazz Рік тому

    excelente video, gracias

  • @TROLLIEL13
    @TROLLIEL13 Рік тому

    necesito obtener esos datos pero utilizando token

  • @yaidelaraujo706
    @yaidelaraujo706 2 роки тому

    excelente explicación, solo tengo una duda como le hago para que no salga ningún elemento de la lista previo a la busqueda, o sea salga todo vacio y muestre los resultados una vez busque, gracias

  • @kevinguevara4036
    @kevinguevara4036 2 роки тому

    exelente video hermano 100/10

  • @andrespablohernandez845
    @andrespablohernandez845 2 роки тому

    buenas tengo un problema PlatformException (PlatformException(firebase_core, ApiKey must be set., null, null)) Asi me sale en tu app lo probe, igual sale con una app que estoy haciendo.. que se puede hacer al respecto?

    • @AlexAstudillo1
      @AlexAstudillo1 2 роки тому

      Lo que pasa es que si no descargas lo que te pide firebase como el archivo JSON y las otras configuraciones, te sale ese error, en este caso se usó firebase Cli por eso no se descargó todas las dependencias necesarias

  • @FabianMunnoz
    @FabianMunnoz 2 роки тому

    Hola, estoy tratando de generar el contact adapter y no me crea ningun archivo. tampoco me reconoce el part. LO ARREGLE flutter packages pub run build_runner build --verbose, AGREGANDO EL --verbose

  • @jonathanhanono1999
    @jonathanhanono1999 2 роки тому

    que paso hay q seguir para colocar un ID real de admob

  • @arthourvasquez9820
    @arthourvasquez9820 2 роки тому

    Sigues utilizando GetX? Lo dejé de utilizar dado que muchas empresas no usan este gestor D: y así terminé aprendiendo BLoC

  • @josemarcosluna2197
    @josemarcosluna2197 2 роки тому

    muchas gracias crack

  • @rubenking2605
    @rubenking2605 2 роки тому

    Un juego de poker en flutter? fallaria?

  • @soyluiz360
    @soyluiz360 2 роки тому

    genial! funciono, video corto pero directo al grano ! gracias

  • @sergio2681
    @sergio2681 2 роки тому

    gracias por el vídeo Alex, en mi opinión si quitases la música de fondo te quedaría mejor el video, un saludo!

  • @joordii1994
    @joordii1994 2 роки тому

    Tengo la duda, request y response, al contener fromJson y toJson (ya que si cambiamos de proveedor de datos y la respuesta es en XML esto cambiaría), no deberían estar en la capa de Data? Enhorabuena por el video, un saludo

    • @AlexAstudillo1
      @AlexAstudillo1 2 роки тому

      Puedes agregar una nueva clase como CarResponseModel en la data, realmente la clean architecture se puede aplicar de varias formas unas mejores que otras pero no son reglas estrictas, también podrías en la capa data agregar una folder mappers y dependiendo de como vengan los datos generar tu response. Lo importante en clean architecture es que domain no tenga acceso a data, data no tenga acceso a ui, lo ideal es que UI pueda acceder tanto a data como domain, la capa inferior data pueda acceder a domain, pero ten en cuenta que no soy un experto en Flutter, así que piensa tu la mejor manera de aplicar la Clean Architecture

  • @aviellisandrovasquezreyes1172
    @aviellisandrovasquezreyes1172 2 роки тому

    gracias amigo excelente video

  •  2 роки тому

    Bro , a mi encanta GetX , me dado buenos trabajos. Mucha gente le está tirando hate Justo por estos temas incluso temas de testing ? Tu que me recomiendas

    • @AlexAstudillo1
      @AlexAstudillo1 2 роки тому

      Tiene un poco de verdad que GetX no es una buena opción especialmente para los unit tests, ya que muchas veces la navegación y mostrar los widgets como dialogs, snackbars, etc, se lo hace desde el controlador, eso complica un poco las cosas. Para solucionar lo anterior por ejemplo un código típico de controlador sería el siguiente: void signIn(){ Get.showOverlay( asyncFunction: ()async{ final bool auth=await api.signIn(); if(auth) {Get.offNamed('/home');} else {Get.dialog(Dialog());} }, ) } si esto está dentro de tu controlador va a ser un problema, ya que un los widgets no deben estar en el controlador ni la navegación, entonces lo que puedes hacer es Future<String?> signIn(){ try{ final bool auth=await api.signIn(); }catch(e){ return e.toString(); } return null; } entonces la lógica ya iría dentro de tu widget y en tu stateful o stateless mostrarías el overlay y en caso de que la función devuelva null ya navegas a otra pagina o muestras el mensaje. En resumen todo lo que implique el uso de snackbars, dialogs, y navegación siempre trata de hacerlo desde tus widgets. Por último ten en cuenta que esta es mi opinión y no me considero un experto en Flutter.

    •  2 роки тому

      @@AlexAstudillo1 gracias Bro , tomaré tu ejemplo. Muchas gracias !!

  • @juanmanuelcorralesrendon9161
    @juanmanuelcorralesrendon9161 2 роки тому

    Como se puede modificar el cuadro de dialogo donde se selecciona la cuenta de google? gracias

  • @amigapso
    @amigapso 2 роки тому

    Que tal Alex cual es el github del proyecto?

    • @AlexAstudillo1
      @AlexAstudillo1 2 роки тому

      Lo encuentras en la descripción del video.

  • @Diogo_OliveiraOfc
    @Diogo_OliveiraOfc 2 роки тому

    um dos melhores tutorias sobre seachDelegate, gracias