Xamarin.forms: [Error] La aplicación Shell parpadea en la navegación hacia atrás

Creado en 20 nov. 2019  ·  58Comentarios  ·  Fuente: xamarin/Xamarin.Forms

Descripción

La animación de navegación parpadea y muestra brevemente una pantalla negra cuando se vuelve a navegar en una aplicación Shell.

Pasos para reproducir

Navegar hacia atrás.

Comportamiento esperado

No parpadee.

Comportamiento real

Parpadeando.

Información básica

  • Versión con problema:
  • Última versión buena conocida:
  • IDE: VS 2019 16.3.9
  • Marcos de destino de la plataforma:

    • iOS: n / a

    • Android: 9.0

    • UWP: n / a

  • Versión de la biblioteca de soporte de Android:
  • Paquetes Nuget:
  • Dispositivos afectados: Samsung Galaxy S8, S10

Capturas de pantalla

Video en cámara lenta del problema: https://i.imgur.com/bWAVzgY.mp4

Enlace de reproducción

shell 3 in-progress Android bug

Comentario más útil

Probé el nuget con la muestra de xaminals

https://github.com/xamarin/Xamarin.Forms/issues/6294

Y con este nuget el parpadeo ya no ocurre

Todos 58 comentarios

Una solución temporal, si realiza una anulación, sin animación no hay parpadeo.

protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}

¡Hola @ z07713! ¡Gracias por informar y agregar el video, así como una solución alternativa! Buen trabajo 😄

¿Podrías por casualidad también armar un pequeño proyecto de reproducción para descartar que esto sea causado por cualquier otro código que no sea simplemente navegar?

Además, ¿probaste esto en iOS y viste lo mismo? ¿O no lo probaste en iOS?

¡Gracias!

¡Hola @ z07713! ¡Gracias por informar y agregar el video, así como una solución alternativa! Buen trabajo 😄

¿Podrías por casualidad también armar un pequeño proyecto de reproducción para descartar que esto sea causado por cualquier otro código que no sea simplemente navegar?

Además, ¿probaste esto en iOS y viste lo mismo? ¿O no lo probaste en iOS?

¡Gracias!

Hola @jfversluis , gracias por la respuesta, aquí está la reproducción que solicitó: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

Además, no he probado esto en IOS ni tengo la capacidad de hacerlo, no tengo una Mac.

¡Genial, gracias @ z07713 !

Definitivamente veo que esto sucede, gracias por la reproducción.

Vale la pena señalar que la solución
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Solo funciona cuando se aplica dentro del código detrás de AppShell.xaml y no funciona cuando se coloca en páginas separadas. Creo que esto se relaciona con 7072

Como campo de trabajo, anular OnPopAsync de ShellSection para deshabilitar la animación podría ser más específico.

public class CustomShellSection : ShellSection
{
    protected override Task<Page> OnPopAsync(bool animated)
    {
        return base.OnPopAsync(false); // ignore the parameter
    }
}

@jfversluis para mí, esto parece funcionar correctamente en iOS (13.3).

Deshabilitar la animación no es una opción para nosotros y recién estábamos finalizando nuestro lanzamiento. Tendremos que retroceder a 4.3, lo cual es malo, ya que reabrirá algunos errores principalmente en el shell y el carrusel.

Probablemente tendremos que deshabilitar algunas funciones y lanzarlas sin ellas, lo cual es triste dado el tiempo que trabajamos en ellas.

¿Existe alguna solución alternativa además de deshabilitar la animación?

¿Alguna posibilidad de que esto se resuelva antes del 16 de enero? Sería grandioso. Gracias.

Tenga en cuenta que la animación PopModal no tiene el problema.

Siento escuchar eso @jonx. Incluso si lo arreglamos antes del 16 de enero, es poco probable que forme parte de un NuGet que lancemos antes. Si esto es algo que bloquea su lanzamiento, no apostaría por esa opción. Lo siento por eso.

Está bien @jfversluis , lo entiendo, gracias por tu comentario. Solo tendremos que retrasar nuestro lanzamiento.
@ z07713 ¿hay alguna manera de que puedas compartir tu muestra nuevamente? Ya no puedo acceder a tus enlaces. Me gustaría ver si es realmente el mismo problema que tengo porque para mí, puedo ver brevemente aparecer otra pantalla de mi aplicación en lugar de una pantalla negra (está en el contexto de un asistente; cuando abro la página actual, Veo brevemente la primera página de mi asistente). Gracias.
@jfversluis , ¿tendría una idea de qué cambio en 4.4 introdujo este problema? Me gustaría ver si hay una manera de solucionar temporalmente el problema. Gracias.

Bajé a 4.3.991250 y todavía tengo el problema, solo que un poco menos obvio (porque es más rápido, más rápido, supongo). Haré más pruebas si @ z07713 puede compartir su ejemplo ...

@jonx ahí tienes: https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

además, tiene 4.3.0.991211 Forms instalados: /

Estoy teniendo este problema también. He intentado poner la línea:
protegido override bool OnBackButtonPressed () {Current.Navigation.PopAsync (false); devuelve verdadero; }
en mi appShell.xaml.cs y el parpadeo todavía está presente. Si alguien pudiera ayudarme a entender el trabajo alrededor ... ¡Sería genial!

También tenemos el mismo problema, es bastante molesto, si quieres usar el shell con animaciones. : |

También tengo el mismo problema, y ​​la solución no funcionó para mí. Recibí comentarios de los usuarios de que esto parece bastante desagradable, por lo que tendremos que retrasar el lanzamiento de nuestra aplicación hasta que se solucione.

¿Cuándo se solucionará el error?

Me enfrento al mismo problema en Windows UWP cuando navego a la página de contenido usando Navigation.PushAsyc(<Page Object>,false)

¿Alguna solución alternativa?

@jfverslu ¿hay alguna actualización sobre esto?

@ z07713 Me temo que todavía no, ¡lo siento! ¿Descubrió algún hallazgo nuevo sobre esto por casualidad que pudiera ayudarnos?

Entonces, el equipo de Xamarin permite que un problema parpadeante que destruye absolutamente la UX esté en el repositorio durante meses. Esto es una locura para mí. Actualmente me enfrento a este problema y lamento no haberme convertido en nativo porque me duele la cabeza al navegar por mi propia aplicación.

@jfversluis Hice algunas pruebas, espero que esto les ayude a encontrar el error:

Para la reproducción utilicé la plantilla estándar de Visual Studio que usa Xamarin Forms 4.3.0.908675
No hice cambios al código. Sin parpadeo en la aplicación de plantilla estándar.

Después de eso, actualicé el paquete Xamarin Forms a 4.3.0.947036
Sin cambios en el código. El parpadeo no aparece en el Emulador, solo en un dispositivo Android real (en mi caso Samsung Galaxy A40), tampoco aparece en el Simulador de iOS o iPhone 8.

Así que debe haber un cambio entre estas dos versiones que provoque el parpadeo.

¡Increíble! @AndreasLichtsinn

@jfversluis Lo único que vale la pena mencionar es que dejamos de usar shell por completo debido a esto: /

¡Gracias por tu investigación sobre esto @AndreasLichtsinn! Información muy valiosa :)

Una cosa más que encontré para el problema del parpadeo.
Cuando creo una aplicación Shell con la plantilla, si cambio la navegación (en el código detrás de ItemsPage) de "Navigation.PushAsync (new ItemDetailPage ())" a "Shell.Current.GoToAsync (" itemDetailPage ", false) ", luego veré el parpadeo en el dispositivo Android. He comprobado esto en las versiones 4.3.xxx originales y 4.5.xxx más recientes de Xamarin.Forms.

Para ser realmente honesto, aunque hay algunos problemas de navegación en la navegación de Shell (como la única navegación de página a página, el paso de parámetros, etc.), este error en realidad está bloqueando mi lanzamiento, y hará que Shell sea completamente inutilizable. ¡Así que corrija el error lo antes posible!

Buenos días, tengo los mismos problemas descritos anteriormente. Me gustaría saber si hay alguna solución a la vista.

Los mismos problemas aquí. Desactivar la animación no lo veo como una solución alternativa, especialmente porque no hay una manera fácil de hacerlo con el botón Atrás.

¡Espero que esto se solucione rápidamente!

Puedo confirmar que no hay parpadeo en la versión 4.3.0.90867.

No probé la versión anterior, sin embargo, el problema persiste en la versión 4.5.0.356

El problema persiste en la última versión estable.

Los mismos problemas aquí. Desactivar la animación no lo veo como una solución alternativa, especialmente porque no hay una manera fácil de hacerlo con el botón Atrás.

¡Espero que esto se solucione rápidamente!

@kevinjpetersen, esto solo sucederá si puede solucionarlo lo antes posible. Está abierto desde mediados de noviembre del año pasado.

tu mejor ayuno! La solución es probar los resultados de @tdamir con v 4.3.0.90867.

Más información: el error se introduce en esta confirmación: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Parece que si comento esta línea:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
entonces no hay parpadeo.

Alguien podría investigar esto que tenga más experiencia que yo ...

Lo depuré y si primero elimino la página y luego llamo a la navegación, estará bien, sin parpadear.

Entonces aquí: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Cambia esto:

            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;
            RemovePage(page);

a esto:

            RemovePage(page);
            _navigationRequested?.Invoke(this, args);
            if (args.Task != null)
                await args.Task;

@tdamir muy buen hallazgo!

Dado que su hallazgo es preciso args.Task probablemente debido al cambio de contexto de UI-Thread-UI.

La tarea siempre se espera

https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L302

aunque en Android el args.Task en este método es siempre un Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
pero creo que encontré al culpable más probable
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

está cambiando el color de fondo durante la navegación (no estoy seguro si siempre). ¿por qué?

También parece que el parpadeo solo ocurre cuando está dentro de una pestaña.

Muchas pruebas por hacer.

¡ Buen trabajo

@ahmedalejo ¡ Genial fidings! Solo quiero publicar esto, que no creo que sean solo pestañas. Tengo el mismo parpadeo, y todo lo que tengo es esto en mi AppShell (también conocido como no TabBar):

<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:d="http://xamarin.com/schemas/2014/forms/design"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       xmlns:views="clr-namespace:MyApp.Views"
       mc:Ignorable="d"
       Title="MyApp"
       Visual="Material"
       Shell.BackgroundColor="{StaticResource JFBlack}"
       Shell.TitleColor="{StaticResource JFWhite}"
       Shell.ForegroundColor="{StaticResource JFWhite}"
       FlyoutBehavior="Disabled"
       Shell.TabBarIsVisible="False"
       x:Class="MyApp.AppShell">

    <ShellContent Route="login">
        <views:LoginPage />
    </ShellContent>
    <ShellContent Route="overview">
        <views:OverviewPage />
    </ShellContent>

</Shell>

@ahmedalejo Sí, la parte de cambio de color es extraña, pero si la

Parece que https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499 debe llamarse antes de navegar.

Hola @PureWeen y @rmarinho

¿Tiene una idea de por qué llamar a SendAppearanceChange() continuación?
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

hace que el estallido parpadee?

¿Alguien podría aconsejarme sobre una solución?

La solucion con

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

no está trabajando.

Encontré la solución alternativa (gracias a https://github.com/xamarin/Xamarin.Forms/issues/8581#issuecomment-569583965)

    public class CustomTab : Tab
    {
        protected override Task<Page> OnPopAsync(bool animated)
        {
            // temporary workaround while https://github.com/xamarin/Xamarin.Forms/issues/8581 not fixed
            return base.OnPopAsync(animated: false); 
        }
    }

Y luego use CustomTab en XAML.

La solución a continuación solo funciona con la navegación del botón de retroceso por hardware (y no funciona en otros casos de navegación hacia atrás):

protected override bool OnBackButtonPressed() 
{
  Current.Navigation.PopAsync(false); return true;
}

Gracias @pfedotovsky, tuve la corazonada de que también podría tener que ver con la navegación por pestañas.

También nos sucede a nosotros, desde la versión 4.3, el parpadeo ha existido en Android.

Acabo de descubrir que este error está en su primer aniversario de navegación [Shell] - parpadeando # 5755

El mismo problema aquí cuando retrocede, pantalla parpadeante.

Por ejemplo:
https://github.com/mallibone/ShellLoginSample

Gracias por la exploración @ahmedalejo , hizo que este fuera muy fácil de rastrear y arreglar

https://github.com/xamarin/Xamarin.Forms/pull/10158

Una vez finalizada la compilación, si alguien quiere probar los nugets y avíseme si el problema se resuelve, sería útil

https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results

Probé el nuget con la muestra de xaminals

https://github.com/xamarin/Xamarin.Forms/issues/6294

Y con este nuget el parpadeo ya no ocurre

@PureWeen Ok, hice una prueba:

Creé una nueva aplicación de muestra de Shell con Xamarin Forms 4.3.0.908675 -> Sin parpadeo
Luego actualicé a la última versión estable 4.5.0.495 -> Flickering
Luego actualicé a su versión más reciente 4.6.0.1693 -> Sin parpadeo

¡Buen trabajo! Espero que otros puedan confirmar esto.

@PureWeen Ok, hice una prueba:

Creé una nueva aplicación de muestra de Shell con Xamarin Forms 4.3.0.908675 -> Sin parpadeo
Luego actualicé a la última versión estable 4.5.0.495 -> Flickering
Luego actualicé a su versión más reciente 4.6.0.1693 -> Sin parpadeo

¡Buen trabajo! Espero que otros puedan confirmar esto.

@AndreasLichtsinn no puede encontrar Xamarin Forms 4.6.0.1693

@PureWeen Ok, hice una prueba:

Creé una nueva aplicación de muestra de Shell con Xamarin Forms 4.3.0.908675 -> Sin parpadeo
Luego actualicé a la última versión estable 4.5.0.495 -> Flickering
Luego actualicé a su versión más reciente 4.6.0.1693 -> Sin parpadeo

¡Buen trabajo! Espero que otros puedan confirmar esto.

@AndreasLichtsinn ¡Tampoco puedo encontrar la compilación 1693! Además, el 4.7.0.531 nocturno todavía parpadea: /

@angelru @RsZoli Está en los artefactos publicados que PureWeen publicó
image

@angelru ¡ Gracias por probar!

@angelru ¡ Gracias por probar!

@PureWeen No pude probar, no puedo descargar

Oh, estabas citando a @AndreasLichtsinn :-)

¡Gracias @AndreasLichtsinn por las pruebas!

@angelru
Ir al enlace:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Haga clic aquí:
image
Entonces aqui:
image
Luego, descomprima el zip y cree una fuente de paquete nuget local en esta carpeta:
image
Luego elija esta fuente de paquete local e instálelo desde allí:
image

@angelru
Ir al enlace:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Haga clic aquí:
image
Entonces aqui:
image
Luego, descomprima el zip y cree una fuente de paquete nuget local en esta carpeta:
image
Luego elija esta fuente de paquete local e instálelo desde allí:
image

¡¡¡Muchas gracias!!! ¡funciona!

Puedo confirmar que no hay parpadeo en Xamarin Forms 4.6.0.1693.

¡Gracias!

cerrado por # 10158

Tengo el mismo problema con los últimos formularios de Xamarin 4.8. Identifiqué que en iOS las páginas que tienen etiquetas con TextType = 'Html' causan el problema ...

Abrí una nueva edición. N.º 12385

¿Fue útil esta página
0 / 5 - 0 calificaciones