Resultados de Google Summer of Code 2020

El equipo de Dart fue mentor de 5 estudiantes desarrolladores este verano, como parte de GSoC 2020. Lee sobre los proyectos de los estudiantes.

El logo de Google Summer of Code.

Google Summer of Code (GSoC) es un programa global enfocado en integrar a estudiantes desarrolladores en el desarrollo de software de código abierto. Los estudiantes son patrocinados por Google para trabajar con una organización mentora de código abierto en un proyecto de programación de 3 meses durante el verano.

En febrero anunciamos con entusiasmo que el equipo de Dart sería una organización mentora en GSoC 2020. Terminamos mentoreando 5 proyectos, seleccionados de entre más de 170 solicitudes de estudiantes de todo el mundo. Hoy estamos emocionados de compartir nuestros resultados, descritos por los estudiantes que trabajaron en los proyectos.

Generando bindings de dart:ffi para interop Dart-C con package:ffigen

#

By Prerak Mann

package:ffigen es un generador de FFI que reduce enormemente el esfuerzo de usar dart:ffi al generar bindings de Dart a partir de archivos de cabecera C (.h).

Para entender la necesidad de esta herramienta, considera LibClang (la interfaz C de Clang). El API de LibClang tiene unas 8.000 líneas de código (LOC). Si fueras a escribir los bindings de Dart para LibClang a mano, necesitarías casi 4.500 LOC. Con package:ffigen, todo lo que necesitas hacer es pasar un pequeño archivo de configuración YAML de menos de 20 LOC, y luego puedes generar los bindings.

Puedes controlar qué funciones C generar, y usar expresiones regulares simples para renombrar macros, enums y miembros individuales de structs. También puedes generar miembros array anidados en structs (que aún no son totalmente compatibles en dart:ffi).

Revisa github.com/dart-lang/ffigen para una lista completa de configuraciones, FAQs, ejemplos, y más.

Aprende testing con un nuevo ejemplo de Flutter

#

By Abdullah Deshmukh

¿Has estado usando Flutter por un tiempo pero aún no has descubierto cómo probar apps de Flutter? Entonces puede que te interese el ejemplo que construimos para demostrar las mejores prácticas para probar apps de Flutter. Podrás aprender testing en Flutter de forma rápida y fácil.

El ejemplo muestra diferentes tipos de pruebas incluyendo:

  • Pruebas unitarias

  • Pruebas de widgets

  • Pruebas de integración

  • Pruebas de rendimiento

  • Pruebas de gestión de estado

Como bonus, también construimos un codelab sobre cómo probar apps de Flutter. Puedes ver un reporte detallado del trabajo realizado en el proyecto en el artículo Aprende testing con el nuevo ejemplo de Flutter.

Formatos de archivo de traducción extensibles por el usuario

#

By Jaime Blasco

El paquete intl_translation solo soporta el formato de archivo ARB, que no es ampliamente usado fuera de Dart. El paquete intl_translation_format, creado durante GSoC 2020, se basa en intl_translation, añadiendo una clase TranslationFormat que puede soportar formatos muy variados. Los desarrolladores pueden añadir soporte para formatos adicionales en sus propios paquetes y en solo unas pocas líneas crear herramientas de línea de comandos para extracción y generación que se integran con las herramientas existentes. Con estas, las traducciones existentes en otros formatos, incluso propietarios, pueden importarse fácilmente a un proyecto Dart y los nuevos mensajes originados en código Dart pueden integrarse en las herramientas y flujos de trabajo de traducción existentes.

Como demostración de estas capacidades, los nuevos paquetes incluyen soporte para varios formatos. Además de ARB, soporta XLIFF v1.2 (iOS), XLIFF v2.0, y mensajes JSON con ICU. Librerías experimentales muestran cómo podría implementarse el soporte para otros formatos, e incluso traducciones que pueden actualizarse en tiempo de ejecución.

Platform channels en una app móvil y un plugin federado

#

By Ayush Bherwani

Después de investigar los platform channels (el API de Flutter para enviar mensajes de ida y vuelta de Dart a código nativo como Swift o Kotlin), decidimos cubrir el tema con dos ejemplos diferentes. Uno es una demo directa de Android e iOS, mientras que el otro es un plugin federado capaz de compilarse con el canal master para web y escritorio también. Entre los dos ejemplos, el código base muestra no solo los detalles de los platform channels y los códecs que pueden usarse para mover datos, sino también los APIs para plugins federados y técnicas para llamar código nativo en APIs de web y escritorio (Windows y Linux).

Si eres un desarrollador que busca construir un plugin o simplemente acceder a un API de plataforma, estos ejemplos son un gran lugar para empezar a aprender. Para más información sobre este proyecto, consulta el artículo Ejemplos de platform channels.

Escribiendo package:yaml_edit para habilitar pub add <package>

#

By Garett Tok Ern Liang

Los proyectos Dart especifican las dependencias de paquetes en un archivo pubspec.yaml. YAML es genial porque nos permite escribir comentarios, pero modificar YAML programáticamente es un desafío.

Para abordar este desafío, escribimos package:yaml_edit para realizar fácilmente manipulaciones de cadenas conscientes del contexto que preservan el formato y los comentarios. El conjunto de pruebas del paquete contiene más de 40.000 pruebas, y creemos que tenemos una solución bastante buena funcionando. ¡Pruébalo y reporta bugs!

Usando package:yaml_edit, añadimos un nuevo subcomando pub add <package> a pub, la herramienta de gestión de paquetes para Dart y Flutter. pub add resuelve automáticamente la última versión compatible del paquete objetivo y la añade al pubspec.yaml del usuario. Para poner esto en perspectiva, pub add <package> automatiza la tediosa tarea de tener que hacer todo lo siguiente:

  1. Visitar https://pub.dev/packages/<package>

  2. Elegir una versión para añadir a tu paquete

  3. Modificar el pubspec.yaml

  4. Ejecutar pub get

  5. Repetir los pasos 2-4 tantas veces como sea necesario para obtener una versión compatible con tus otras dependencias

Un comando similar que elimina dependencias — pub remove <package>— también está en proceso. ¡Mantente atento a estos dos comandos que llegarán pronto a pub!

Muchas gracias a todos los que aplicaron para Google Summer of Code 2020 con Dart, a los estudiantes que completaron proyectos este año, y a los mentores que dedicaron tiempo cada semana para hacer de este un verano de código increíble. Esperamos ver a muchos de ustedes, estudiantes, nuevamente como colaboradores en todo el ecosistema de Dart.

Más de Dart