Xamarin.forms: [Bug] L'application Shell scintille sur la navigation arrière

Créé le 20 nov. 2019  ·  58Commentaires  ·  Source: xamarin/Xamarin.Forms

La description

L'animation de navigation scintille, affichant brièvement un écran noir lors du retour dans une application Shell.

Étapes à suivre pour reproduire

Revenez en arrière.

Comportement prévisible

Ne scintille pas.

Comportement réel

Vacillant.

Informations de base

  • Version avec problème:
  • Dernière bonne version connue:
  • IDE: VS 2019 16.3.9
  • Cadres cibles de plate-forme:

    • iOS: n / a

    • Android: 9.0

    • UWP: n / a

  • Version de la bibliothèque de support Android:
  • Forfaits Nuget:
  • Appareils concernés: Samsung Galaxy S8, S10

Captures d'écran

Vidéo au ralenti du problème: https://i.imgur.com/bWAVzgY.mp4

Lien de reproduction

shell 3 in-progress Android bug

Commentaire le plus utile

J'ai testé la nuget avec l'échantillon de xaminals

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

Et avec cette pépite le scintillement ne se produit plus

Tous les 58 commentaires

Une solution temporaire, si vous faites un remplacement, sans animation, il n'y a pas de scintillement!

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

Hé @ z07713! Merci pour le rapport et l'ajout de la vidéo ainsi qu'une solution de contournement! Excellent travail 😄

Seriez-vous par hasard capable de monter un petit projet de reproduction pour exclure que cela soit causé par un autre code que la simple navigation?

Aussi, avez-vous essayé ceci sur iOS et vu la même chose? Ou pas essayé sur iOS?

Merci!

Hé @ z07713! Merci pour le rapport et l'ajout de la vidéo ainsi qu'une solution de contournement! Excellent travail 😄

Seriez-vous par hasard capable de monter un petit projet de reproduction pour exclure que cela soit causé par un autre code que la simple navigation?

Aussi, avez-vous essayé ceci sur iOS et vu la même chose? Ou pas essayé sur iOS?

Merci!

Hey @jfversluis , merci pour la réponse, voici la repro que vous avez demandée: https://drive.google.com/open?id=1WkGh6QwTOP380gX4RrRsksSGBoJNWeuc

De plus, je n'ai pas essayé cela sur IOS et je n'ai pas la possibilité de le faire, je ne possède pas de Mac.

Génial, merci @ z07713 !

Voyez certainement cela se produire, merci pour la repro.

Il pourrait être intéressant de noter que la solution de contournement
protected override bool OnBackButtonPressed() {Current.Navigation.PopAsync(false); return true;}
Ne fonctionne que lorsqu'il est appliqué à l'intérieur du code derrière AppShell.xaml et ne fonctionne pas lorsqu'il est placé sur des pages séparées. Je pense que cela concerne 7072

En tant que terrain de travail, il peut être plus ciblé de remplacer le OnPopAsync de ShellSection pour désactiver l'animation.

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

@jfversluis pour moi, cela semble fonctionner correctement sur iOS (13.3).

Désactiver l'animation n'est pas une option pour nous et nous étions juste en train de finaliser notre sortie. Nous devrons revenir à 4.3, ce qui est mauvais car cela rouvrira certains bogues principalement dans le shell et le carrousel.

Nous devrons probablement désactiver certaines fonctionnalités et les publier sans elles, ce qui est triste compte tenu du temps que nous avons travaillé dessus.

Existe-t-il une solution de contournement en plus de désactiver l'animation?

Y a-t-il une chance que cela soit résolu avant le 16 janvier? Ce serait génial. Merci.

Notez que l'animation PopModal n'a pas le problème.

Désolé d'entendre ça @jonx. Même si nous devions le réparer avant le 16 janvier, il est peu probable qu'il fasse partie d'un NuGet que nous publions avant cette date. Si c'est quelque chose qui bloque votre sortie, je ne parierais pas sur cette option. Désolé pour ça.

C'est bon @jfversluis , je comprends, merci pour votre commentaire. Nous devrons simplement retarder notre sortie.
@ z07713 est-il un moyen pour vous de partager à nouveau votre échantillon, je ne peux plus accéder à vos liens. J'aimerais voir si c'est vraiment le même problème que j'ai parce que pour moi, je peux voir brièvement apparaître un autre écran de mon application au lieu d'un écran noir (c'est dans le contexte d'un assistant; quand je fais apparaître la page actuelle, Je vois brièvement la première page de mon assistant). Merci.
@jfversluis auriez-vous une idée de quel changement dans 4.4 a introduit ce problème? J'aimerais voir s'il existe un moyen de contourner temporairement le problème. Merci.

J'ai rétrogradé à 4.3.991250 et j'ai encore le problème, juste un peu moins évident (parce que c'est plus rapide - plus rapide, je suppose). Je ferai plus de tests si @ z07713 peut partager son exemple ...

@jonx , https://drive.google.com/open?id=19apVlQS0TafFeBT16aCfzvtvCwcweVgS

également, il a 4.3.0.991211 Forms installés: /

J'ai aussi ce problème. J'ai essayé de mettre la ligne:
protected override bool OnBackButtonPressed () {Current.Navigation.PopAsync (false); retourne vrai; }
dans mon appShell.xaml.cs et le clignotement est toujours présent. Si quelqu'un pouvait m'aider à comprendre le travail autour ... Ce serait génial!

Nous avons également le même problème, c'est assez ennuyeux, si vous voulez utiliser le shell avec des animations. : |

J'ai également le même problème, et la solution de contournement n'a pas fonctionné pour moi. J'ai reçu les commentaires des utilisateurs selon lesquels cela semble assez désagréable, nous devrons donc retarder le déploiement de notre application jusqu'à ce que cela soit corrigé.

quand l'erreur sera-t-elle corrigée?

Je rencontre le même problème dans Windows UWP lors de la navigation vers la page de contenu en utilisant Navigation.PushAsyc(<Page Object>,false)

Une solution de contournement pour cela?

@jfversluis une mise à jour à ce sujet?

@ z07713 J'ai bien peur que non, désolé! Avez-vous découvert par hasard de nouvelles découvertes à ce sujet qui pourraient nous aider?

L'équipe Xamarin laisse donc un problème de scintillement qui détruit absolument l'UX dans le dépôt pendant des mois. C'est fou pour moi. Je suis actuellement confronté à ce problème et je regrette de ne pas être devenu natif car j'ai mal à la tête en naviguant dans ma propre application.

@jfversluis J'ai fait quelques tests, j'espère que cela vous aidera à trouver le bogue:

Pour la reproduction, j'ai utilisé le modèle Visual Studio standard qui utilise Xamarin Forms 4.3.0.908675
Je n'ai apporté aucune modification au code. Pas de scintillement dans l'application de modèle standard.

Après cela, j'ai mis à niveau le package Xamarin Forms vers 4.3.0.947036
Aucune modification du code. Le scintillement n'apparaît pas dans Emulator, uniquement sur un vrai appareil Android (dans mon cas, le Samsung Galaxy A40), il n'apparaît pas non plus sur iOS Simulator ou iPhone 8.

Il doit donc y avoir un changement entre ces deux versions qui provoque le scintillement.

Impressionnant! @AndreasLichtsinn

@jfversluis La seule chose qui mérite d'être mentionnée est que nous avons complètement arrêté d'utiliser shell pour cette raison: /

Merci pour votre enquête sur ce @AndreasLichtsinn! Informations très précieuses :)

Une dernière chose que j'ai trouvée pour le problème du clignotement.
Lorsque je crée une application Shell avec le modèle, si je change la navigation (dans le code derrière la ItemsPage) de "Navigation.PushAsync (new ItemDetailPage ())" à "Shell.Current.GoToAsync (" itemDetailPage ", false) ", puis je verrai le clignotement sur l'appareil Android. J'ai vérifié cela sur les versions 4.3.xxx d'origine et les dernières versions 4.5.xxx de Xamarin.Forms.

Pour être vraiment honnête, bien qu'il y ait quelques problèmes de navigation dans la navigation Shell (comme la seule navigation de page à page, la passe de paramètre, etc.), ce bogue bloque en fait ma version, et cela rendra Shell totalement inutilisable. Veuillez donc corriger le bug le plus rapidement possible !!!

Bonjour, j'ai les mêmes problèmes décrits ci-dessus. Je voudrais savoir s'il y a une solution en vue?

Mêmes problèmes ici. Désactiver l'animation que je ne vois pas vraiment comme une solution, d'autant plus qu'il n'y a pas de moyen facile de le faire avec le bouton Back Pop.

J'espère que cela sera résolu rapidement!

Je peux confirmer qu'il n'y a pas de clignotement dans la version 4.3.0.90867.

N'a pas testé la version ci-dessus, mais le problème persiste dans la version 4.5.0.356

Le problème persiste dans la dernière version stable.

Mêmes problèmes ici. Désactiver l'animation que je ne vois pas vraiment comme une solution, d'autant plus qu'il n'y a pas de moyen facile de le faire avec le bouton Back Pop.

J'espère que cela sera résolu rapidement!

@kevinjpetersen cela ne se produira que si vous êtes en mesure de le réparer dès que possible. Il est ouvert depuis la mi-novembre de l’année dernière.

votre meilleur rapide! Le correctif consiste à essayer les découvertes 4.3.0.90867.

Quelques informations supplémentaires: le bogue est introduit dans ce commit: https://github.com/xamarin/Xamarin.Forms/commit/2b4ccdc88f8db7a2a0b78a1adf3428125eb677b5

Il semble que si je commente cette ligne:
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499
alors il n'y a pas de clignotement.

Quelqu'un pourrait examiner cela qui a plus d'expérience que moi

J'ai débogué cela et si je supprime d'abord la page, puis que j'appelle la navigation, tout ira bien - pas de clignotement.

Alors ici: https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L600

Change ça:

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

pour ça:

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

@tdamir très bonne trouvaille!

Donner votre conclusion est exacte @tdamir , le problème serait lorsque args.Task est attendu probablement en raison du changement de contexte depuis UI-Thread-UI.

La tâche est toujours attendue

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

même si sur Android, le args.Task dans cette méthode est toujours un Task.FromResult(...)
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L134
mais pense a trouvé le coupable le plus probable
https://github.com/xamarin/Xamarin.Forms/blob/7a52542d50797ccc69ae1d8dd84259190d96bdb4/Xamarin.Forms.Platform.Android/Renderers/ShellItemRendererBase.cs#L252 -L259

il change la couleur de fond lors de la navigation (pas sûr si toujours)! Pourquoi?

Il semble également que le clignotement ne se produit que dans un onglet.

Beaucoup de tests à faire.

Excellent travail @tdamir et @ahmedalejo! :)

@ahmedalejo Cool agitations! Je veux juste mettre ça là-bas, que je ne pense pas que ce ne soit que des onglets. J'ai le même scintillement, et tout ce que j'ai est ceci dans mon AppShell (aka. 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 Ouais, la partie de changement de couleur est bizarre mais si je la retire, elle clignote toujours.

Il ressemble à https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499 doit être appelé avant de naviguer.

Salut @PureWeen et @rmarinho

auriez-vous une idée de pourquoi appeler SendAppearanceChange() ci-dessous
https://github.com/xamarin/Xamarin.Forms/blob/1532d46f5fb6f219594015b80f8e5a2476512882/Xamarin.Forms.Core/Shell/ShellSection.cs#L499

fait clignoter le pop?

Quelqu'un pourrait-il conseiller sur une solution de contournement?

La solution avec

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

ne fonctionne pas.

J'ai trouvé la solution de contournement (grâce à 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); 
        }
    }

Et puis utilisez le CustomTab en XAML.

Le correctif ci-dessous ne fonctionne qu'avec la navigation du bouton retour matériel (et ne fonctionne pas dans les autres cas de navigation arrière):

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

Merci @pfedotovsky, j'avais une idée que cela pourrait également avoir à voir avec la navigation par onglets.

Cela nous arrive également, depuis la 4.3, le scintillement existe sur Android.

Je viens de découvrir que ce bogue est à l’occasion de son premier anniversaire.

Le même problème ici lorsque goback, écran scintillant.

Par exemple:
https://github.com/mallibone/ShellLoginSample

Merci pour l'exploration @ahmedalejo, cela a rendu celui-ci très facile à

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

Une fois la construction terminée, si quelqu'un veut tester les nugets et me faire savoir si le problème est résolu, ce serait utile

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

J'ai testé la nuget avec l'échantillon de xaminals

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

Et avec cette pépite le scintillement ne se produit plus

@PureWeen Ok donc j'ai fait un test:

J'ai créé un nouvel exemple d'application Shell avec Xamarin Forms 4.3.0.908675 -> Pas de scintillement
Ensuite, j'ai mis à jour vers la dernière version stable 4.5.0.495 -> Flickering
Ensuite, j'ai mis à jour votre dernière version 4.6.0.1693 -> Pas de scintillement

Bon travail! J'espère que d'autres pourront le confirmer.

@PureWeen Ok donc j'ai fait un test:

J'ai créé un nouvel exemple d'application Shell avec Xamarin Forms 4.3.0.908675 -> Pas de scintillement
Ensuite, j'ai mis à jour vers la dernière version stable 4.5.0.495 -> Flickering
Ensuite, j'ai mis à jour votre dernière version 4.6.0.1693 -> Pas de scintillement

Bon travail! J'espère que d'autres pourront le confirmer.

@AndreasLichtsinn ne peut pas trouver Xamarin Forms 4.6.0.1693

@PureWeen Ok donc j'ai fait un test:

J'ai créé un nouvel exemple d'application Shell avec Xamarin Forms 4.3.0.908675 -> Pas de scintillement
Ensuite, j'ai mis à jour vers la dernière version stable 4.5.0.495 -> Flickering
Ensuite, j'ai mis à jour votre dernière version 4.6.0.1693 -> Pas de scintillement

Bon travail! J'espère que d'autres pourront le confirmer.

@AndreasLichtsinn je ne trouve pas non plus la version 1693! De plus, le 4.7.0.531-nightly scintille toujours: /

@angelru @RsZoli C'est dans les artefacts publiés que PureWeen a posté
image

@angelru Merci d'avoir testé !!!!

@angelru Merci d'avoir testé !!!!

@PureWeen je n'ai pas pu tester, je ne peux pas télécharger

Oh vous citiez @AndreasLichtsinn :-)

Merci @AndreasLichtsinn pour les tests !!!

@angelru
Aller au lien:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Cliquez ici:
image
Alors ici:
image
Ensuite, décompressez le zip et créez une source de package nuget locale dans ce dossier:
image
Ensuite, choisissez cette source de package locale et installez-la à partir de là:
image

@angelru
Aller au lien:
https://dev.azure.com/xamarin/public/_build/results?buildId=16155&view=results
Cliquez ici:
image
Alors ici:
image
Ensuite, décompressez le zip et créez une source de package nuget locale dans ce dossier:
image
Ensuite, choisissez cette source de package locale et installez-la à partir de là:
image

Merci beaucoup!!! Ça marche!

Je peux confirmer qu'il n'y a pas de scintillement dans Xamarin Forms 4.6.0.1693.

Merci!

fermé par # 10158

J'ai le même problème avec les derniers formulaires Xamarin 4.8. J'ai identifié que sur iOS, les pages qui ont des étiquettes avec TextType = 'Html' causent le problème ...

J'ai ouvert un nouveau numéro. # 12385

Cette page vous a été utile?
0 / 5 - 0 notes