326 votes

Lignes jaunes sous les widgets de texte dans Flutter ?

L'écran principal de l'application n'a pas ce problème, tous les textes s'affichent correctement.

Cependant, sur la nouvelle écran, tous les widgets de texte ont une étrange ligne jaune/double ligne en dessous.

Des idées sur la raison de ce problème?

Lignes Jaunes

0 votes

Pouvez-vous ajouter votre code ?

65 votes

Je soupçonne que la raison est que vous n'avez pas de Scaffold sur cette page.

0 votes

@aziza Je pense que tu as raison. Cette page n'a pas d'échafaudage. Je soupçonnais que cela pouvait être le problème, mais je n'ai pas vérifié. Des idées sur pourquoi cela se produit quand je n'ai pas d'échafaudage ? Je ne savais pas que c'était nécessaire. Devrais-je quand même utiliser un échafaudage, même si je vais seulement utiliser le paramètre _body_?

383voto

Rémi Rousselet Points 45139

Le problème est d'avoir un Scaffold ou non. Scaffold est un assistant pour les applications Material ( AppBar, Drawer, ce genre de choses). Mais vous n'êtes pas obligé d'utiliser Material.

Ce qui vous manque, c'est une instance de DefaultTextStyle en tant que parent :

DefaultTextStyle(
  style: TextStyle(...),
  child: Text('Bonjour le monde'),
)

Divers widgets en ajoutent un pour modifier le thème de texte par défaut, tels que Scaffold, Dialog, AppBar, ListTile, ...

C'est DefaultTextStyle qui permet par exemple à votre titre de barre d'applications d'être gras par défaut.

18 votes

Aussi gardez à l'esprit que pour un héros, il est déconnecté du parent pendant le 'vol' donc en ajoutant un Material (ou tout thème) comme enfant du héros (DES DEUX côtés) le fixe dans la transition. Voir github.com/flutter/flutter/issues/30647

1 votes

@Rémi Si vous avez dit que l'instance de thème manque dans le parent, pourquoi mettre le thème en haut au lieu de Material ou Scaffold ne résout pas le problème? Je viens d'essayer.

1 votes

Just an update, It's the DefaultTextStyle, not Theme that's missing.

187voto

Dyvoker Points 129

Ajouter le widget Material en tant qu'élément racine.

@override
  Widget build(BuildContext context) {
    return Material(
        type: MaterialType.transparency,
        child: new Container(

2 votes

Entourer le texte ou le widget avec le widget Material m'a aidé. Ajouter Material en tant qu'élément racine n'a pas fonctionné dans mon cas

1 votes

Fonctionne à la fois avec type: MaterialType.transparency ou sans aucun.

3 votes

Merci d'avoir mentionné type: MaterialType.transparency,. J'en avais besoin car mon enfant avait des bordures arrondies, donc je voyais un fond blanc.

114voto

CopsOnRoad Points 4705

Tout ce que vous avez à faire est de fournir un widget Material, ou un Scaffold qui couvre internment ce widget. Vous pouvez le faire de plusieurs manières :

  • Utiliser Material (simple et meilleur) :

    Material(
      color: Colors.transparent, // <-- Ajoutez ceci, si nécessaire
      child: Text('Bonjour'),
    )
  • Définir la propriété Text.style :

    Text(
      'Bonjour',
      style: TextStyle(decoration: TextDecoration.none), // Définissez ceci
    )
  • Fournir Scaffold :

    Scaffold(body: Text('Bonjour'))

Résoudre les problèmes de texte jaune lors de l'utilisation de Hero :

Comme l'a mentionné aaronvargas, vous pouvez envelopper votre child dans Material lors de l'utilisation de Hero des deux côtés. Par exemple :

Hero(
  tag: 'fooTag',
  child: Material( // <--- Fournir Material
    type: MaterialType.transparency,
    child: VotreWidget(),
  ),
);

5 votes

Ce contournement m'a aidé à résoudre les lignes jaunes dans l'animation du héros. Merci.

17voto

Anirudh Sharma Points 102

Vous pouvez également utiliser decoration: TextDecoration.none pour supprimer le soulignement

7voto

kokemomuke Points 184

Vous devriez ajouter les widgets Material et Scaffold dans le fichier main.dart

 MaterialApp(
  home: Scaffold(
    body: Text('Bonjour le monde'),
  ),
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X