Transcripciones
1. INTRODUCCIÓN AL CURSO: Uno para hacer una aplicación
del mundo real
utilizando la arquitectura adecuada, separando la
lógica de negocio y la pizarra. Entonces este curso es
perfecto para ti. En este curso,
estarás haciendo una aplicación completa desde cero usando arquitectura limpia con administración de bloques y
estado cúbico. También estarás
incorporando el resto API en tu aplicación usando dos paquetes
diferentes, HTTP. Y también aprenderás sobre la inyección de dependencia
usando el paquete getters. Y lo más importante,
aprenderás a separar tu teléfono en
tres capas diferentes, capas datos, dominio y presentación y hacer tu módulo. Mi nombre es. Y en este curso, tu instructor será
engañado con ellos en seco. Espero que lo disfrutes. Entonces,
sin perder más tiempo, inscribirte ahora y
comencemos.
2. Resumen de una arquitectura limpia: Bienvenido al primer video de nuestro curso que se
ondeó en arquitectura. En este video,
vamos a estar aprendiendo sobre arquitecturas limpias. Entonces, antes de saltar a la arquitectura
limpia, necesitamos saber por qué usar
la arquitectura en primer lugar. Si tienes una app pequeña
o mediana, digamos una app donde
tienes que presionar algunos botones. Y en la interfaz de usuario, habrá alguna
imagen mostrada o algún texto de visualización. Entonces no necesitas
una arquitectura, ya que es un acto muy sencillo. Y la incorporación de una
arquitectura en este tipo de aplicaciones estará en proceso de ajetreo
y toma de tiempo. Pero digamos que tienes una aplicación muy grande
donde no solo tú, sino muchos más desarrolladores están
trabajando en un mismo proyecto. Por ejemplo,
digamos que estás construyendo una app muy grande como
Uber o una app muy grande. Zomato, esa cosa. No solo tú, sino
muchos más desarrolladores están trabajando en un solo proyecto. Esa vez, tener una arquitectura
adecuada no solo le ayuda a
acelerar el desarrollo, sino que también ayuda a estandarizar un patrón de diseño en todo el equipo de
desarrollo de aplicaciones. Además, tener una arquitectura
estructurada muy adecuada nos
ayuda a modular el código. Aquí viene una hermosa parte
de la arquitectura limpia. arquitectura limpia ayuda a
los desarrolladores de aplicaciones a modular el código. ¿ Qué quiero decir con modularización? Modularizar el
código significa tener secciones
separadas para
cada conjunto independiente. Ahora bien, si quieres cambiar, por ejemplo, hay un servicio de backend que estás
usando, digamos que dispara esto. Y más adelante
quieres cambiarlo a un backend personalizado, luego
modularizar la arquitectura. Puedes hacerlo muy fácilmente
sin afectar a otras capas. Además, si estás
usando, digamos, un paquete que está
funcionando bien por ahora. Pero más adelante, quieres
cambiar el paquete a un paquete diferente para la
facilidad de tu uso, Andy, para el mejoramiento de la
aplicación ese tiempo que tengas, puedes usar esta arquitectura
modularizada para cambiar fácilmente algunos archivos. Y luego puedes volver a ejecutar
la aplicación tal como estaba. Ahora, como ahora sabemos, esa arquitectura es
necesaria por si acaso para hacer aplicaciones de tamaño mediano o
grande. Entonces, ¿por qué deberíamos elegir una arquitectura
limpia? Hay muchas más opciones
arquitectónicas, como MVVM, MDD. Ver, ¿por qué deberíamos
usar arquitecto limpio? Bueno, para entender eso, necesitamos conocer la estructura
fundamental básica de la arquitectura limpia. arquitectura limpia
separa el código en tres capas diferentes. Una es la capa de presentación, segunda es la capa de dominio. Tercero son los datos. La capa de presentación consiste en la interfaz de usuario y la lógica de
presentación. La lógica de presentación
es la gestión estatal. Por ejemplo, la
administración estatal como bloqueo, bloque con cubit, proveedor, fiebre, olla, GetX, y así sucesivamente. La capa de dominio es más delgada, donde contendrá nuestra lógica
de negocio principal de la aplicación. La capa de dominio consta
de tres secciones. La sección de entidades,
la sección de casos de uso y los repositorios lo
contratan. Ahora entendamos un poco
sobre cada una de estas secciones. La entidad es parte, contiene los objetos que
usaremos muestran
los datos en nuestra interfaz de usuario. Los casos de uso
contendrán la lógica principal, por ejemplo, validación de contraseña y
validación de correo electrónico. Y el
contrato de repositorios contiene el contrato o
la clase abstracta de donde
obtendremos los datos. Ahora la capa de datos es la
capa de donde
obtendremos los datos de fuentes
externas, como APIs o bases de datos, o incluso o falsas. La capa de datos consta
de tres secciones. Repositorios, implementación, donde estaremos implementando los repositorios que estaban en
el contrato de repositorios. Donde también está la sección del modelo
y las fuentes de datos. Nada de modelos se
extenderá desde las entidades. Las fuentes anti datos
obtendrán los datos de las API o bases de datos
o incluso de nuestra gente. Ahora, como estábamos
antes cosa que arquitectura
limpia ayuda
a modularizar el código. También significa que
todas y cada una de las secciones son secciones
independientes, la capa de presentación, B, capa de
dominio y los datos son todos independientes
entre sí. Entonces, si cambiamos algo
en la capa de datos, no
debería afectar a
la capa de presentación. Es capa de dominio. De igual manera,
si cambiamos algo en la presentación
que no debería afectar a la capa de dominio
y a los datos ahí. Ahora, dado que nuestra aplicación está teniendo capas separadas
para la interfaz de usuario y la lógica, también ayuda a
probar el código. Escribir pruebas unitarias para el, específicamente
para las lógicas. Y escribir widget para DUI se
hará muy fácilmente. Antes de saltar a la parte de
codificación de este curso, veamos primero lo que
realmente va a hacer para aprender la arquitectura
limpia. Entonces estaremos haciendo esta
aplicación que muestra novedades. Y vamos a estar usando
una API de noticias o API, que es una API de código abierto. Ahora, cuando hagamos clic en esta noticia, se abrirá
una nueva página donde podremos ver el
resto de las necesidades. Además, podemos buscar algunas nuevas, digamos, en
realidad no mostré la noticia
que se busca. Ahora vamos a crear
una nueva aplicación. Estará nombrando la
aplicación de noticias app, ¿verdad? Y abriremos la
aplicación en código VS. Bien. Ahora veamos la estructura de
archivos. Primero, tendremos una
carpeta llamada features. En la app que mostramos. Sólo hay una
característica que está
mostrando las noticias, ¿verdad? Por lo que la nueva característica dentro este reportaje de noticias del espectáculo
tendrá tres secciones. Primero, sección de presentación. En segundo lugar, la sección de dominio. En tercer lugar, la recolección de datos. Ahora, aparte de las características, también
tendrá un archivo core. Ahora el contenido
del archivo core
no solo se utilizará en
una o dos características, sino que a lo largo del
solicitante deberá. Una carpeta será constante. Otra carpeta serán los fracasos y los éxitos llegarán a
esta parte más adelante en el curso. Otro serán los servicios. Estos son
servicios externos que vamos a estar usando todos,
digamos paquetes. Entonces esta es la estructura básica de
carpetas. En el siguiente video,
comenzaremos con la
interfaz de usuario de la aplicación. Así que gracias por ver. Te veremos en la siguiente.
4. Entidades: Bienvenido al tercer video de nuestra serie de
arquitectura flutter clean, donde estamos haciendo
una aplicación completa usando la arquitectura limpia. En este video, estaremos caminando
por la capa de dominio. Y en la capa de dominio, como vimos, tenemos
tres secciones. Entidades, casos de uso y
repositorio es contrato. Entonces en este video, vamos a estar echando un vistazo en la parte NTD. Entonces, antes de saltar al código, veamos exactamente cuáles son los datos sobre
los que va a
estar haciendo la entidad. Para que podamos obtener los
datos en noticias api.org. Entonces si vas a news api.org, ahí podrás obtener
la documentación, estará iniciando sesión y obteniendo la clave API más adelante
en la sección de datos. Pero por ahora, vamos a
ver en qué tipo de datos
vamos a estar trabajando. Así que vaya a documentos,
documentación, y luego haga clic en todo. Entonces esta es una API, y esta API nos da, cada vez que hacemos una solicitud get, esta API nos da un dato json. Se requerirá
el nombre del autor, el título, el autor
es un formato de cadena. Como puedes ver, el titín también
está en formato string. Y también necesitamos la
URL de la imagen, resulta en formato string. Y publicado en
también está en formato string. Esta es la fecha y hora. El contenido también está
en formato de cadena. Bien, Ahora hagamos nuestra entidad. Entonces entraremos en la sección
Características. Y dentro de la
sección de dominio haremos una nueva carpeta llamada entities. Dentro de las entidades
hará una nueva entidad llamada News info dot, dot hará una clase
conocida como news info. Y primero tomará
una cadena de título. El segundo será una
cadena de alterados. tercero será
cadena de imagen que
agregaste antes será
una cadena de contenido. Y el quinto sería
el tipo de estática pública. Ahora, agreguemos todo
dentro de nuestro constructor. Ahora, excepto datetime. Todo puede ser anulable. Por ejemplo, un
artículo de noticias puede tener un título, o a veces incluso puede
no tener un título. Por lo general, cada tipo de noticias a cada artículo de noticias
debería tener un título, pero puede haber algún error en la base de datos sobre
tal vez la parte posterior la persona que está escribiendo el artículo de noticias puede tener
olvidóagregar el título. Entonces tenemos que gustarnos
considerar estos casos de borde. Entonces tenemos que hacer que
el título sea nulo. También el autor también puede
ser anulable para que también imageURL
pueda o no estar presente. Para que también el contenido también
pueda o no estar presente. Para que también nos den,
pero se conservará datetime porque cada vez que se publique una
noticia, tiene
que estar presente. Entonces aparte de esto, aparte de datetime,
no necesitamos
hacer nada más requerido. La palabra clave requerida significa que cada vez que estamos
llamando a la información de noticias, necesitamos agregar la fecha y hora. Ahora bien, ¿qué son exactamente
los tipos anulables? Por ejemplo, si
tenemos una cadena de, digamos nombre, y aquí
le doy un nombre de RAM. Específicamente estamos
diciendo oscuridad ahí. La variable name está tomando
un tipo de datos de cadena y el valor de la variable
name
siempre será una cadena y nunca
puede ser variable nula. Pero si lo asignamos como
cadena con un signo de interrogación, entonces le estamos diciendo a dark que la variable name puede ser una
cadena o puede ser none. Por ejemplo, el nombre también puede ser no. Esto también funcionará. Por lo que terminamos con la entidad es parte
de nuestra aplicación. En el siguiente video,
estaremos aprendiendo sobre un paquete muy importante
que vamos a estar usando, que es el
localizador de servicios o el paquete de conseguirlo. Así que gracias por
ver este video. Nos vemos en la siguiente.
5. Paquete de localizador de servicio: Hola y bienvenidos
al cuarto video de la serie flutter clean
architecture, donde estamos haciendo una app completa usando arquitectura
limpia. En este video,
estaremos aprendiendo sobre un paquete muy importante
llamado el paquete get it. Ahora bien, ¿qué es lo que este
paquete consigue que nos ayude a encajar antes saber que
necesitamos saber qué es
exactamente la inyección de dependencia? Entonces, ¿qué es exactamente
la inyección de dependencia? Veamos un ejemplo. Entonces haremos un nuevo archivo. No es necesario
hacer este archivo. Este archivo será
solo para este video. Podría ser DIE
ejemplo punto, punto. Y aquí estamos importando nuestro paquete
material dot dot. Y vamos a estar haciendo
algunos widgets de lista de omisión. Primero hagamos esto,
luego te lo explicaré. Bien. Entonces como puedes ver, este
es un botón ficticio, que lleva un botón
elevado. Y puedes ver que nuestra caja ficticio
depende de nuestro botón ficticio. También. Podemos ver que
tenemos un botón ficticio, que es un botón elevado. Tenemos una caja ficticio, que depende del botón
determinante. Tenemos una tarjeta ficticio, que
depende de la caja ficticio, que de nuevo
depende del botón ficticio. Y tenemos nuestra página ficticio, que
depende de la tarjeta ficticio, que
depende de la caja ficticio, y que
depende del botón ficticio. Ahora bien, si tenemos, digamos una clase de información de botón que almacena la
información del botón. Por ejemplo, digamos x aquí. Y si queremos
pasar esto aquí, para que podamos usar
este de aquí. Entonces ahora tenemos que pasar esta información de botón en
todos estos widgets. Veamos cómo pasamos en nuestro
botón ficticio en su totalidad, en nuestra caja ficticio. Ahora, tenemos que pasar
la información del botón en nuestras tarjetas ficticias para que
podamos usarlo en nuestra caja ficticio. Ahora como estamos usando el
botón info en nuestra tarjeta ficticio, también
necesitamos
pasarla en nuestra página ficticio. Entonces vimos que
estamos usando solo el botón info en
nuestro botón ficticio. Pero como todos estos
son dependientes, por lo que necesitamos pasar nuestra información de
botón en la parte superior. Entonces para evitar este problema, viene D, consíguelo paquete. Ahora para acceder a esto, también
necesitamos llamar
específicamente a nuestra función de servicios de configuración
en el archivo punto punto principal. Entonces para hacer eso, primero, tenemos que darle su primer factor vinculante que asegure inicializado. Lo que hace este es inicializar las cosas
que se necesitan para las plataformas nativas
que se requieren en nuestro iOS y Android construyanlas plataformas nativas
que se requieren en
nuestro iOS y Androidantes de ejecutar
cualquier cosa en la aplicación. Ahora vamos a estar llamando a
los servicios de configuración, y ahora ya terminamos. Entonces esto fue para este video. En el siguiente video,
estaremos usando el paquete get it en la parte Casos de uso
y repositorios. Y también necesitamos el localizador de servicios por
ahora puedes eliminarlo, estará creando estos
en el siguiente video. Así que gracias por ver. Nos vemos en la siguiente.
6. Usecases repositorios: Hola y bienvenidos
al quinto video de nuestro curso de
arquitectura flutter clean, donde estamos construyendo
una aplicación completa usando la arquitectura flutter
clean. En el video de hoy,
estaremos aprendiendo sobre
casos de uso y repolarizar y repositorios en la sección de
dominio. Así que vamos a nuestras Características. Y dentro del dominio, vamos a crear una nueva
carpeta llamada casos de uso. Y vamos a crear otra
carpeta llamada Repositorios. Dentro de los casos de uso, haremos un nuevo archivo
llamado fetch News. Punto. Dot creará una nueva
clase llamada Fetch news. Y dentro de la
clase, escribiremos una función llamada fetch news. Antes de eso, me
gustaría hablar un paquete que se
llama paquete puntos. Primero veamos que se necesitará el
paquete de puntos blancos. Vamos a pop dot diff
y busquemos puntos. Importemos este
paquete en nuestro proyecto. Vamos a un archivo YAML de punto de
especificaciones de pub. Ahora, normalmente cuando
estamos obteniendo algo o obteniendo
algo o de una función, normalmente podemos devolver
solo un único tipo de datos. Por ejemplo, si tenemos un futuro de noticias info y me
refiero a buscar noticias. Por lo que esta función
sólo puede devolver información de noticias. Pero puede haber
un caso en el que de nuestro back-end no estemos
recibiendo algunas noticias y adelante, pero estamos recibiendo un error. Para que esa vez lo que queremos
hacer no se devuelva
la noticia en su totalidad, sino que devuelva un fracaso. ¿ Cómo podemos hacer eso?
Podemoshacer eso usando puntos. Entonces, primero importemos puntos. Y usando esto arranca, podemos hacer es que podemos
crear un ya sea. Con cualquiera podemos
volver a los tipos de datos. Digamos que uno es int y el
otro es string. Ahora bien, lo que en realidad
queremos devolver es un fracaso. Y hay
lista de noticias info. Ahora, vamos a crear
esta clase de fracaso. Y el fallo se
utilizará en toda nuestra app. Entonces para eso, necesitamos
crearlo en el código. Ya hemos creado un archivo llamado fracasos
y éxitos. Dentro de aquí
crearemos un nuevo archivo llamado fallas punto, punto. Creamos una clase abstracta. Fracaso. un mensaje de cadena que contendrá el
mensaje de falla si hay alguno. Ahora vamos a crear una nueva
falla llamada Fetch. Obtener video, que
extenderá el fallo. Y dentro de aquí haremos un constructor constante.
¿Cuál falla? Y como estamos
extendiendo el fracaso, tenemos que pasar el
mensaje en este súper. Entonces ahora podemos regresar,
podemos eliminar esta. Ahora podemos devolver el
fracaso de búsqueda aquí. Si importamos los Phineas. ¿ Bien? Ahora esta es la capa de dominio. No queremos
escribir ningún negocio,
ninguna lógica de datos
dentro de nuestro dominio. El dominio consistirá
únicamente en la lógica de negocio, como contraseña, validación, validación de
correo electrónico,
etc. etc. así que para tat, para conectar la
capa de datos con la capa de dominio, necesitamos usar repositorios. Ahora bien, ¿cómo podemos usar eso? Vamos a nuestros repositorios
y creamos una nueva república. En primer lugar, tenemos que
cambiar el nombre de las fake news. Noticias falsas. Casos de uso, caso de uso, para que podamos segregar
que es un caso de uso. Ahora dentro de nuestros repositorios
haremos un nuevo archivo llamado Fetch repo contract dot, dot. Ahora bien, como se trata de un contrato, ésta será sólo
una clase abstracta. ¿ Qué entendemos por clase
abstracta? Por ejemplo,
estás manejando un auto. Estás girando el volante, el
volante en dirección izquierda. El auto va en
dirección izquierda. Estás mirando dado en
la dirección correcta, el auto va en
la dirección correcta. Sabes que al
dirigir el volante, el auto irá a
la izquierda o a la derecha. Pero ¿sabes qué es lo que hace el trabajo interno del intestino no sabes? Entonces las clases abstractas
son así. Nos va a dar funciones
que van a hacer el trabajo. Pero no necesitamos
saber qué es exactamente, cómo es exactamente la función,
es el trabajo realizado en la función va a crear una clase abstracta fuera del ventrículo
fetch. Aquí vamos a tener una función
de futuro ya sea fracaso. Pero vamos a dejar de nuevo ZoomInfo. No. Podemos ir a nuestros
casos de uso e importar la Fed. ¿ Debo poner aquí? Bien, voy a llamar
al polo vegetal aquí. Ahora. Ahora solo podemos devolver aquí
las noticias fetch repo dot
fetch. Así que terminamos
con nuestro caso de uso. Y qué estamos hechos
con nuestro repositorio. Pero también estamos teniendo
una función de búsqueda aquí. Entonces el solo hecho de tener las
noticias del PECC no va a funcionar. También necesitamos rosar para
la funcionalidad de búsqueda. Por ejemplo, siempre que
estés buscando algún texto, esa vez que entró, lo que necesitamos es regresar, buscamos textos, noticias aquí. Entonces para hacer eso, también
necesitamos pasar otro campo
llamado texto de búsqueda. Ahora bien, esto puede ser nulo. Buscamos texto se puede
hacer cuando sea nulo, solo
mostrará las noticias normales. Y cuando el
texto de búsqueda no sea nulo, ese tiempo mostrará
las noticias de búsqueda. Ahora también necesitamos
agregarlo en nuestros casos de uso. Aquí también agregaremos una cadena
de texto de búsqueda. ¿Bien? Ahora ya terminamos.
Enel siguiente video. Allí estaremos trabajando
en los datos. Así que gracias por ver. Nos vemos en la siguiente.
7. Modelos: Hola y bienvenidos
al sexto video de nuestra serie de
arquitectura flutter clean, donde estamos haciendo una aplicación completa usando la arquitectura limpia. En esta sección, vamos
a iniciar la capa de datos. Y dentro de los
datos habrá comenzando con los modelos. Entonces, primero vamos a crear una carpeta en la carpeta de datos, modelos de
fallas. Dentro de los modelos, vamos a
crear un nuevo modelo llamado News info model punto, punto. Y vamos a crear una clase
llamada News info model, que extenderá la información de noticias. Ahora, necesitas hacer un
constructor de clase modal y ser super super función. Ahora veamos qué está pidiendo la súper
función. Es pedir una
DateTime es obligatorio. El nombre del autor, el contenido, imagen que tenías un detectado. Sabíamos que el título ImageURL
content y el autor son todos cadenas y el
datetime, datetime time. Pero los datos que
vamos a obtener
serán en formato JSON. Todo. Tendremos
un tipo de datos diferente. Entonces veamos primero qué
tipo de datos será feliz. Entonces tenemos que ir a news
api.org, ir a documentación. Dentro de la documentación,
vaya a todo. Y vamos a comprobar cuál
es el tipo de datos de nuestros datos que estamos obteniendo
de nuestras noticias api.org. Apl es una cadena, lo cual está bien. El título también es una
cadena, lo cual está bien. Eres suficiente. La imagen también
es una cadena. Publicamos eso,
que es el DateTime. También está en cadena,
lo cual es indeseable. Pero para destacar, el
contenido también está en Calle. Bien, entonces ahora sabemos
qué tipos de datos estamos obteniendo de nuestra API. Entonces escribamos aquí. Cuando se escribe. Primero necesitamos el título, luego el nombre del autor, luego la URL de la imagen, el contenido y los datos. Dentro de este súper
pondrás el título, ¿título? Dado que el título en nuestra información de noticias también es una
cadena que es anulable. Y aquí también el título es una
cadena que es maleable. Entonces está bien. Y nuestro autor dentro de nuestra información de noticias es una
cadena que es anulable. Aquí también es una cadena
que es anulable. Así que sólo podemos pasarlo. Nuestra URL de imagen también es una
cadena que es anulable. URL de imagen de héroe, que es una
cadena que es anulable. Simplemente lo pasamos aquí. Y nuestro contenido también es el mismo ya que puedes ver
ahora nuestra información de noticias, gesticulando, que es
anulable y héroes, por lo que es una cadena. El datetime, sin embargo,
dentro de nuestra información de noticias, es una fecha y hora
que no es anulable. Pero en nuestro modelo news info, lo
hemos establecido en una cadena
que no está nivelada. La razón es que los datos que estamos obteniendo también
es una cadena. Y estamos esperando que en algunos casos esto pueda ser un nulo, así que tenemos que encargarnos de eso. Entonces lo que podemos hacer aquí es hacer una función llamada
Obtener fecha, hora. En formato de fecha y hora. Estamos escribiendo una función con. Entonces vamos a quitar
la constante aquí. Tomemos una función estática y que
tendrá un tipo
de retorno de datetime con el mismo nombre. Y aquí también pasaremos
una cadena de datetime, que no es más que ésta. Pasemos aquí esta
corriente. Ahora. En primer lugar, diremos
si el DateTime es igual,
igual a nulo, entonces no hacer nada. Simplemente devuelva una fecha y hora
del punto de fecha y hora actual. Ahora podemos obtener la función
actual datetime, datetime dot now. Y si el DateTime no es
nulo, entonces ¿qué hacer? Entonces hay una función muy
útil de la fecha que nos permite analizar
cadena a datatype datetime. Veamos cómo podemos hacer eso. Escribiremos la última vez. Datetime,
formato datetime porque hasta la fecha y hora dot
trípodes, usando datetime. Ahora bien, los trípodes sí. Lo que hace el trípodes es
intentar convertir la cadena date time, que es esta, en
un tipo de datos datetime. También aquí, podemos simplemente
dar un no anulable, lo que significa que aquí la
fecha y hora nunca puede ser nula. La razón es que ya hemos comprobado si el tiempo es nulo, entonces devolveremos
Time dot ahora. Así que dentro de la otra, la fecha y hora nunca puede ser nula. Entonces podemos dar este signo de
exclamación. Y la mecánica
dice específicamente que dentro de la otra, la fecha y hora no será nula. Además, los trípodes
devuelven la fecha y hora, pero que es anulable. Ahora, ¿por qué es anulable? Si,
digamos que trata de analizar. No necesitamos
dar específicamente el signo de exclamación aquí ya que ya estamos comprobando si el
DateTime no está aquí. Ahora, por qué la función de trípodes de
punto datetime devuelve una fecha y hora
que es anulable. La razón es
si trípodes
intenta pasar el formato datetime o la cadena datetime a
un tipo de datos datetime. Pero digamos que no logra
convertir eso. Digamos que tenemos una cadena
que es algo hola. Ahora bien, este hola no puede ser, este hola no se puede
convertir a una fecha y hora. Datetime se puede convertir, digamos que algo como
esto se puede convertir,
convertir a una fecha y hora, pero hola no se puede convertir. Entonces, ¿qué sucede
cuando
nos estamos dando algunos textos que no
se pueden convertir a una fecha y hora, simplemente devuelve un valor nulo. Cambiemos el
hola para depender. Ahora bien, si el formato datetime, datetime es igual, igual a nulo, entonces también
devolveremos el punto datetime. Ahora. Ahora bien, esto significa que
intentó analizar la fecha y hora, que está en formato de cadena, a una fecha y hora que está en formato de
fecha y hora,
pero no pudo. Entonces esa es la razón por la que
estamos devolviendo la fechahora de
ese tiempo presente. Pero si no es nulo, si DateTime no es nulo, entonces queremos decir que
ha anulado palabras. Si es así,
ha podido analizar los datos que están en
formato de cadena a la hora de edición, que está en formato de fecha y hora. Para que esa vez
no hagamos más que regresar. Bien, entonces esta está hecha. Ahora, necesitamos crear
otro método, que es un método muy útil. Estaremos creando un método de mapa
de trombos. Vamos a crear, y
después voy a explicar. Ahora lo que
hace este método es esa primera semana, qué tipo de datos estamos obteniendo. Aquí, estamos obteniendo un
dato en el formato JSON. O podemos decir que
está en un formato de mapa, que es una cadena, que es nuestra t. y el valor es dinámico, lo
que significa que puede ser una cadena. Puede ser, se puede
hacer, puede ser cualquier cosa. Dinámico significa
que puede ser string, puede ser, puede ser cualquier tipo de
datos o política nula. Para convertir este mapa
en un museo para maqueta, necesitamos una función y
esa función es de. Ahora. Tenemos que
decir esto específicamente como un hecho. Ahora, expliqué en el video del localizador de
servicios, ¿qué es una fábrica y
qué es un singleton? Singleton.
Lainstancia es un singleton es donde estamos usando la misma instancia
en toda la aplicación. Pero en un método de fábrica. Lo que se hace es crear una nueva instancia de este objeto
cada vez que estamos llamando. Entonces, cuando, cada vez que
vamos a llamar
a un método from map en nuestra app, esa vez creará una nueva instancia de modelo de
news info. Digamos que estamos llamando desde el
mapa cinco veces en nuestra app. Por lo que se
crearán cinco nuevas instancias de noticias y para módem. Pero si se trataba de un singleton, entonces incluso si
se recuerda
de cinco veces, solo estará creando
una sola instancia. ¿ Bien? Ahora también tenemos que
dar los datos aquí, así se mapeará el título. Y si podemos ver aquí, solo
necesitamos mapear aquí
estos valores. El título aquí,
sólo podemos copiarlo aquí. Y del mapa con el título, se mapeará al autor. Y si lo comprobamos aquí, el autor es este autor. Para que podamos copiar
éste y pegarlo aquí. La URL de la imagen será
mapa y URL de imagen. Url demasiado. Copiaremos
este y lo pegaremos aquí. Se mapea el contenido. Vamos a comprobarlo aquí.
Estecontenido y la fecha-hora que se publica acto fecha con
este tema, este. Y ahora hemos terminado
con las novedades en para model.fit del método map, que convierte la
cadena de mapa noticias bidireccionales dinámicas. Y para el Señor. Así que gracias
por ver este video. En el siguiente video,
estaremos profundizando en la sección de fuentes de datos y repositorios.
Graciaspor ver. Nos vemos en la siguiente.
8. Fuentes de datos y repositorios: Hola y bienvenidos
al séptimo video de nuestra
serie de arquitectura aplanada cuando estamos haciendo una aplicación completa
usando arquitectura lean. En este video,
vamos a hablar sobre las fuentes de datos y repositorios
en la sección de datos. Entonces primero vamos a
nuestro archivo de datos y vamos crear una nueva carpeta
llamada Repositorios. Dentro de los
repositorios se realizará un nuevo archivo llamado Fetch report. En IMP, lo que significa
implementación
punto, punto hará una nueva clase
llamada cual reporte IMP, que implementará dicho repositorio. Ahora, también necesitamos, ya que estamos implementando
el repositorio fetch, cual estaba presente
en la capa de dominio. Así que tenemos que anular esta función dentro del repositorio
recuperado IMP. Por sobreescribir, simplemente no
puedes hacer una cosa. Haga clic aquí, presione
Control y puntos, y cree, y toque aquí, cree uno que falta
sobre sobrescribir. Automáticamente
creará la función. Ahora no queremos
lanzar un error aquí, así que eliminemos esto.
Dentrode esta función. Estaremos llamando a
las fuentes de datos. Entonces antes de eso, necesitamos
hacer la fuente de datos. Así que vamos a crear una
nueva carpeta dentro del archivo de datos llamada fuentes de
datos. Y dentro de la fuente de datos
se creará un nuevo archivo llamado desde ds remotos. Ds significa
nombres de fuentes de datos que el, como dice el nombre,
estamos recuperando los datos de la fuente de datos
remota, que es una API externa. Así que lo nombramos fetch
de múltiples fuentes. Vamos a crear una clase abstracta
a partir de una fuente de datos remota. Dentro de la clase abstracta, tendremos un futuro
que devolverá una lista de noticias. Modelo. El nombre será buscar noticias. Y también aquí
estaremos incorporando la funcionalidad de búsqueda
utilizando el texto de búsqueda. En el último video,
expliqué si el texto de búsqueda era nulo, entonces noticias normales cuando visual y reinicia
textos se perdió ninguno. Después las herramientas de búsqueda en bushel. Ahora dentro del uso fetching, lo que tenemos que hacer es
llamar a un servicio externo, como el servicio HTTP
o todo el servicio, mediante el cual estaremos obteniendo los datos de nuestra API externa. Entonces hagámoslo. En primer lugar,
publicaremos antes de hacer un mapa de cadena dinámico. Este contendrá los datos que
nos sean dados desde la API. Para hacer eso, necesitamos
hacer el servicio. Pero en este video, no
vamos a hacer el servicio, así que solo haremos el
contrato del servicio. Entonces dentro de la carpeta core, tenemos una carpeta
services services. Y dentro de la
carpeta services haremos un nuevo archivo llamado HTTP, o digamos API que iniciamos ya que estamos
obteniendo los datos de las APIs. Entonces estamos escribiendo APIs. Si no está hecho. Vamos a
crear este servicio API. Por favor, haga un servicio API
de clase abstracta. Y dentro del servicio API
se hará una nueva carpeta. Future string Dynamic get data. Ahora podemos llamar a éste. Aquí. Lo que podemos hacer es
hacer que el servicio API. Dado que esta es una clase abstracta, también
necesitamos implementar
esta en una clase separada. Vamos a crear el vaso. Protección de vidrio de floración
remota
me estoy dando hasta la condición
que implementa desde soporte
remoto
¿cuál es la función? Y dentro de aquí, aplicamos
probablemente el servicio API. Bien, ahora hemos
llamado al servicio API, y aquí llamaremos a la función get data en
nuestra superficie API, ¿verdad? No extremo. Dinámica es igual a dos. O podemos decir que los datos son iguales a
tal vez comenzar, obtener diferentes. También tenemos que esperar aquí, ya que esto devuelve un
futuro mapas y dinámicos. Y como estamos
usando nuestra silla, necesitamos hacer esta función. Bien, entonces estamos obteniendo los datos, pero qué datos realmente
estamos obteniendo, vayamos a news api.org. documentación de Insight
irá a cada través de los datos que estamos obteniendo de
la API es un mapa. Y dentro del mapa, cuáles son los datos reales que
queremos son estos artículos. Estos artículos contienen
una lista de mapas. Entonces déjame primero codificar
y luego lo haré. Entonces dentro de los datos,
obteniendo una lista, llamémoslo lista de artículos. Podemos ver aquí que esto es, si asumimos que
todo esto son los datos, entonces dentro de los datos, si obtenemos los artículos, los artículos
contendrán una lista. Ahora bien, esta es una lista de mapas, pero los mapas dentro de
este y la demanda en el corazón son un
poco diferentes. Entonces para eso, lo que
podemos hacer es hacer una nueva lista fuera de mapa,
cadena, lista dinámica. Realmente no inicialicé
a una lista vacía. Y iteramos
a través de todos los elementos dentro de esta lista y convertimos cada elemento a
una dinámica de cadena de mapa. Hagámoslo. Entonces lo llamaríamos mapa. Será igual a enumerar. Y diremos que este
tipo es como mapa dinámico. Ahora agregaremos este mapa
dentro de nuestra lista de mapas. Mapa completamente abastecido en. Bien. Ahora lo que podemos hacer es hacer una nueva lista de modelo de noticias info. Vamos a inicializarlo
con una lista vacía. Y ahora atravesaremos todos los
elementos de la lista de mapas. Convertiremos cada uno
de la lista de mapas a cada uno de los mapas dentro del
mapa, este museo mañana. Hagámoslo. Ahora. Vamos a utilizar el método de mapa
fuerte que creamos en
la sección del modelo. Lo llamaremos como perder a
Phil Martin del mapa. Y el mapa será cada uno de
los ítems dentro de D mapas. Ahora agregaremos el modelo de
vendedor de noticias dentro de la lista de noticias
y luego regresaremos. Bien, hecho aquí. Pero digamos que aquí está ocurriendo
algún error. Digamos que nuestra
función get data muestra alguna excepción. Entonces tenemos que coger
esas excepciones aquí. Entonces lo que podemos hacer es copiar todo este código y
pegarlo dentro de un bloque try catch. Entonces, si obtenemos algún error, lanzaremos una excepción. La excepción puede
ser cualquier extracción. Pero lo que realmente queremos
hacer es hacer excepciones personalizadas. Entonces para hacer eso,
necesitamos ir a fracasos
y éxitos, hacer un nuevo archivo llamado
excepcional stark dark. Y crearemos una excepción
personalizada. Dicha excepción
implementa excepción. Esta excepción aquí. Es un plus dado por dark y tiene un constructor
de fábrica. Entonces como vimos en los fracasos, estábamos extendiendo el fracaso, pero éste, no podemos hacerlo aquí porque no podemos
extender una clase. Solo tenemos un constructor
de fábrica, así que necesitamos implementarlo. Así que vamos a crear la
excepción fetch construida aquí. ¿ Bien? Ahora podemos lanzar esta excepción. Se puede escribir excepción. Vamos a darle un mensaje
también para empezar. Y vamos a ponerlo abierto. Así que terminamos con la función
fetch news dentro nuestra implementación de fetch from remote data
source. Más. Llamemos a esta función
dentro de nuestro repositorio. Implementación. Volverá. Primero. Aquí conseguiremos la clase. Pero desde una fuente de datos remota. Ahora podemos usar esta. Buscó. Dice que esto
devuelve un valor de
futuras noticias de lista en
formato que no puede tener un método ya que esta
función lo devuelve, ya sea una falla
o una lista usando. Entonces lo que tenemos que hacer es
devolverlo así, ¿verdad? ¿ Bien? Entonces, ¿qué está pasando aquí? Estamos diciendo que desde
la función fetch nice,
return, devuelve un futuro de ya sea fracaso o
lista de noticias info. Entonces estamos diciendo que esta función devolverá el lado derecho
del valor cualquiera, lo que significa que el cualquiera tiene
dos valores, ya sea falla, todas estas cosas se mueven
a esta función, devolverá el lado derecho de
los artículos que aparecen en la lista. ¿ Bien? Pero también vimos que las fuentes de datos pasan por
error aquí o excepción aquí. Entonces también necesitamos atrapar la
excepción en nuestro repositorio. Entonces podemos hacer eso
probando catch block. Pero también vimos que
estamos lanzando una
excepción personalizada de sección de proyecto. Para que podamos atrapar la excepción del cliente
en la excepción de campo. Y ahora podemos lanzar
un fracaso también. Entonces volveremos a la izquierda. Que falla con un
mensaje E punto mensaje. Esta E no es más que un
objeto de excepción de búsqueda. También necesitamos devolver la
cancelación de sus datos
para dichas noticias. Entonces ahora hemos terminado con la implementación del
repositorio, terminamos con
las fuentes de datos. Vamos a recapitular una vez más. Hicimos, implementamos el reporte de fetch en clase de
implementación a nivel
científico. Luego revisamos
las fuentes de datos e hicimos la fuente de datos para
hacer el diagnóstico. Hicimos un resumen de costos de servicio
API, que estaremos implementando
en el siguiente video. Y luego cambiamos los tipos de
datos para ser requeridos. Tipos de datos desde la
dinámica del equipo de Maps hasta el museo para el modelo, y luego devuelven las noticias
o la excepción de búsqueda de tres. Y luego dentro del
repositorio se usa otro bloque try-catch
donde si no hubiera error, devolveríamos el
derecho del fallo, que es list, news
info y all exception. Detectaremos la
excepción que se devolvió dentro de
nuestras fuentes de datos. Aquí. Estamos cogiendo eso y luego regresando el lado izquierdo de la, que es un fracaso,
que se va a buscar. Entonces eso es todo para este video. En el siguiente video, estaremos profundizando en los servicios. Así que gracias por ver. Nos vemos en la siguiente.
9. servicios: Hola y bienvenidos
al octavo video de la serie Flutter clean
architecture, donde estamos haciendo una app completa usando una arquitectura
más limpia. En este video,
vamos a
hablar de la parte de servicios. Entonces primero, iremos
a la sección de código. Y dentro de los servicios, ya
hemos realizado
una clase abstracta llamada API service, que nos da el, que tiene una función, Get Data, que devuelve una
futura dinámica de cadena de mapa. Así que vamos a implementar
la superficie API aquí. Además de servicio BI IMP. Imp es términos de implementación que permanecerán si el servicio BI. Ahora agregaremos la función
aquí y la anularemos. Aquí, estaremos
usando un paquete y obtendremos datos de nuestra API externa. Y el paquete se llama HTTP. Entonces para eso, vamos a pasar. Y aquí vamos a escribir HTTP. Vamos a conseguir el paquete. Entonces al hacer esto, podemos copiar el nombre del paquete. Y aquí
vamos básicamente a empaquetar dentro de los
buscadores vectoriales. Ahora vamos a importar el
paquete en nuestro servicio API. Y diremos que
importantes HTTPS, HTP, HTTP. Podemos obtener los datos de nuestro
HTTP y cómo de nuestra API. Y como podemos hacer
esto es que hay una función útil
llamada HTTP GET. Y esta función get, obtendremos los datos
requeridos de nuestra API externa de esta. Entonces lo que tenemos que hacer es dar, primero
veamos qué toma
esta función get. La función get toma un
URI, como puedes ver aquí. Y obtienes función
también toma encabezados, pero también requerirá parámetros de
consulta
también. Como podemos ver. Esta es la API principal que estará proporcionando
los q iguales a Bitcoin. La clave Api es igual a F a través de
una clave API va a GPI. Guarde esto a nuestros parámetros de
consulta que también
necesitemos agregarlo aquí. Entonces veamos cómo
vamos a hacer eso. Bien, así que primero
agreguemos la URL para eso. Tenemos que proporcionar
la URL aquí, ¿verdad? URL de streaming, y la
agregaremos aquí dentro también. También estás, como puedes ver, que estamos necesitando parámetros de
consulta. Entonces tendremos otro mapa. Cuerda, dinámica. Padres listos.
Tenemosque agregarlo aquí. ¿ Bien? Ahora la URL no es una URL de cadena
real, URI. Necesitamos analizar la cadena, la
agregas de cualquier manera. Podemos hacer esto usando tu
eres pensé caminos. Y para dar los parámetros de
consulta de Kusto, necesitamos llamar a una función
replace. Y aquí podemos agregar los parámetros usando
dos partículas grasas. ¿ Bien? Entonces ahora estamos obteniendo
los datos de nuestro instinto. Almacenemos los datos en alguna parte. Para hacer eso, necesitamos hacer la función en una función sinc. Y el resultado aquí, tendríamos respuesta final
igual a http.get. Veamos qué devuelve esto. Devuelve una respuesta. Escríbalo aquí. Bien, Ahora bien, si el
código de estado de respuesta es igual, es igual a 200, esto significa que
habíamos obtenido con éxito, hemos obtenido con éxito
los datos de la API. Entonces ahora podemos devolver los datos
aquí, devolver cuerpo de respuesta. El cuerpo está
en realidad en formato de cadena, que es Jason adelante. Tenemos que decodificar esto y
convertirlo en un formato de mapa. Ya que estamos
devolviendo map string dynamic desde la función get. Así que en la derecha json punto
decodificar, y dentro de aquí, vamos a obtener la respuesta
por defecto, bien. Además, podemos escribir
como respuesta
dinámica de cadena matemática si el código de
estado no es 200. Esto significa que
no pudimos obtener los datos de nuestra API. Eso
fue algún problema. Hubo algún problema de red. Esa vez vamos a lanzar una
excepción con algún mensaje. A ver. Estado, estado de
punto de respuesta . Hablamos. Bien. Entonces, lo que estamos haciendo aquí es
que estamos obteniendo los datos de nuestra API usando un parámetro de consulta
personalizado. Y si conseguimos los datos, esa vez los estamos devolviendo en mapas a en formato dinámico. Y si no estás
obteniendo la devolución, entonces en realidad hacemos una excepción. Ahora pasemos por
la sección de datos dentro nuestras fuentes de datos y dentro la implementación de fetch from remote data
source. Daremos la URL aquí
y el parámetro de consulta. Ahora, para hacer eso, necesitas ir aquí y obtener la clave API se presiona el botón de
la tecla API de puerta. Necesitas dar
tu nombre, tu dirección de correo electrónico
y elegir una contraseña. Y presentado. Después de eso,
obtendrás la clave API. Pero aquí
sólo voy a estar iniciando sesión. Entonces déjame iniciar sesión y
luego te lo mostraré. Bien, aquí tengo
mi clave API. Yo sólo lo copio. Guárdalo en algún lugar seguro por ahora, hagamos que comience una nueva carpeta
llamada cadenas. Esto no es cuerda,
son cuerdas. Cuerdas. E instalé la clave API
aquí con una variable estática. También. Seguiré siendo URLs también aquí. Entonces tengo uno, todo lo que
agregaste, que es este. Yo copiaría éste
y estequiometría. Bien. Ahora vamos a nuestra función de
buscar noticias. De adentro hacia afuera, obtenga
datos remotos para alguna limitación. Y mira esas
URL serán cadenas, punto API de todo lo que eres y por qué el
parámetro de consulta será un mapa. Y esto contendrá cookies. Vamos a revisar qué libros. Uno será Q, el texto fuente. Si no tenemos
una especie de pasos, sólo
podemos darle
un texto concreto. Por ejemplo, como líneas de cabina. Bien, entonces el uso normal
que vamos a conseguir, será obtenerlo de
los principales titulares. Entonces, si copiamos este y necesitamos pegar el KPI de
clave API, aún no lo habías hecho. Todo el titular lo
usaremos cuando busquemos algunas noticias
de todos los artículos. Y los titulares principales
estarán buscando cuando el, no
hay texto
dentro de nuestra búsqueda. ¿ Bien? Entonces qué podemos hacer esto, si el texto de búsqueda
no es igual a nulo, ese tiempo parte de
todos los artículos. Si nuestro texto de búsqueda es
igual, igual a nulo, ese tiempo comienza desde
las plantillas superiores. Este es el operador ternario, que estamos viendo
que si X es nulo, haga lo primero después
del signo de interrogación. Y si el texto de búsqueda no es
igual a si start es nulo. Esa cosa con
la segunda cosa. Este es el operador ternario. Si el texto de búsqueda
no es igual a nulo, entonces haga lo primero que esté presente después
del signo de interrogación, que es cadenas,
API todo. Y si el texto de búsqueda es igual, igual a nulo, entonces
pon el segundo, que es tal vez
hablé largamente. Entonces cuando hay algunos consejos de
búsqueda a la hora de investigar algo
de música de nuestro todo. Y si no hay tales pasos, entonces sólo estamos
regresando el tema. Y dentro de nuestro
parámetro de consulta cae. Entonces vamos a escribir si el texto de
búsqueda es
igual, igual a nulo, esa
vez no lo
hacemos, necesitamos proporcionar el
país. Así que en la derecha. Contrario a la India. O podemos averiguarlo estadounidense-soviético. Y si el texto de búsqueda no es
igual a nulo, esa vez, necesitamos proporcionar dentro
o todo si vemos, necesitamos proporcionar una señal que es el texto de búsqueda aún se le da
Bitcoin, puede ser cualquier cosa. Entonces escribiríamos cubo y
será igual a buscar texto. Y sin importar, el
texto fuente es nulo o no, necesitamos proporcionar la clave API, que se da aquí también, que se da aquí también, ¿verdad? Clave Api. La clave API será única para todos y
cada uno de los usuarios. Y necesitas
obtenerlo después de iniciar sesión o registrarte en
la música BI.com. Tengo a mi Rey del FBI y
lo he guardado en las cuerdas. Más. Entonces usemos esa API
extrema de Scott. Bien, así que hemos implementado nuestros servicios dentro del
API service dot file. Y hemos utilizado este servicio
en nuestro archivo de fuentes de datos. Ahora viene una parte muy importante. Estamos llamando al servicio
dentro del construido a partir de fetch de la fuente de datos remota. En nuestro video localizador de servicios, discutimos un consejo muy
útil sobre cómo podemos registrar estos servicios en una sola función y
llamarlo dentro de la principal. Y no necesitamos
preocuparnos por inicializar
estas clases. Cada, Hagámoslo. Primero, estaremos creando una
nueva carpeta llamada o un nuevo archivo dentro de nuestra propia
carpeta llamada service. Servicios. Localiza nuestro oscuro oscuro. Dentro de aquí
importamos el paquete, escribiremos final, consígalo. Sl. Sl significa localizador de servicios
es igual para obtenerlo instancia. Haremos una nueva función
llamada set up services. Aquí registramos nuestros servicios. El primer servicio que
se registrará es el servicio API,
Justin Sterling. Todos los servicios son singletons. Así registra el servicio
API singleton. Y aquí estaríamos dando la implementación implementada del
servicio API de Cluster. Registraremos bien las fuentes de
datos,
así que escribiríamos fetch
from remote, ds. Desde remoto, sí, lo soy. Ahora podemos ver que está diciendo que hay un parámetro
aditivo k, Entonces esto se requiere. Pero vayamos a nuestro aquí. Y ahora podemos eliminar este y obtener el servicio API de
nuestros servicios de ESL ubicados. Importante proceder. Podemos llamarlo servicio API. Y wallah. No necesitamos llamar
al servicio API dentro de
nuestro constructor. Podemos
obtenerlo directamente de un servicio. Maravilloso. Volvamos a ir a nuestra
encuesta se encuentra y se registra nuestro repositorio. Llamaremos reporte por lotes. Y registramos efectos de implementación de
ondulación. Aquí también, no requerimos
defectos del cuerpo es ya que podemos obtenerlo de
nuestro servicio con cualquiera de ellos, entremos dentro de nuestra implementación
vegetal. Retire este y consígalo
de nuestro servicio o mejor. Bien, genial. Ahora, como tenemos reporte de defectos
adicionales
de implementación, también
podemos ir a
nuestros casos de uso phi. Elimine este y obtenga el repositorio de nuestro localizador
de servicios. Ahora, como comentamos en
nuestro video de localizador de servicios, simplemente dando la clase de localizador de
servicios o simplemente escribiendo la función de localizador de
servicios. No va a funcionar. Necesitamos
a todas las funciones dentro de p main.out fondo. Y para el, por
llamar a la función. También necesitamos dar el mejor
seguro vinculante inicializar. Esto asegurará
todas las cosas que he inicializado antes de llamar a
la función en brecha de Berlín. Ahora vamos a reconstruir la función que
hemos escrito mucho bien. A ver si todo
está funcionando bien o no. Apertura. Por ahora, todo
está funcionando bien. Vamos a recapitular lo que hicimos. Implementamos nuestro servicio
API aquí. Escribimos los datos get de
usar el paquete HTTP. Y también, también lo hicimos fue si el
libro de respuesta.status es igual a 200, luego devolvemos el cuerpo de respuesta como una respuesta dinámica máxima para el código sitters
no se opone a 200, que significa que
es algún error al obtener los datos de la API esa vez que lanzamos una excepción. Entonces eso es todo para este video. En el siguiente video, nos sumergiremos profundamente en la capa de
presentación. Así que gracias por ver. Nos vemos en la siguiente.
10. Bloque con una visión general de la gestión del estado de Cubit: Hola y bienvenidos
al noveno video de nuestra serie flutter clean
architecture. Estamos haciendo una aplicación completa
usando una arquitectura limpia. En este video, estaremos aprendiendo sobre la gestión
estatal, que está bloqueada y cúbica. En este video, estaremos aprendiendo la
gestión estatal usando un ejemplo. Y en el siguiente video, estaremos implementando nuestra
gestión estatal dentro de nuestra app. Entonces antes de comenzar,
necesitamos agregar dos paquetes. Uno es el paquete de bloques. Agreguemos el paquete de bloques en nuestro archivo Pub spec dot YAML. Y los otros paquetes
revolotean bloque. Agreguemos también el bloque
aleteo. También puede instalar una
extensión práctica llamada block. Usando esto, puedes
crear fácilmente bloques en
tu aplicación. Déjame mostrarte cómo. Sólo tienes que ir a la carpeta principal. Selecciona la carpeta
donde quieres
crear el bloque o el cubit. Aquí quiero
crear unos codos nuevos, así que voy a hacer clic en el cubo y
darle el nombre. Digamos que voy a estar nombrando a
éste al ejecutarlo. Para que pueda ver mi cúbico
es, ha sido creado. También nombraré este cubit
como texto subrayado dos, pero ahora también vamos a hacer
una nueva página llamada texto DAG. Ahora no tienes que hacer la página de texto y detecta cúbico. Esto es sólo por
mostrarte un ejemplo dentro del texto el cual voy a
importar un punto material,
punto y un apátrida con él. Página de texto. La página de texto contendrá
un andamio con nuestro cuerpo. En el centro. Tendrá un hijo
de botón elevado. El botón elevado
tomará pulsado. Vamos a seguir, tener una función
vacía aquí y un niño debe ser texto. ¿ Bien? Ahora vayamos a nuestro texto a ello. Esta yarda cúbica es
la cúbica real. Y aquí están los pasos. Hagamos algunos estados nuevos. Este es el estado inicial, lo que significa el estado que está presente cuando la aplicación se está ejecutando. Si vas a cubicarlo, estamos, podemos ver que cada vez que se ha creado
el cúbico, ya
lo
estamos inicializando con el estado inicial. Entonces dentro de nuestro estado
haremos algunas noticias a nuevos estados. Una es la carga de texto y
otra es el texto. Lo bailé. ¿ Bien? Ahora hagamos una nueva función. Dentro de nuestra función cúbica
se mostrará nueva función de texto. Y en esta función, lo que quiero hacer es dejarme primero ir a
nuestra media y cambiar la página principal a una página siguiente. Lo que realmente quiero hacer es que cada vez que haga clic en este botón, quiero mostrar un indicador de
progreso circular. Y después de algún tiempo,
quiero mostrar aquí, se necesita eso, es decir, digamos hecho o terminado. Hagámoslo. Entonces inicialmente
voy a emitir un nuevo estado, que es el estado de carga de texto. Después de algún tiempo,
esperemos 1 segundo. Y después están esperando 1 segundo, quiero emitir el
texto, bailarlo. ¿ Bien? Nuestra función aquí se está haciendo. Llamemos ahora a esta función. Siempre que hagamos clic en
el botón click, iremos a nuestra página de texto. Y aquí en vez de en
prensado, se lo voy a dar. Ahora. Antes de eso, necesito
importar también los paquetes de
bloque flutter. Entonces podemos llamar a la función
usando context dot read. Y dentro de leer, voy a estar nombrando el cubit
de donde
vamos a tomar la función punto. Mostrar nuevo texto. ¿Bien? Ahora lo que quiero hacer es crear un bloque aquí o un constructor de
bloques aquí. Para que en vez del texto, voy a estar mostrando una vez el indicador
circular de progreso y luego un texto que
está diciendo que no. Lo que queremos mostrar
en lugar de este botón, cuando hacemos clic en el botón, queremos mostrar un indicador de
progreso circular y luego algo de textura. Entonces lo que tenemos que hacer es que tenemos que cambiar el botón elevado, quiere un
indicador de progreso circular y luego hacerlo es. Veamos cómo
vamos a hacer eso. Vamos a hacer eso usando un widget llamado construcción de bloques. Así que vamos a escribirlo aquí. Este constructor de bloques
será de un cubit de texto. Y siguiente estado dentro
del constructor de bloques, llamaremos constructor, que tomará dos cosas. Si vemos. Uno es el contexto construido y
otro es el siguiente estado. Entonces vamos a dar esos
contextos y estados. Ahora. Si el estado es fijo,
inicial, no haga nada. Y así el botón,
como lo era antes, si el estado es carga de texto, entonces no haga más que un indicador
circular de progreso. Ahora bien, si el texto es, si el estado no es texto
inicial o no carga de texto, entonces si vas a
nuestro texto y luego solo le queda un estado, ese es el texto en nuestro otro siempre
será
el
texto downstate. Entonces, cuando el estado esté hecho texto, mostrar un texto que
sea el completado. Ahora para usar el bloque, necesitamos proporcionar el bloque a un widget que es el padre
de los textos con él. Ahora bien, si vemos el
padre de la página de texto rechazar es el widget de
material app. Entonces necesitamos proporcionar nuestro bloque, que es el texto húmedo dentro de nuestra métrica o por encima de
nuestro widget de aplicación de material. Entonces, ¿cómo podría hacerlo? A ver. Lo cortaremos desde aquí, y estaremos usando un widget
llamado multiblock. Proporcionado. Aquí. Podemos tener múltiples proveedores. Por lo que un proveedor
será proveedor de bloque. Y lo crearemos
usando un contexto, que devolverá un cubit de texto. Y el niño
será nuestro material ahora. ¿ Bien? Ahora si reiniciamos nuestro,
veamos qué pasa. ¿ Bien? Entonces podemos ver que
nuestro botón está aquí. Veamos qué pasa
cuando hacemos clic en él. Hacemos clic en el botón. Mostró el indicador circular de
progreso y luego los detalles de la empresa. Hagamos el retraso a cuatro segundos y
luego volvamos a ver la aplicación. ¿ Bien? Entonces podemos ver una vez que
estamos haciendo clic en el botón, se está inicializando
el estado de carga de texto. Y después de cuatro segundos, el texto downstate
ha sido inicializado. Entonces así es como funciona el bloque
con cúbico. Entonces esta es la comprensión
básica de la gestión estatal
que vamos a utilizar. En el siguiente video,
estaremos implementando la gestión estatal en nuestra
aplicación, lo que significa la aplicación Noticias. Así que gracias por ver y nos vemos
en la siguiente.
11. Implementación de bloques y cubit en la aplicación: Hola y bienvenidos
al décimo video de nuestra arquitectura flutter
clean ve dónde estamos construyendo una aplicación completa usando la arquitectura
pain. En este video,
vamos a incorporar nuestra
gestión de estado de bloque y qubit a nuestra app. Entonces primero borra los codos de
ejemplo, que hicimos en
el video anterior. Entonces podemos hacerlo está bien. Podemos eliminar la página de texto. Ahora. Este también lo hará. Y en lugar de eso,
vamos a proporcionar, estará proporcionando el cubit que se va a hacer
en este video. Y aquí estaremos
escribiendo la página principal. En eliminar las importaciones. Impresionante. Reiniciemos la aplicación. Los niños no pueden
estar vacíos hasta ahora, simplemente
eliminaremos este objeto. ¿ Bien? Ahora vamos a estar
haciendo un nuevo Cupido. Iremos a la sección de
presentación, y dentro de la carpeta de
presentación
estaremos haciendo una nueva llamada de cubitos. Noticias. Entonces como te dije
en el último video, puedes tener una extensión muy útil llamada
extensión de
bloque, usando la cual puedes
crear cubit fácilmente, como puedes hacer clic derecho aquí y crear un bloque de auditoría de
cubitos. Pero ahora este es el cubit más y el nuevo estado voy a
nombrar a este doblado nuevo estúpido. Ahora vamos a nuestras noticias cúbicas. Podemos ver que es por defecto que está teniendo
la noticia paso inicial. Y dentro de los nuevos estados, tenemos un paso inicial de noticias. Tendremos dos estados más. El primer estado será noticia. Vamos a saltarlo a la inicial de noticias. El segundo estado
será Carga de noticias, el tercer estado
será Editor de Noticias. Ahora, dentro del paso inicial de
noticias, tendremos otra
cosa llamada D, lista de noticias info. Por lo que nuestra iniciativa de noticias contendrá las noticias que se
van a mostrar aquí. Ahora, nuestro nuevo estado inicial
contendrá las noticias
que se van a mostrar aquí. Pongamos nuestro analito
inicial de noticias que iniciaremos cuando inicialicemos inicialmente las
noticias con una lista vacía. Veamos la constante. Y luego estaremos escribiendo una
función llamada void fetch news function con
el texto de búsqueda aquí. Y luego estaremos llamando a nuestra función desde los casos de uso, que es esta función
fetch snooze function para eso estará registrando esta dentro de nuestro localizador de
servicios. Entonces digamos que registra esto. Caso de uso de desnudos elásticos. Fetch sabe. Bien. Ahora vamos a nuestra nueva
habilidad, pero punto punto Phi. Y aquí vamos a estar consiguiendo
la nevera Novedades caso de uso. Importemos la celda aquí.
Esoes localizador de servicios. Y bien, ahora podemos
usar este fetch News, use case object dentro de
nuestra función fetch news. Entonces usemos eso. Entonces
escribiremos fetch News. Usa kickstart, busca noticias
con el texto de búsqueda. Veamos a qué está regresando
esto. Nos está devolviendo un futuro, ya sea fracaso o noticia
en una lista de cosas. Así que vamos a obtener el resultado
de que estamos usando esperar. Ahora, vamos a estar consiguiendo justo
el ya sea después de la Tierra. Entonces escribiré definitiva tal noticia. El resultado es igual a dos. Y esto tendrá un tipo de datos de ya sea fracaso o
esta dura información de noticias. Ahora, tenemos el paquete tarts, que nos da
el tipo de datos, también nos da una función muy
útil usando cual podemos
segregar nuestras cosas, lo que estaremos haciendo cuando se consiga
una falla. Y podemos segregar las cosas que vamos a hacer cuando nuestra lista de
información de noticias estemos recibiendo. Entonces, ¿cómo podemos hacerlo? Podemos hacerlo usando
la función completa
que el DOD schizo, ¿verdad? Obtener el resultado de noticias pliegue de punto. Y aquí podemos ver
que hay dos funciones. Una es la
función left que se
invocará cuando se haya devuelto el
resultado izquierdo. Y una función correcta que se
invocará cuando se haya devuelto
el resultado correcto. Entonces, si se
ha devuelto el resultado izquierdo, emitiremos el estado de error de
noticias. Y si se
ha invocado el derecho, estará emitiendo el estado inicial
noticioso. Pero con la noticia. Dado que esta función devuelve una lista de noticias info cuando
el, cuando no hay error. Por lo que esta r también tendrá una
lista de museo para esto, L tendrá un fracaso. ¿ Bien? Ahora, antes de hacer nada, también
necesitamos emitir
el estado de carga de noticias. Porque cada vez que vayamos
a buscar las noticias, primero mostrará
la pantalla de carga y luego va a buscar las noticias. Después de ir a buscar la noticia, si hay un fallo, entonces mostrará que el Dennett
tendrá el estado de error. Y si no hay falla y la función ha devuelto
la lista de noticias info, entonces tendremos el estado
inicial de noticias con la música, con la lista de música para. Ahora. Usemos esta función
en nuestra página de inicio. Entonces para eso, necesitamos hacer nuestra página de inicio un widget con estado. Hagamos eso. Y dentro de nuestra página de inicio, tendrá una función init. Ahora bien, la función init es
una función muy útil. Esta función sólo se
llamará la primera vez que se haya inicializado la
página. Por lo que esta función
sólo se llamará cuando la primera vez que se
haya inicializado la página principal. No estábamos también eso sólo cuando la primera vez que la página de inicio,
la nación se inicializó, queremos llamar a las
noticias fetch o a esta función. Entonces hagámoslo. Para eso necesitamos importar
nuestro paquete Better Block. Y luego vamos a
escribir contexto punto, leer, noticias, cubit,
punto buscar noticias. Y el
texto de búsqueda será nulo. Desde un principio solo
queremos buscar los textos normales. Esto nos está dando un error. La razón es que no
hemos proporcionado la cubeta de noticias en nuestro punto
principal, punto cinco. Entonces hagámoslo. Incluso cortamos este. Escribe un
proveedor multibloque aquí. Tendremos algunos proveedores
o lista de proveedores. Podemos tener solo lista de proveedores o incluso
un solo proveedor. Estaremos creando proveedor
de bloques. Dentro del Create. Tendremos una función que estará devolviendo
el nuevo sesgo. Y el niño
será nuestro material. Podemos importar la temperatura de
las noticias. Bien, ahora ya terminamos. Vamos a reconstruirlo
una vez, reinicie la aplicación. ¿ Bien? Ahora podemos ver que
nuestro bloque está funcionando, pero necesitamos hacer algunos
cambios más de adentro hacia afuera en la interfaz de usuario para que nuestro bloque esté conectado
con los cubics. Entonces siempre que
haya un cambio de estado, según eso, el
DUI también cambiará. Entonces, para hacer eso, tenemos que
ir en nuestra página de inicio. Tenemos que ir a nuestro ListView. Aquí adentro. En lugar del ListView
hará un bloque de bloque. El constructor de bloques estará fuera de
News cubit y news state. Tomará
función constructor aquí, que tomará un
contexto y el estado. Si el estado es noticia inicial, nada, mostrar el ListView. Y en lugar de contar artículos, ahora
usaremos el DOT estatal. Noticias longitud punto, que
estamos pasando por aquí. Las noticias que son posiblemente, cambiemos el
nombre de los movimientos R2. ¿ Bien? Entonces las noticias que
agregarán pasando aquí dentro nuestra nueva noticia inicial estado
que estamos usando aquí. Entonces siempre que el estado
sea nuevo veneciano, use las noticias que se proporcionan
en el estado inicial de noticias. Entonces lo escribimos y
simplemente cuentan van a reafirmar
esa longitud de punto de noticias. Y bien, por ahora
, que sea esto. Y si el estado
no es noticia inicial, si el estado es noticia cargando, esa vez,
devolverá un centro con un
indicador circular de progreso con un color de, digamos, si el estado no
es noticia inicial, si el estado no es
noticia y cargando, entonces sólo nos queda
un estado más. Esa es la era de las noticias. Esa vez lo que
podemos hacer es por ahora, solo
mostraremos un texto. Eso es un envolverlo en una oración. Bien, así que
terminamos con nuestro
constructor de bloques en nuestra página de inicio. Ahora vamos a New scarred. La cartilla de noticias es un genérico
para cada carnet de noticias. Esta es una noticia general Scott, que estamos mostrando en
todas las tarjetas de noticias aquí. Pero necesitamos tener información
específica para todos y
cada uno de los periódicos, que tendrán una imagen única, un título único, y así sucesivamente. Entonces, para hacer eso,
necesitamos pasar la información de noticias dentro de todas
y cada una de las nuevas cicatrices. Y según nuestra nueva información, estaremos cambiando el
panorama o la marea. Entonces hagámoslo. En lugar de esta URL ahora
usaremos news info dot image URL. Ahora, a medida que vamos a nuestra información de noticias, podemos ver que la
URL de la imagen puede ser anulable. Podemos ver que esto
es, esta puede ser la URL de la imagen puede ser una
cadena o se puede hacer. También queremos comprobar que si la
URL de la imagen de punto info de noticias no es igual a nula, solo entonces mostrar la imagen. Y también aquí podemos dar
una señal explicativa, que será específicamente
durante eso,
sí, si la imagen que
agregaste no es nula, entonces aquí también el
adulto mayor no puede ser nulo. Ahora, aquí está la URL
de la imagen es nula. No mostrar nada, solo una caja de tamaño
constante. Ahora, vayamos a nuestro título. Aquí. Mostrará el título del punto info de
noticias. Ahora aquí también podemos, sabemos que el título
puede ser nulo o una cadena. Entonces aquí también tenemos
que decir que si la noticia no es igual a nula, entonces la noticia info dot title. Y si es igual
mostrar un texto sin título. Y tenemos que quitar
la constante de aquí y agregar las de aquí. Desde antes dijimos que
todo era constante, pero ahora esto no es constante. Cambiará de acuerdo a la información de noticias que estés pasando. Ahora. También terminamos
con nuestras nuevas cicatrices. Vamos a la página de vista de noticias. Aquí también, estaremos
pasando la información de noticias. Y ahora lo que
tenemos que hacer es configurar nuestra exhibición de acuerdo con la información de noticias que
estamos recibiendo. Entonces antes que nada,
incluso cambiamos el título a noticias en photo dot title. Si no es igual a nulo, entonces usa la noticia en foto
titulada suelta se da. Y si es igual a nulo, entonces no mostrar ningún título. Eliminemos la
constante de aquí y agreguemos la constante a lo largo. Extracto. La imagen
también cambiará. Lo cambiaremos a
news info dot image URL. Y diremos que si la
URL de la imagen de punto info de noticias no es igual a nula, entonces solo usa la URL de la imagen
en la red de puntos de imagen. Y si es igual,
igual a nulo, entonces tener una caja de tamaño constante. Ahora la deuda también
tenemos que dar, hagamos una función. Digamos Obtener fecha en
fecha en formato DD, MM, YY. Esta es una función
que va a estar creando, será constante desde aquí. Vamos a crear esta
función foster. Esta función devolverá
null y elegirá una fecha, hora de nuestro objeto de información de noticias. Entonces lo que volveremos es datetime punto d. Después de esa barra diagonal hacia adelante, luego datetime punto mes, luego una barra diagonal hacia adelante,
luego punto datetime. Entonces ahora usando datos dentro de la cadena, usando el signo de dólar y
luego con llaves, esto se llama
interpolación de cadena. Esto mostrará los datos dentro esta cadena junto con la otra cadena que
está presente aquí. Entonces por ejemplo, si quieres
mostrar el valor de 100
aquí, entonces alguna cadena. Puedes hacerlo así. Pasemos el
punto de información de noticias datetime dentro nuestros datos en una función de formato DD MM
YY. Entonces también tenemos que dar
el nombre del autor aquí. Noticias en la comida punto autor. El autor también puede ser nulo. Entonces para eso comprobaremos si el autor no es igual a nulo, entonces solo usaremos el
punto de información de noticias del autor más, ¿verdad? No. Autor. Y el contenido también
estará borrando este Lorem. Ipsum text tendrá
noticias info dot content. El contenido será, también
puede ser nulo. Entonces, si el contenido
no es igual a nulo, entonces solo usa el contenido. De lo contrario. No mostrar ruta local. Bien, creo que hemos terminado
con nuestra página de vista de noticias también. Vayamos a nuestra página de inicio. Y como agregamos aquí
la información de noticias, necesitamos agregarlas
en nuestra página de inicio, también dentro de nuestra cartilla de noticias. También agregamos la información de noticias. Entonces también dijimos que
se requiere parámetro, por lo que necesitamos
agregarlo en nuestra página de inicio dentro de nuestra cartilla de noticias. Objeto. Vamos a agregarlo. La información de noticias es
igual a las noticias del punto estatal. Eliminemos la
constante de ellos. ¿ Bien? Entonces si vimos que el estado punto noticias contiene
una lista de noticias info. Entonces todas y cada una de
las noticias que podemos obtener usando
noticias de punto estatal con un índice. Ahora hay buenas noticias. Dios, estamos, podemos ver
que tenemos un error. La razón es
la página de vista de noticias, necesitamos proporcionar
la información de comidas. Entonces ya terminamos aquí. Reiniciemos la aplicación y
crucemos los dedos. Debería serlo. Bien. Nuestro
indicador circular de progreso estaba mostrando y podemos ver que también
podemos ver la noticia. Abramos una noticia. Eso está bien. Podemos ver que las noticias que
estamos recibiendo, la fecha, estamos recibiendo los animales de
autor, estamos recibiendo el contenido también. Estamos consiguiendo, estamos
consiguiendo los optimistas del título. Volvamos y
abramos otra noticia. Bien, aquí también, lo mismo. Bien. Ahora, vamos a comprobar si nuestro texto de
búsqueda, lo que
está funcionando o no. Buscar en Apple. No le
está pasando nada. La razón es que no hemos agregado nuestra
funcionalidad de búsqueda aquí. Entonces agreguemos eso. Tenemos que ir a nuestra
presentación dentro de nuestras páginas. Tenemos que ir a la página principal. Y dentro de nuestra página de inicio, necesitamos agregar un parámetro on
changed, que tomará la
constante de aquí. Vamos a sumar la constante
en estos espacios. Ahora bien, lo que hará esta
función onChange es siempre que estemos cambiando,
Cambiemos el onchange
a propio enviado. Entonces siempre que, después de escribir
algo, digamos naranja. Y después de eso, estamos enviando haciendo clic
en este botón. Estaremos buscando noticias relacionadas con el texto de búsqueda aquí, que es naranja y discutiremos. Entonces hagámoslo. Cómo podemos hacer eso es
llamando a la nueva función. Entonces escribiremos
contextos, punto, lectura, noticias, cubit, punto fetch noticias, junto con los palos de búsqueda
que estamos dando aquí. Y también necesitamos
especificar una cosa más. Pero veamos cómo
está funcionando o no. Busquemos un poco de moneda. Bien, entonces nuestra
funcionalidad de búsqueda también está funcionando. Siempre que buscábamos las noticias, era nos está mostrando algo agradable. Abramos la noticia. Bien, así que eso está funcionando bien. Busquemos con
algunos otros nombres. Digamos Apple. El, The Apple
News también es cierto. Vamos a bucear en Uno más. Newton. No es el Newton exacto
que esperas, pero bien, vamos a escribir Google. Estamos buscando el buscador más
popular en nuestra búsqueda. Pero vemos que nuestra
función de búsqueda también es lo que. Pero si eliminamos todo el texto
aquí y luego presionamos Enter, estamos recibiendo un error. Pero lo que
realmente debería estar sucediendo
es que si no hay texto presente
aquí, mostrar el valor por defecto. Por lo que también tenemos que hacer eso
si el texto de búsqueda recorte de punto. Recortar significa incluso si, aunque tengas algunos, digamos espacios aquí, esto también se considerará como nada presente
dentro de nuestra parte de almacenamiento. Por lo que introducimos un recorte. Si nuestro recorte es igual, no
equivale a nada, no hay texto
o evitar texto. Esa vez. Tener una búsqueda y mostrar
los medios predeterminados. Y las noticias por defecto por defecto, quiero decir que el texto de búsqueda será nulo. Y si ese no es
el caso, entonces. Entonces estos se estiran.
Veamosahora si no hay textos presentes
dentro de nuestra barra de búsqueda. Y luego presionamos Enter, deberíamos obtener la noticia por defecto y estamos obteniendo la predeterminada. Pero si hay algún texto, entonces estamos obteniendo
las herramientas de búsqueda. ¿ Bien? Entonces todo está funcionando ahora, pero necesitamos cambiar también
algunas cosas, pocos detalles. La noticia principal es que se
debe mostrar cuando estamos
mostrando las noticias por defecto. Pero cuando apenas estamos mostrando
alguna búsqueda linchada, esa vez,
se deben buscar las principales noticias . Entonces hagámoslo. Para hacer eso, necesitamos
hacer un nuevo estado, que se llama el estado de búsqueda
inicial de noticias. Ahora bien, este estado será invocado siempre que el texto de búsqueda no
sea igual a nulo.
Entonceslo escribimos aquí. Si el texto de búsqueda
no es igual a nulo, emitir la búsqueda inicial de noticias. Estado. De lo contrario. Simplemente inicializar
las iniciativas noticiosas. Ahora vamos a nuestra página de inicio. Y ahora aquí, si el estado es nuevo
inicial, mostrar el ListView, y si el estado es búsqueda inicial de
noticias, esa vez también
muestran esta disputa. Bien, ahora vayamos a nuestras principales noticias y esta
vamos a cambiar. Entonces podemos envolver esto
con una acumulación de bloques. Entonces esto es lo muy
útil de usar block builder que
no necesitamos cambiar toda
la página o
reconstruir toda la página. Siempre que haya
un cambio de estado, podemos simplemente cambiar el widget en particular
que queremos cambiar. Esta es la belleza de las
declaraciones, ¿verdad? Contexto, estado. Y si el estado
es noticia inicial, ese tiempo vuelve a la normalidad. Noticias principales. De lo contrario si el estado es nuevo, búsqueda
inicial, esa vez mostró la búsqueda a noticias,
noticias a crédito. Y si el estado
no es ni inicial de
noticias ni de búsqueda inicial de noticias, entonces devuelva un presupuesto vacío
o una caja de tamaño constante. Bien, vamos a probarlo. Si teníamos en nuestra pantalla inicial, cuando había una carga, no
mostraba ningún widget. Nuevamente, si entramos a novae
solo mostrando la parte superior cerca de 0, cuando las noticias principales están mostrando
el encabezado es noticia principal. Y si se trata de un nombre de búsqueda, las noticias de búsqueda tenían un problema. Bien, genial. Ahora también, vamos a estar haciendo
algún manejo de errores aquí. Vamos a limpiarlo todo. Comentemos por ahora. Comentemos esta parte por ahora y emitamos el estado de error noticioso. Veamos qué se está mostrando aquí. Reiniciemos la f. y cuando haya un estado de error de
noticias, solo
estamos mostrando que
hay un texto de error en la pantalla. Lo que deberíamos estar
haciendo cuando hay un estado de error de noticias es que
debemos darle al usuario un botón de recarga para que si hay un error con
la llamada del APN, entonces podamos recargar nuestro app y
llamará a la API una vez más. Entonces hagámoslo. Ahora. Si hay un error, entonces en lugar de solo el texto, queremos darle un botón de icono. El botón del icono
tomará un encendido presionado. Démosle por ahora una función
vacía y un icono. El icono será, puedo empezar. Rejugamos y
esto debería estar bien. Y el color de la misma
será Deep Blue. El tamaño será, digamos 24. Y vamos a darle
una constante aquí. Y lo que realmente queremos
hacer con este botón de recarga, queremos volver a llamar a la función fetch news
dentro de nuestras noticias, buenas noticias con el texto de búsqueda
nulo. Entonces, si hacemos esto por ahora, no va a pasar nada porque aquí
acabamos de imitar
un error de noticias. Pero si eliminamos el error de
noticias de aquí, y si descomentamos esto, y ahora, si presionamos
el botón Cargar, debería mostrarnos
lo normal, bonito. Pero el default significa wallah tan pronto como
el default news. Si reiniciamos la
app una y otra vez, pruébalo, veamos
qué está pasando. Nuestra noticia inicial se
ha mostrado con el encabezado de noticias superior y se muestra
la imagen, se muestra el encabezado. Las fotos se están cargando. Y si vamos a una noticia, podemos ver que se está
mostrando el título, se están mostrando
las unidades. Se está mostrando la fecha
cuando se publicó, el autor Naomi tejido
y el contenido también
estamos ahora si buscamos algún texto,
buscamos, algunas noticias hora buscada noticias también se están mostrando con las noticias
de búsqueda encabezadas. Y si no hay texto
dentro de nuestro campo de texto de búsqueda, entonces la instalación por defecto. Así que hemos implementado
nuestro bloque con gestión de estado
qubit
dentro de nuestra app. Y nuestra app es completamente
completa y funcional. Entonces en el siguiente video, voy a estar hablando la parte modular de la arquitectura
limpia. Estaremos viendo por qué
es modular y cómo podemos. También voy a estar
mostrando cambiando un paquete muy importante
que lo estamos usando. Y voy a estar mostrando
con qué facilidad podemos cambiar
el paquete sin afectar a otros códigos presentes aquí usando esta arquitectura
limpia. Así que gracias por ver. Nos vemos en la siguiente.
12. Prueba de la modularidad de la arquitectura limpia: Hola y bienvenidos
al undécimo video y al video final de nuestra serie aplanada de
arquitectura limpia, donde estamos construyendo una aplicación completa usando arquitectura
verde. En este video,
estaremos probando la modularidad de la arquitectura
limpia. Desde el primer video, tengo fingiendo que la arquitectura
limpia
es muy modular. Con eso, quise decir que podemos cambiar
fácilmente cualquier cosa en cualquiera de estos apartados sin afectar el código
de otras sesiones. Entonces en este ejemplo, vamos a cambiar
nuestro paquete HTTP en nuestro servicio API a algún
otro paquete nuevo actualizado. Veamos qué paquete
vamos a usar. Estaremos usando un
paquete llamado dy. Vamos a la biografía y agreguemos el paquete DO en nuestro archivo
Pub spec dot YAML. Hemos agregado dial en nuestro archivo YAML de punto de especificaciones de
bombilla. Y vamos a pasar por nuestra encuesta se localiza
y se registra. Registró nuestro diodo. Ahora recuerda una cosa. Es necesario registrarse
antes del servicio API. La razón es que
usarás el paquete de marcación
en nuestro servicio API. Entonces necesitamos registrar morir primero y luego tenemos que
registrar la superficie API. Ahora solo por esa razón, estamos registrando
nuestro servicio API antes de la obtención de la fuente de datos
remota. La razón es que estamos utilizando el servicio API dentro de nuestros
peces desde una fuente de datos remota. Ahora vamos a nuestro servicio API
y vamos a estar borrando. Esta línea. Escribirá la
respuesta final es igual a dos. Antes de eso, también
necesitamos obtener el diodo. Importemos nuestro localizador
de servicios. Ahora vamos a escribir diodo
punto get función. Ahora la función get, vemos que toma la ruta y toma
tres parámetros también. La parte será la URL aquí, y los parámetros serán
donde los padres, ¿bien? Y devuelve un
futuro de respuesta. La respuesta tendrá
una respuesta a ello. Ahora bien, el, esto será
respuesta punto da, da datos. Ya que estamos usando la respuesta
del descanso en forma de diapasón, todo se salvará. Ahora, reiniciemos a
nuestro aspirante. Bien, entonces estamos recibiendo un error. Veamos qué error
somos creados. Si imprimimos aquí, datos de inicio de
respuesta.
Podemosver si, ya
sabes,
se imprime respuesta.data. Si imprimimos la respuesta.data aquí, veamos qué pasa. ¿ Bien? Entonces esta se está imprimiendo. Entonces nuestro error debe estar en algún lugar dentro de nuestras fuentes de datos. Bien. Vamos a nuestro archivo de fuentes de
datos. Y dentro de nuestra captura, vamos a imprimir la edición. Entonces podemos ver que HashMap
interno o una dinámica de cadena de mapa
no es un subtipo de cadena. Esto se está mostrando porque si
vamos a nuestro servicio API, estamos usando JSONData llamado el código dentro de nuestro response.body dentro de
nuestro paquete HTTP. Nos da una versión
neófita de cuerda de la cosa dinámica de la piedra del mapa. Pero aquí estamos
obteniendo directamente los tipos
dinámicos máximos, por lo que no necesitamos
usar este. Entonces podemos borrarlo aquí. Y si lo volvemos a ejecutar, veamos qué pasa. ¿Bien? Entonces estamos obteniendo nuestros datos o algún minuto y ver
si eso también está funcionando. Vamos a buscar. Bien. Por lo que la funcionalidad de búsqueda también
está funcionando. Esta es la facilidad con la que podemos cambiar las cosas en nuestra arquitectura limpia sin cambiar nada. Si viste,
solo tuvimos que cambiar dos a tres líneas en nuestro servicio
API dot, dot file. El resto, todos y cada uno de los archivos decía están
teniendo el mismo código. No tuvimos que cambiar ningún otro archivo excepto
el servicio API. Entonces esta es la belleza
de la arquitectura limpia. Esto es tan útil
que podemos
cambiar fácilmente cualquier cosa sin cambiar ni alterar otras peleas. Entonces eso es todo para este video. En este curso, realizamos una aplicación completa desde cero usando
arquitectura limpia. Espero que también seas
capaz de construir la
aplicación conmigo. Y gracias por ver toda
la serie hasta el final.