Flutter'da Metin Widget'larının altında sarı çizgiler var mı?


132

İlk flutter uygulamam üzerinde çalışıyorum. Ana uygulama ekranında bu sorun yok, tüm metinler olması gerektiği gibi görünüyor.

Ancak geliştirdiğim bu yeni ekranda, tüm metin widget'ının altında bazı garip sarı çizgi / çift satır var.

Bunun neden olduğuna dair bir fikriniz var mı?

Sarı çizgiler


Kodunuzu ekleyebilir misiniz?
aziza

17
Bunun sebebinin bu sayfada bir İskele'nin olmaması olduğundan şüpheleniyorum.
aziza

@aziza Sanırım haklısın. Bu sayfanın iskelesi yok. Sorunun bu olabileceğinden şüpheleniyordum, ancak kontrol etmedim. İskelem olmadığında bunun neden olduğuna dair bir fikriniz var mı? Bunun gerekli olduğunu anlamadım. Yalnızca_body_ parametresini kullanacak olsam bile, yine de bir İskele kullanmalı mıyım?
dasfima

2
Her sayfanın bir İskele'ye ihtiyacı vardır, daha küçük parçacıkları ayrı sınıflara yeniden düzenlemiş olsanız bile, bunlar bir yerde bir İskele ebeveyni ile sonuçlanmalıdır. Metnin altının bu şekilde çizilmesi mi yoksa bir sorun mu olduğundan emin değilim, ne olursa olsun, bir Scaffold içinde herhangi bir sayfa oluşturmanız gerekecek.
aziza

3
Veya istemezseniz Scaffold, etrafınızı widget Textile çevreleyebilirsinizMaterial
realpac

Yanıtlar:


164

Sorun, sahip olmak Scaffoldya da olmamak. Scaffoldiçin bir yardımcı olan Materialuygulamalar ( AppBar, Drawermalzeme, bu tür). Ama kullanmak zorunda değilsin Material.

Eksik olduğunuz şey, Themeebeveyn olarak bir örnek .

Bunu bilmek neden önemlidir? Çünkü bir Modal geliştireceğiniz zaman ( showDialogörneğin kullanarak ), aynı problemle karşılaşacaksınız. AMA Scaffold, opak bir tam ekran widget'tır! Ve açıkça bunu Modal'ınızda istemiyorsunuz.

Bir Tema örneğini tanıtmanın birçok yolu vardır. Material App'te bu genellikle bir MaterialWidget'ın somutlaştırılmasıyla elde edilir . Ve tahmin et ne oldu? Scaffoldsizin için bir tane yaratır. Ama aynı Dialogzamanda!


3
Ayrıca, bir Kahraman için, 'uçuş halindeyken' ebeveynle bağlantısı kesildiğini, bu nedenle MaterialKahramanın çocuğu (HER İKİSİ taraf) geçiş sırasında düzelttiği için bir (veya herhangi bir Tema) eklenmesi gerektiğini unutmayın. Bkz. Github.com/flutter/flutter/issues/30647
aaronvargas

81

MaterialWidget'ı kök öğe olarak ekleyin .

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

1
textveya widget widgetile çevrelemek Materialbana yardımcı oldu. Kök öğe olarak Materyal eklemek benim durumumda yardımcı olmadı
MMK

1
type: MaterialType.transparencyherhangi biriyle veya hiç olmadan çalışır .
sassman

30

Ya Scaffold(genellikle daha iyi) ya da basit bir Materialpencere öğesi gibi malzeme teması sağlayan başka bir bileşen kullanabilirsiniz .

İşte örnek, bunlardan herhangi birini kullanın:

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

Çözüm olarak şunları kullanabilirsiniz:

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

16

Metin stilinin hiçbiri olarak ayarlanamayan bir dekorasyon bağımsız değişkeni var

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

Ayrıca, diğerlerinin de belirttiği gibi, Metin widget'ınız İskele veya Malzeme widget'ının ağacındaysa, dekorasyon metin stiline ihtiyacınız olmayacaktır.


11

Ayrıca alt çizgiyi kaldırmak için dekorasyonu kullanabilirsiniz: TextDecoration.none


7

Bu cevaplara sadece karşılaştığım başka bir yolu eklemek.

Kök Pencere Öğesini bir DefaultTextStyle widget'ının etrafına sarın . Her Metin parçacığını değiştirmek burada bir zorunluluk değildir.

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

Umarım birine yardımcı olur.


3

Main.dart dosyasında Material ve Scaffold widget'ları eklemelisiniz

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

2

Bunun için başka bir çözüm var, özellikle main.dart dosyası altına sarılmış birden çok sayfa kullanıyorsanız , bunun gibi bir şey yapabilirsiniz:

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

Bu, sarıcı altında referans verilen / kullanılan tüm sayfalarda bulunan metnin altındaki sarı çizgileri kaldıracaktır.


1

Yalnızca Malzeme kök pencere öğesini eklemeniz gerekir.

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

0

2 yol mevcuttur:

scaffuld'u ekranın ebeveyninde kullanın

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

widget'ın üst öğesi için malzeme kullan

Material(child: Text("My Text"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.