Linee gialle sotto i widget di testo in Flutter?


124

Sto lavorando alla mia prima app flutter. La schermata principale dell'app non presenta questo problema, tutti i testi vengono visualizzati come dovrebbero.

Tuttavia in questa nuova schermata che sto sviluppando, tutti i widget di testo hanno una strana linea gialla / doppia linea sotto.

Qualche idea sul perché sta accadendo?

Linee gialle


Puoi aggiungere il tuo codice?
aziza

14
Sospetto che il motivo sia perché non hai un'impalcatura su questa pagina.
aziza

@aziza Penso che tu abbia ragione. Questa pagina non ha uno scaffold. Sospettavo che potesse essere il problema, ma non ho proseguito controllandolo. Qualche idea sul perché questo accade quando non ho un'impalcatura? Non mi rendevo conto che fosse necessario. Dovrei comunque usare uno Scaffold, anche se userò solo il parametro_body_?
dasfima

2
Ogni pagina ha bisogno di uno Scaffold, anche se stai refactoring di widget più piccoli su classi separate, dovrebbero finire con un genitore Scaffold da qualche parte. Non sono sicuro se sia inteso in questo modo per il testo da sottolineare o è un problema, a prescindere, finirai per dover costruire qualsiasi pagina all'interno di uno scaffold.
aziza

3
Oppure, se non lo desideri Scaffold, puoi semplicemente circondare il tuo widget TextconMaterial
realpac

Risposte:


154

Il problema è non avere Scaffoldo meno. Scaffoldè un aiuto per Materialle applicazioni ( AppBar, Drawer, quel genere di cose). Ma non sei obbligato a usare Material.

Quello che ti manca è un'istanza di Themegenitore.

Perché è importante sapere? Perché quando svilupperai un Modal (usando showDialogad esempio), dovrai affrontare lo stesso problema. MA Scaffold è un widget a schermo intero opaco! E ovviamente non lo vuoi nel tuo Modal.

Esistono molti modi per introdurre un'istanza di Theme. In Material App, ciò si ottiene solitamente creando un'istanza di un Materialwidget. E indovina cosa? Scaffoldne crea uno per te. Ma Dialoganche!


3
Inoltre, tieni presente che per un eroe, viene disconnesso dal genitore mentre è "in volo", quindi l'aggiunta di un Material(o qualsiasi tema) come figlio dell'eroe (ENTRAMBI i lati) lo risolve nella transizione. Vedi github.com/flutter/flutter/issues/30647
aaronvargas

79

Aggiungi Materialwidget come elemento radice.

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

1
circondare texto widgetcon il Materialwidget mi ha aiutato. L'aggiunta di materiale come elemento radice non ha aiutato nel mio caso
MMK

1
funziona sia con type: MaterialType.transparencyche senza.
sassman

28

Puoi usare Scaffold(generalmente meglio) o qualsiasi altro componente che fornisce un tema materiale come un semplice Materialwidget.

Ecco l'esempio, usa uno di loro:

var text = Scaffold(body: Text("Hi"),);
var text2 = Material(child: Text("Hi"),);

Come soluzione alternativa puoi utilizzare:

Text(
  'Your text',
  style: TextStyle(decoration: TextDecoration.none), // removes yellow line
)

16

Lo stile di testo ha un argomento di decorazione che può essere impostato su nessuno

Text("My Text",
  style: TextStyle(
    decoration: TextDecoration.none,
  )
);

Inoltre, come altri hanno già detto, se il tuo widget Testo è nell'albero di un widget Scaffold o Material non avrai bisogno dello stile di testo decorativo.


10

Inoltre puoi usare la decorazione: TextDecoration.none per rimuovere la sottolineatura


6

Aggiungo solo un altro modo che incontro a queste risposte.

Avvolgi il widget radice attorno a un widget DefaultTextStyle . La modifica di ogni widget di testo non è una necessità qui.

DefaultTextStyle(
    style: TextStyle(decoration: TextDecoration.none), 
    child : Your_RootWidget
)

Spero che aiuti qualcuno.


2

Dovresti aggiungere i widget Material e Scaffold nel file main.dart

 MaterialApp(
  home: Scaffold(
    body: Text('Hello world'),
  ),
);

2

C'è un'altra soluzione per questo, specialmente se stai usando più pagine racchiuse nel file main.dart Puoi fare qualcosa del genere:

  child: MaterialApp(
    home: Material(child: Wrapper()),
  ),

Ciò rimuoverà le linee gialle sotto il testo che è presente in tutte le pagine referenziate / utilizzate sotto wrapper.


1

Devi solo aggiungere il widget della radice del materiale.

      @override
       Widget build(BuildContext context) {
      return Material(
         child: new Container(),
        );
       }

0

Sono disponibili 2 modi:

usa scaffuld nel genitore dello schermo

Scaffold(body: Container(child:Text("My Text")))

utilizzare il materiale per il genitore del widget

Material(child: Text("My Text"))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.