Saltar al contenido principal

Notas de la versión de Flutter 1.5.4

Notas de la versión para Flutter 1.5.4.

Además de continuar enfocándonos en la calidad y la estabilidad desde la versión 1.2, la versión estable de Flutter 1.5.4 agrega un conjunto de nuevas funciones a medida que nos acercamos a la conferencia Google I/O. Además, Apple tiene una fecha límite para compilar con la versión 12.1 de su SDK de iOS, lo cual ahora hacemos en esta actualización. Puedes cumplir con los requisitos de Apple simplemente obteniendo la versión estable 1.5.4, compilando y actualizando tu aplicación Flutter en el Apple Store.

Además, esta compilación incluye soluciones para las dos regresiones que vimos en Flutter 1.2:

  • #28640 NoSuchMethodError: **android.view.MotionEvent.isFromSource fue cerrado y solucionado en todas las versiones posteriores a la 1.3.7
  • #28484 Renderizado de Widget extraño desde la actualización de Flutter:** se realizó un cambio que soluciona esta regresión en la versión 1.4.0

Finalmente, para obtener detalles sobre otras soluciones y nuevas funciones, sigue leyendo.

Cambios disruptivos

#

Nuestra encuesta reciente mostró que los desarrolladores de Flutter prefieren un cambio rompedor (breaking change) si eso significa que mejora la API y el comportamiento de Flutter. Por supuesto, seguimos haciendo cambios rompedores con moderación. La siguiente es la lista de cambios rompedores en esta versión junto con enlaces a una descripción completa de cada cambio y cómo manejarlo en tu código de Flutter.

Cambios severos de rendimiento y fallos

#

En esta versión, solucionamos varios problemas severos de rendimiento y fallos.

  • flutter#30990: Permitir construcciones de Widget de perfil en modo profile
  • flutter#30985: Agregar microbenchmark de rrect contains
  • flutter#28651: No se puede ejecutar la operación porque FlutterJNI no está adjunto a nativo.

Cambios en iOS

#

El soporte para iOS es tan importante para el equipo de Flutter como el soporte para Android, lo cual puedes ver en el enorme volumen de cambios que hemos realizado en esta versión para hacer que la experiencia en iOS sea aún mejor.

  • flutter#29200: Localización de Cupertino paso 1: agregar un archivo arb en inglés
  • flutter#29821: Localización de Cupertino paso 1.5: corregir una desincronización de recursos en cupertino_en.arb
  • flutter#30160: Localización de Cupertino 1.9: agregar el recurso en singular necesario para cupertino_en.arb
  • flutter#29644: Localización de Cupertino paso 3: mover algunas herramientas de Material para hacer espacio para Cupertino
  • flutter#29650: Localización de Cupertino paso 4: permitir que la localización de fechas generada combine locales de Material y Cupertino
  • flutter#29708 Localización de Cupertino paso 5: agregar arb en francés como ejemplo traducido
  • flutter#29767: Localización de Cupertino paso 6: agregar una clase base GlobalCupertinoLocalizations con formato de fecha y hora
  • flutter#30527: Localización de Cupertino paso 11: agregar más aclaraciones de traducción en las instrucciones
  • flutter#28629: Asegurarse de que todo en la transición de página de Cupertino pueda ser lineal al deslizar hacia atrás
  • flutter#28001: CupertinoTextField: se agregó la capacidad de cambiar el color del placeholder
  • flutter#29304: Incluir platformViewId en el árbol de semántica para iOS
  • flutter#29946: Permitir que CupertinoPageScaffold tenga toque en la barra de estado para desplazarse hacia arriba
  • flutter#29474: Permitir que el botón de limpiar de CupertinoTextField también llame a onChanged
  • flutter#29008: Actualizar CupertinoTextField
  • flutter#29630: Agregar formas de corazón a CupertinoIcons
  • flutter#28597: Ajustar las animaciones de ruta de Cupertino restantes para que coincidan con las nativas
  • flutter#29407: [cupertino_icons] Agregar circle y circle_filled, para botones de opción (radio buttons).
  • flutter#29024: Corregir cambio de forma del árbol de CupertinoTabView al cambiar la inserción de vista
  • flutter#28478: Dar soporte a dispositivos iOS que reportan datos de presión de 0
  • flutter#29987: actualizar documentación de CupertinoSwitch
  • flutter#29943: Eliminar espacio no deseado entre la barra de navegación y el hijo del área segura (safe area)
  • flutter#28855: Mover prueba de deslizamiento hacia atrás de iOS en material a material
  • flutter#28756: Manejar gesto hacia atrás de Cupertino interrumpido por push de Navigator
  • flutter#31088: Física de desplazamiento de campo de texto
  • flutter#30946: Agregar algunos iconos de cupertino más
  • flutter#30521: Proporcionar un IconTheme por defecto en CupertinoTheme
  • flutter#30475: Corrección de fallo en modo trackpad

Cambios en Material

#

Por supuesto, Material sigue siendo una prioridad para el equipo de Flutter también.

  • flutter#28290: [Material] Crear un ThemeData de FloatingActionButton y honrarlo dentro de FloatingActionButton (#28735)
  • flutter#29980: Corregir problema con la flecha del encabezado del cajón de cuentas que gira cuando se llama a setState
  • flutter#29563: Evitar parpadeos al arrastrar para seleccionar texto
  • flutter#29138: Actualizar el subrayado de DropdownButton para que sea personalizable
  • flutter#29572: Personalización del icono de DropdownButton
  • flutter#29183: Implementar configuración de labelPadding en TabBarTheme
  • flutter#21834: Agregar opción shapeBorder en App Bar
  • flutter#28163: [Material] Agregar capacidad para configurar el color de sombra y el color de sombra seleccionado para chips y temas de chips
  • flutter#27711: Hacer opcional el icono del FAB extendido
  • flutter#28159: [Material] Expandir la API de BottomNavigationBar (repetición)
  • flutter#27973: Agregar parámetro extendBody a Scaffold, el MediaQuery del body refleja la altura del BAB
  • flutter#30390: [Material] Actualizar slider y tema de slider con nuevos tamaños, formas y mapeos de color
  • flutter#29390: Hacer que el panel de expansión alterne opcionalmente su estado al tocar su encabezado.
  • flutter#30754: [Material] Corregir fallo de showDialog causado por contextos antiguos
  • flutter#30525: Corregir cursor fuera del ancho de entrada
  • flutter#30805: Actualizar muestras de ExpansionPanelList con plantilla Scaffold
  • flutter#30537: Imágenes integradas y variaciones agregadas al código de muestra de ListTile
  • flutter#30455: Prevenir desplazamiento vertical en shrine asegurando que el tamaño de la tarjeta quepa en la pantalla
  • flutter#29413: Corregir _navigatorObserver de MaterialApp cuando solo se usa builder

Cambios en Desktop

#

Flutter ha estado progresando en ampliar el soporte para mecanismos de entrada de clase de escritorio con mapeos de teclado, selección de texto, ruedas del mouse y desplazamiento (hover) junto con el comienzo del soporte de escritorio en nuestras herramientas.

  • flutter#29993: Agrega el mapeo de teclado para Linux
  • flutter#29769: Agregar soporte para selección de texto mediante mouse a los campos de texto de Cupertino
  • flutter#22762: Agregar soporte para ruedas de desplazamiento (scrollwheels)
  • flutter#28900: Agregar soporte de clave a cupertino button
  • flutter#28290: Selección de texto mediante mouse
  • flutter#28602: Permitir que PointerEnterEvent y PointerExitEvents se creen a partir de cualquier PointerEvent
  • flutter#30829: Mantener las capas de anotación de hover en sincronía con el detector de mouse.
  • flutter#30648: Permitir la descarga de artefactos de embebido para escritorio
  • flutter#31283: Agregar flujos de trabajo de escritorio a doctor
  • flutter#31229: Agregar soporte de flutter run para Linux y Windows
  • flutter#31277: pasar la bandera de seguimiento de creación de Widget al script de compilación
  • flutter#31218: Agregar capacidad de ejecución para el objetivo macOS
  • flutter#31205: Agregar proyectos de escritorio y comandos de compilación (experimental)
  • flutter#30670: Implementar StandardMethodCodec para shells C++

Cambios en el Framework

#

Además de las especificidades de la plataforma, seguimos presionando en el núcleo del framework de Flutter.

  • engine#8402: Habilitar el cierre de todos los isolates raíz en una VM.
  • flutter#31210: Usar la altura completa del glifo para la altura del cursor de texto en Android v2
  • flutter#30422: Confirmar un navigator.pop tan pronto como se levante el deslizamiento hacia atrás
  • flutter#30792: Renombrar Border.uniform() -> Border.fromSide()
  • flutter#31159: Revertir "Usar la altura completa del glifo para la altura del cursor de texto en Android"
  • flutter#30932: Mejoras de UX en transformaciones 2D
  • flutter#30898: Verificar que ErrorWidget.builder no sea modificado después de la prueba
  • flutter#30809: Corregir problema 23527: Excepción: RenderViewport excedió su número máximo…
  • flutter#30880: Permitir que _createErrorWidget de sliver.dart funcione con otros Widgets
  • flutter#30876: Simplificar el manejo de futuro de toImage
  • flutter#30470: Corregido error de diseño de columna flex de Table #30437
  • flutter#30215: Verificar elevaciones no válidas
  • flutter#30667: Corregir anulaciones indirectas y mixins adicionales de @mustCallSuper
  • flutter#30814: Corregir documentación de muestra de StatefulWidget y StatelessWidget
  • flutter#30760: corregir NPE de cast en invokeListMethod y invokeMapMethod
  • flutter#30640: Agregar const Border.uniformSide()
  • flutter#30644: Hacer que FormField._validate() devuelva void
  • flutter#30645: Agregar docs a FormFieldValidator
  • flutter#30563: Corregido un error tipográfico en la doc de la API de Expanded
  • flutter#30513: Corregir problema 21640: Error de aserción : '_listenerAttached': is not true
  • flutter#30305: duplicaciones de lista nula más cortas
  • flutter#30468: Diagrama de integración para BottomNavigationBar.

Cambios en plugins

#

En esta versión, también tenemos una serie de cambios en los plugins de Flutter, incluyendo cámara, Google Maps, el Web View, el selector de imágenes, los plugins de Firebase y, ahora para usar en tus aplicaciones, la beta del plugin de compras In-App.

  • plugins#1477: [camera] Eliminar el ciclo de vida de la actividad
  • plugins#1022: [camera] Agregar dispatch_queue serial para el plugin de cámara para evitar bloquear la interfaz de usuario
  • plugins#1331: [connectivity] Habilitar la obtención del BSSID de la red Wi-Fi actual
  • plugins#1455: [connectivity] Agregada prueba de integración.
  • plugins#1377: [firebase_admob] Actualizar documentación para agregar ID de Admob de iOS y agregar ID de Admob de iOS en proyecto de ejemplo
  • plugins#1492: [firebase_analytics] Prueba de integración inicial
  • plugins#896: [firebase-analytics] Habilitar soporte para setAnalyticsCollectionEnabled en iOS
  • plugins#1159: [firebase_auth] Habilitar inicio de sesión sin contraseña
  • plugins#1487: [firebase_auth] Migrar FlutterAuthPlugin desde API obsoletas
  • plugins#1443: [firebase_core] Usar Gradle BoM con firebase_core
  • plugins#1427: [firebase_crashlytics] No romper el formato del registro de depuración.
  • plugins#1437: [firebase_crashlytics] Solución para inicializar Fabric
  • plugins#1096 :[firebase_database] Devolver mensaje de error de DatabaseError#toString()
  • plugins#1532: [firebase_messaging] eliminar instrucción de documentación obsoleta
  • plugins#1405: [firebase_messaging] Paso adicional para iOS
  • plugins#1353: [firebase_messaging] Actualizar ejemplo
  • plugins#1223: [firebase_ml_vision] Corregir fallo al escanear código QR de URL en iOS
  • plugins#1514: [firebase_remote_config] Pruebas de integración iniciales
  • plugins#815: [google_maps_flutter] agrega soporte para icono personalizado desde una matriz de bytes (PNG)
  • plugins#1229: [google_maps_flutter] Las API de Marker ahora están basadas en widgets (Android)
  • plugins#1421: [in_app_purchase] hacer API de pago unificadas
  • plugins#1380: [in_app_purchase] cargar compra
  • flutter#26329: IAP: Comprar una suscripción de renovación automática
  • flutter#26331: IAP: Comprar una suscripción sin renovación
  • flutter#26326: IAP: Cargar compras anteriores
  • plugins#1249: [in_app_purchase] cola de pagos dart ios
  • flutter#26327: IAP: Comprar un desbloqueo
  • flutter#26328: IAP: Comprar un consumible
  • flutter#29837: Image_picker parpadea cuando barcode_scan e image_picker se usan juntos
  • flutter#17950: El plugin Image_picker falla si la actividad de Flutter se elimina mientras se muestra la nativa
  • flutter#18700: [image_picker] Fallo en Galaxy S5 y Note 4 al intentar usar la cámara
  • plugins#1372: [image_picker] corregir "Botón de cancelar no visible en la galería si se accedió primero a la cámara"
  • plugins#1471: [image_picker] Corregir ruta no válida devuelta desde Google Fotos
  • flutter#29422: error de image_picker: Denegación de permiso
  • plugins#1237: [share] Se cambió compileSdkVersion del plugin share a 28
  • plugins#1373: [shared_preferences] Agregar método contains
  • plugins#1470: [video_player] Android: Se agregó event.put("event", "completed"); faltante
  • flutter#25329: [WebView] Permitir que el webview tome el control cuando una URL está a punto de cargarse

Cambios en herramientas

#

Por último, pero ciertamente no menos importante, realizamos una serie de cambios de herramientas en los repositorios principales de Flutter para mejorar la experiencia del desarrollador, particularmente cuando se trata de mejorar el rendimiento de Hot Reload (¡y pensabas que antes era rápido!).

  • flutter#29693: Usar la lista de fuentes del compilador para rastrear archivos invalidados para Hot Reload.
  • flutter#28152: Mejorar el rendimiento de Hot Reload
  • flutter#29494: trabajo inicial en el script generador de cobertura para la herramienta
  • flutter#31171: Permitir deshabilitar todas las cachés de huellas digitales a través de variable de entorno
  • flutter#31073: Fuchsia paso 1: agregar archivo de versión de SDK y descarga de artefactos
  • flutter#31064: Agregar ordenamiento al comando flutter version
  • flutter#31063: Descargar y manejar la versión de producto del SDK parcheado de flutter
  • flutter#31074: hacer opcional la opción flutterProject de CoverageCollector
  • flutter#30818: Nueva bandera para flutter drive para omitir la instalación de una aplicación limpia en el dispositivo
  • flutter#30867: Agregar alternador para debugProfileWidgetBuilds
  • flutter#27034: Archivo .gitignore de plantilla de paquete actualizado
  • flutter#30115: Reenviar comandos pub faltantes
  • flutter#30254: Reaplicar: Asegurar que flutter run/drive/test/update_packages solo descargue los artefactos requeridos
  • flutter#30153: Permitir deshabilitar comandos experimentales y dispositivos en la rama estable
  • flutter#30428: Actualizar comando de reparación para Arch Linux

Además, los plugins de IDE para Flutter han tenido una serie de actualizaciones desde la última versión estable de Flutter.

Actualización dinámica (también conocida como Code Push)

#

Como nota final, estamos casi a mitad de año, momento de reevaluar las áreas donde podemos tener el mayor impacto, por lo que hemos decidido retirar los planes para actualizaciones dinámicas (también conocidas como code push) de nuestra hoja de ruta para 2019. Si estás interesado en las razones, puedes leer la explicación detallada. Abandonar este trabajo nos permite aumentar nuestro enfoque en la calidad, así como en nuestros experimentos en Flutter para web y Flutter para escritorio.

Lista completa de problemas

#

Puedes ver la lista completa de PRs enviados en esta versión.