Xamarin.forms: [Bug] Aplicativo shell piscando na navegação traseira

Criado em 20 nov. 2019  ·  58Comentários  ·  Fonte: xamarin/Xamarin.Forms

Descrição

A animação de navegação está piscando, exibindo brevemente uma tela preta ao navegar de volta em um aplicativo Shell.

Passos para reproduzir

Navegue de volta.

Comportamento esperado

Não pisque.

Comportamento Real

Cintilando.

Informação básica

  • Versão com problema:
  • Última versão válida:
  • IDE: VS 2019 16.3.9
  • Estruturas de destino da plataforma:

    • iOS: n / a

    • Android: 9.0

    • UWP: n / a

  • Versão da Biblioteca de Suporte Android:
  • Pacotes Nuget:
  • Dispositivos afetados: Samsung Galaxy S8, S10

Capturas de tela

Vídeo em câmera lenta sobre o problema: https://i.imgur.com/bWAVzgY.mp4

Link de reprodução

shell 3 in-progress Android bug

Comentários muito úteis

Eu testei o nuget com a amostra xaminals

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

E com esta pepita a oscilação não ocorre mais

Todos 58 comentários

Uma solução temporária, se você substituir, sem animação não há cintilação!

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

Ei @ z07713! Obrigado por relatar e adicionar o vídeo, bem como uma solução alternativa! Bom trabalho 😄

Você por acaso também seria capaz de montar um pequeno projeto de reprodução para descartar que isso seja causado por qualquer outro código além de simplesmente navegar?

Além disso, você tentou fazer isso no iOS e viu a mesma coisa? Ou não tentou no iOS?

Obrigado!

Ei @ z07713! Obrigado por relatar e adicionar o vídeo, bem como uma solução alternativa! Bom trabalho 😄

Você por acaso também seria capaz de montar um pequeno projeto de reprodução para descartar que isso seja causado por qualquer outro código além de simplesmente navegar?

Além disso, você tentou fazer isso no iOS e viu a mesma coisa? Ou não tentou no iOS?

Obrigado!

Olá @jfversluis , obrigado pela resposta, aqui está a reprodução que você pediu: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

Além disso, não tentei fazer isso no IOS nem tenho a capacidade para fazer isso, não tenho um Mac.

Incrível, obrigado @ z07713 !

Definitivamente, vejo isso acontecendo, obrigado pela reprodução.

Pode ser interessante notar que a solução alternativa
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Só funciona quando aplicado dentro do código por trás do AppShell.xaml e não funciona quando colocado em páginas separadas. Eu acho que isso se relaciona com 7072

Como área de trabalho, substituir OnPopAsync de ShellSection para desativar a animação pode ser mais direcionado.

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

@jfversluis para mim isso parece estar funcionando corretamente no iOS (13.3).

Desativar a animação não é uma opção para nós e estávamos apenas finalizando nosso lançamento. Teremos que reverter para 4.3, o que é ruim, pois irá reabrir alguns bugs principalmente no shell e no carrossel.

Provavelmente teremos que desabilitar alguns recursos e lançar sem eles, o que é triste, dado o tempo que trabalhamos neles.

Existe alguma solução alternativa além de desativar a animação?

Alguma chance disso ser resolvido antes de 16 de janeiro? Seria fantástico. Obrigado.

Observe, a animação PopModal não tem o problema.

Lamento ouvir isso @jonx. Mesmo que o consertássemos antes de 16 de janeiro, é improvável que faça parte de um NuGet que lançaremos antes disso. Se isso é algo que bloqueia sua liberação, eu não apostaria nessa opção. Me desculpe por isso.

Está tudo bem @jfversluis , eu entendo, obrigado pelo seu comentário. Só teremos que atrasar nosso lançamento.
@ z07713 existe uma maneira de você compartilhar sua amostra novamente, não consigo mais acessar seus links. Eu gostaria de ver se é realmente o mesmo problema que eu tenho, porque para mim, posso ver brevemente outra tela do meu aplicativo em vez de uma tela preta (é no contexto de um assistente; quando eu abro a página atual, Eu vejo a primeira página do meu assistente brevemente). Obrigado.
@jfversluis , você teria uma idéia de qual mudança no 4.4 introduziu esse problema? Gostaria de ver se há uma maneira de contornar temporariamente o problema. Obrigado.

Fiz o downgrade para 4.3.991250 e ainda tenho o problema, apenas um pouco menos óbvio (porque é mais rápido - mais rápido, suponho). Farei mais testes se @ z07713 puder compartilhar seu exemplo ...

@jonx aí está: https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

além disso, tem 4.3.0.991211 Forms instalado: /

Eu tambem tenho esse problema. Eu tentei colocar a linha:
override protegido bool OnBackButtonPressed () {Current.Navigation.PopAsync (false); return true; }
em meu appShell.xaml.cs e o Flashing ainda está presente. Se alguém pudesse me ajudar a entender o trabalho ao redor ... Isso seria incrível!

Nós temos o mesmo problema também, é muito chato, se você quiser usar o shell com animações. : |

Eu também tenho o mesmo problema, e também a solução alternativa não funcionou para mim. Recebi o feedback dos usuários de que isso parece muito desagradável, então teremos que atrasar o lançamento de nosso aplicativo até que isso seja corrigido.

quando o erro será corrigido?

Estou enfrentando o mesmo problema no Windows UWP ao navegar para a página de conteúdo usando Navigation.PushAsyc(<Page Object>,false)

Alguma solução alternativa para isso?

@jfversluis alguma atualização sobre isso?

@ z07713 Infelizmente ainda não, desculpe! Por acaso você descobriu alguma descoberta nova sobre isso que possa nos ajudar?

Portanto, a equipe do Xamarin permite que um problema oscilante que destrói absolutamente a UX fique no repositório por meses. Isso é uma loucura para mim. Atualmente estou enfrentando esse problema e me arrependo de não ter me tornado um nativo, pois estou tendo dor de cabeça ao navegar em meu próprio aplicativo.

@jfversluis Eu fiz alguns testes, espero que isso ajude vocês a encontrar o bug:

Para a reprodução, usei o modelo padrão do Visual Studio que usa o Xamarin Forms 4.3.0.908675
Eu não fiz alterações no código. Sem oscilações no aplicativo de modelo padrão.

Depois disso, eu atualizei o pacote Xamarin Forms para 4.3.0.947036
Sem alterações no código. A cintilação não aparece no emulador, apenas em um dispositivo Android real (no meu caso Samsung Galaxy A40), também não aparece no simulador iOS ou iPhone 8.

Portanto, deve haver uma mudança entre essas duas versões que causa a oscilação.

Impressionante! @AndreasLichtsinn

@jfversluis A única coisa que vale a pena mencionar é que paramos completamente de usar o shell por causa disso: /

Obrigado por sua investigação sobre este @AndreasLichtsinn! Informações muito valiosas :)

Mais uma coisa que descobri sobre o problema do piscar.
Quando eu crio um aplicativo Shell com o modelo, se eu alterar a navegação (no código por trás da ItemsPage) de "Navigation.PushAsync (new ItemDetailPage ())" para "Shell.Current.GoToAsync (" itemDetailPage ", false) ", então verei piscar no dispositivo Android. Eu verifiquei isso no 4.3.xxx original e nas versões 4.5.xxx mais recentes do Xamarin.Forms.

Para ser realmente honesto, embora haja alguns problemas de navegação do Shell (como a única navegação de página a página, o passo de parâmetro etc ...), este bug está bloqueando meu lançamento, e fará com que o Shell seja completamente inutilizável. Portanto, corrija o bug o mais rápido possível !!!

Bom dia, estou com os mesmos problemas descritos acima. Gostaria de saber se existe alguma solução à vista?

Mesmos problemas aqui. Não vejo como uma solução alternativa para desativar a animação, especialmente porque não há uma maneira fácil de fazer isso com o botão Voltar.

Espero que isso seja corrigido rapidamente!

Posso confirmar que não há piscar na versão 4.3.0.90867.

Não testei a versão acima, no entanto, o problema ainda persiste na versão 4.5.0.356

O problema ainda persiste na última versão estável.

Mesmos problemas aqui. Não vejo como uma solução alternativa para desativar a animação, especialmente porque não há uma maneira fácil de fazer isso com o botão Voltar.

Espero que isso seja corrigido rapidamente!

@kevinjpetersen isso só acontecerá se você for capaz de consertar o mais

seu melhor rápido! A correção é testar as descobertas do 4.3.0.90867.

Mais algumas informações: o bug é introduzido neste commit: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Parece que se eu comentar esta linha:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
então não há piscar.

Alguém poderia investigar isso se tivesse mais experiência do que eu ...

Eu depurei isso e se primeiro remover a página e, em seguida, chamar a navegação, tudo ficará bem - sem piscar.

Portanto, aqui: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Mude isso:

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

para isso:

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

@tdamir achado muito bom!

Considerando que sua descoberta é precisa args.Task é esperado, provavelmente causado por mudança de contexto de UI-Thread-UI.

A tarefa é sempre esperada

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

mesmo que no Android o args.Task neste método seja sempre um Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
mas acho que encontrei o culpado mais provável
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

está mudando a cor de fundo durante a navegação (nem sempre)! porque?

Parece também que o piscar ocorre apenas quando dentro de uma guia.

Muitos testes a fazer.

Excelente trabalho @tdamir e @ahmedalejo! :)

@ahmedalejo Cool fidings! Só quero colocar isso aí, acho que não são apenas guias. Tenho a mesma cintilação e tudo o que tenho é isso no meu AppShell (também conhecido 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 Sim, a parte da mudança de cor é estranha, mas se eu removê-la, ela ainda pisca.

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

Olá @PureWeen e @rmarinho

você teria uma ideia por que chamar SendAppearanceChange() abaixo
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

faz com que o pop pisque?

Alguém poderia aconselhar sobre uma solução alternativa?

A solução com

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

não está funcionando.

Eu encontrei a solução alternativa (graças 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); 
        }
    }

Em seguida, use o CustomTab em XAML.

A correção abaixo só funciona com a navegação do botão Voltar do hardware (e não funciona em outros casos de navegação traseira):

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

Obrigado @pfedotovsky, tive um palpite de que também pode ter a ver com a navegação por guias.

Acontece conosco também, desde 4.3 a cintilação existe no Android.

Acabei de descobrir que esse bug está no aniversário de um ano de navegação [Shell] - piscando # 5755

O mesmo problema aqui quando goback, tela piscando.

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

Obrigado pela exploração, @ahmedalejo, isso tornou este super fácil de rastrear e consertar

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

Assim que a construção estiver concluída, se alguém quiser testar os nugets e me avisar se o problema for resolvido, isso seria útil

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

Eu testei o nuget com a amostra xaminals

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

E com esta pepita a oscilação não ocorre mais

@PureWeen Ok, então fiz um teste:

Eu criei um novo aplicativo de amostra de Shell com Xamarin Forms 4.3.0.908675 -> Sem cintilação
Então eu atualizei para o mais recente estável 4.5.0.495 -> Piscando
Então eu atualizei para a sua versão mais recente 4.6.0.1693 -> Sem cintilação

Ótimo trabalho! Espero que outros possam confirmar isso.

@PureWeen Ok, então fiz um teste:

Eu criei um novo aplicativo de amostra de Shell com Xamarin Forms 4.3.0.908675 -> Sem cintilação
Então eu atualizei para o mais recente estável 4.5.0.495 -> Piscando
Então eu atualizei para a sua versão mais recente 4.6.0.1693 -> Sem cintilação

Ótimo trabalho! Espero que outros possam confirmar isso.

@AndreasLichtsinn não consegue encontrar o Formulários Xamarin 4.6.0.1693

@PureWeen Ok, então fiz um teste:

Eu criei um novo aplicativo de amostra de Shell com Xamarin Forms 4.3.0.908675 -> Sem cintilação
Então eu atualizei para o mais recente estável 4.5.0.495 -> Piscando
Então eu atualizei para a sua versão mais recente 4.6.0.1693 -> Sem cintilação

Ótimo trabalho! Espero que outros possam confirmar isso.

@AndreasLichtsinn também não consigo encontrar a versão 1693! Além disso, o 4.7.0.531 noturno ainda pisca: /

@angelru @RsZoli Está nos artefatos publicados que PureWeen postou
image

@angelru Obrigado por testar !!!!

@angelru Obrigado por testar !!!!

@PureWeen não consegui testar, não consigo baixar

Oh, você estava citando @AndreasLichtsinn :-)

Obrigado @AndreasLichtsinn pelo teste !!!

@angelru
Vá para o link:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Clique aqui:
image
Então aqui:
image
Em seguida, descompacte o zip e crie uma fonte de pacote nuget local para esta pasta:
image
Em seguida, escolha esta fonte de pacote local e instale-a a partir daí:
image

@angelru
Vá para o link:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Clique aqui:
image
Então aqui:
image
Em seguida, descompacte o zip e crie uma fonte de pacote nuget local para esta pasta:
image
Em seguida, escolha esta fonte de pacote local e instale-a a partir daí:
image

Muito obrigado!!! funciona!

Posso confirmar que não há oscilação no Xamarin Forms 4.6.0.1693.

Obrigado!

fechado por # 10158

Tenho o mesmo problema com os formulários 4.8 do Xamarin mais recentes. Identifiquei que no iOS as páginas que possuem rótulos com TextType = 'Html' causam o problema ...

Eu abri uma nova edição. # 12385

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Papirosnik picture Papirosnik  ·  3Comentários

suihanhbr picture suihanhbr  ·  3Comentários

Stensan picture Stensan  ·  3Comentários

EmilAlipiev picture EmilAlipiev  ·  3Comentários

joseluisct picture joseluisct  ·  3Comentários