[Semanario] Aplicación móvil para termómetro multisonda (Flutter)

HeXaN

Motivación

Hace ya un tiempo compré un termómetro con seis sondas para controlar mis asados en el horno y la barbacoa. Este termómetro puede controlarse mediante una aplicación móvil que tiene funciones tales como: alarma a determinada temperatura, gráficas de temperatura, selección del tipo de comida, etcétera.

El problema es que estas aplicaciones son nefastas: cuando programas la alarma directamente petan, pierden la sincronización con el termómetro y tienes que reinstalar, las gráficas sólo llegan a 100ºC (el termómetro lee hasta 300ºC) y mil cosas más.

Por lo tanto, la idea es desarrollar una aplicación que supla estas carencias. Para ello usaré Flutter, de la cual no tengo ni la más remota idea, y nada más.

Objetivos

El objetivo principal es replicar el funcionamiento de la aplicación original corrigiendo todos los errores que tiene de camino. Para ello seguiré estos subojetivos:

  • Aprendizaje de las bases de Flutter.
  • Diseño de las pantallas de la aplicación en papel.
  • Diseño de las pantallas de la aplicación en Flutter.
  • Investigar el tema del BLE.
  • Implementar la lógica de la pantalla inicial.
  • TBD.

El código respectivo para cumplir estos objetivos se podrá seguir en el siguiente repositorio.


Intentaré actualizar una vez por semana con los avances para así tener cosas que enseñar.

22
MTX_Anubis

que tal la integración de bluetooth con flutter?

Yo en su día hice un cojón de proyectos de telemedicina con bluetooth (hace 8 años) y distintos aparados y todas sus mierdas. En algunos casos tuve que acceder a las APIs internas y demás historias porque es un ñordo como la copa de un pino trabajar con eso y las APIs que exponía el adk eran pura basurilla. Espero que haya mejorado la cosa.

2 respuestas
Unrack

Justo el otro día comenté con un colega que flutter tenía una pinta interesante pero ni zorra de Dart. A ver qué sale de aquí

HeXaN

#2 Ni puta idea, la verdad. Lo descubriré sobre la marcha. Eso sí, el BLE siempre es un coñazo (al menos Python que es lo que "controlo").

murdokiler

A mi Flutter me gusta mucho y me pareció muy fácil de aprender y empezar a hacer cosas, y Dart es muy parecido a C# o Java por lo que tampoco hay problema si ya conoces algún lenguaje parecido a estos, cambia alguna cosas como por ejemplo los final, o private, que se hace con un guión bajo en el nombre de la variable/método, etc...

Con Flutter una cosa a tener en cuenta, es la organización, es muy fácil acabar con el código todo junto si no lo cuidas o vas refactorizando, pero también es muy fácil de arreglarlo (extrayendo widgets y organizándolo todo en pequeñas clases o widgets).

No se que IDE vas a usar, pero yo estoy muy contento con la integración que tiene con Visual Studio Code, tiene perfectamente integrado el Debug, Hot Reload (que maravilla esto), etc...

Lo que no tiene integrado todavía es el poder conectar varios dispositivos e ir viendo los cambios cada vez que guardas en todos ellos, pero se puede hacer sin problema desde la Terminal. Yo a la hora del diseño y temas de la aplicación tengo conectados un iPhone, un iPad Pro, un móvil Android y una tablet Android, guardo y en seguida se ven los cambios en todos ellos, con lo que ganas mucho en productividad, solo tarda un poco más a la hora de lanzar la app por primera vez ya que tiene que compilar para todos ellos.

A darle!

1 respuesta
r2d2rigo

Te vas a cagar vivo cuando tengas que hacer la integracion con el API nativo de Bluetooth. O te picas tu mismo los bindings o vas a tener que tirar de una libreria que un matao ha colgado en Github, y ahi reza porque tenga implementada la funcionalidad que necesitas.

Yo te recomendaria que directamente elijas otra tecnologia si quieres tener un minimo de probabilidades de acabar la app.

1 respuesta
B

#2 a que te refieres con proyectos de telemedicina? Podrias decirme? es que me planteo hacer alguna cosilla diferente para el TFG cuando me toque en la carrera y me llamaba desarrollar algo

1 respuesta
MTX_Anubis

#7 Pues conectar con todo tipo de cacharros que se usan en hospitales para tomar las mediciones desde el movil, crear registros automaticamente y subirlos a una plataforma.

Fueron unos cuantos proyectos vendidos a farmas y algún hospital con la idea de que los pacientes cronicos aprendieran a tomarse las mediciones que necesitaran desde su casa sin necesidad de ir a consulta y poder hacer el seguimiento telemático. Era bastante más complejo porque había umbrales y un montón de cosas más dependiendo de los tratamientos que fueran.

Esto estaba también relacionado con la adherencia de los tratamientos.

Luego algún proyecto más para quioscos en las farmacias más enfocado a la fidelización de clientes. Era basicamente lo mismo pero el usuatio tenía una tarjeta que la pasaba y se registraba, luego podía consultar los datos online y ver progresos y cosas así.

Fue divertido a la par que desesperante y aprendes que las integraciones de distintos sistemas siempre te llevan el triple de tiempo del esperado.

HeXaN

#5 Voy a usar VSC también, sí, porque es mi daily driver. No voy a compilar para nada que no sea móvil Android así que el problema que comentas no lo tendré.

1 respuesta
murdokiler

#9 Entonces ningún problema, y bueno tampoco es tanto, la solución de momento en vez de guardar y ver directamente el hot reload, se hace guardando y te vas a terminal y pulsas R, o shift+R para restart. Es un paso más, pero nada grave, y tarde o temprano se implementará.

zellverin

#1 en un año nos cuentas

3 1 respuesta
HeXaN

#11 Pues al ritmo que procrastino no me extrañaría xD

aren-pulid0

Como solo vas a usar un dispositivo Android porque no desarrollo nativo?
Como te dicen probablemente te quieras tirar de los pelos con el tema del bluetooth y acabaras escribiendo código nativo aún así o usando una librería y rezando porque tenga lo que pidas

1 respuesta
HeXaN
#13aren-pulid0:

Como solo vas a usar un dispositivo Android porque no desarrollo nativo?

Porque no me interesa lo más mínimo, la verdad. La idea es hacer una aplicación "rápidamente" probando algo nuevo. Para programar Kotlin ya hago otros proyectos.

Slowbro

#1 Lo de hacer una App digna ni cotiza que lo sacas rápido, lo que más te debería tocar los huevos es el acceso a la información. He tenido tan malas experiencias con BLE que casi te diría de montarte las sondas (NTCs o termopares casi seguro) a una Raspi+Hat, calibrarlos, y exponer los datos por el wifi de tu casa con MQTT/ZMQ.

Así haces manualidades que entre tanto paper tu mente te lo va ha agradecer.

1 respuesta
HeXaN

#15 Eso lo dejo para el siguiente hilo que haga tras ver que lo del BLE es "imposible" xD

1 1 respuesta
Fyn4r

#16 Hay que saber adaptarse xD

murdokiler

No he probado ninguno pero en pub.dev hay unos cuantos packages para implementarlo, quizá te puedan servir o por lo menos una base para desarrollar uno propio:

https://pub.dev/packages/flutter_ble_lib
https://pub.dev/packages/flutter_reactive_ble
https://pub.dev/packages/rx_ble

1 respuesta
HeXaN

#18 Le tenía echado un ojo a este: https://pub.dev/packages/flutter_blue

1 respuesta
murdokiler

#19 Pues tiene buena pinta ese, ya dirás que tal te funciona.

eXtreM3

#6 si algo tiene Hexan, es que es cabezón como el que más. Si ha dicho que va a hacer la app en Flutter, la hará xD

varuk

Buen hilo. Quería aprender Flutter, tras unos asuntos pendientes que tengo en Android donde quiero profundizar más.

¿Vas a seguir algo para aprender Dart y luego Flutter o vas a usar un poco el método de verlas venir e ir mirando aquí y allá? Hice una prueba hace un par de meses (un "hola mundo") y me gustó el tema de las vistas, la creación de vistas y luego verla en el móvil sin tener que compilar toda la aplicación. Van a llevarse eso a Android (Jetpack Compose, que saldrá dentro de no mucho) para decir adiós a los layouts xml.

1 respuesta
HeXaN
#22varuk:

¿Vas a seguir algo para aprender Dart y luego Flutter o vas a usar un poco el método de verlas venir e ir mirando aquí y allá?

Yo miro la documentación oficial y a tirar millas.

1
murdokiler

Os pongo un par de packages que siempre meto:

Provider, para manejar el estado de la app. Muy fácil de implementar, y necesario cuando empiezas a tener un app con varias pantallas y tienes que utilizar propiedades de otras clases, y no tener que ir arrastrando estás clase por clase, hay gente que prefiere tirar más por un patrón BLoC, yo con Provider estoy genial:

https://pub.dev/packages/provider

Animate_do, como el animate de css, se puede aplicar a cualquier widget:
https://pub.dev/packages/animate_do

s4suk3

luego podrás asegurar que dart > kotlin

1 respuesta
varuk

#25 ¿Por qué? No conozco dart, por eso te pregunto.

1 respuesta
pineda

me quedo por aquí

s4suk3

#26 pues por ejemplo la forma de usar las promesas con Futures, en comparación con kotlin y sus corutinas que personalmente, apestan xD

1 respuesta
eondev

#28 eso será porq no las entiendes xDDD
Si las corutinas en kotlin son comodisimas y te dejan un código super limpio :psyduck:

s4suk3

#25 XDDD eso sera pq no trabajaste con otras cosas