เส้นสีเหลืองใต้ Text Widgets ใน Flutter?


127

กำลังทำงานกับแอพพลิเคชั่นแรกของฉัน หน้าจอหลักของแอพไม่มีปัญหานี้ข้อความทั้งหมดจะแสดงขึ้นตามที่ควร

อย่างไรก็ตามในหน้าจอใหม่นี้ฉันกำลังพัฒนาวิดเจ็ตข้อความทั้งหมดมีเส้นสีเหลืองแปลก ๆ / สองบรรทัดอยู่ข้างใต้

มีความคิดเห็นว่าเหตุใดจึงเกิดขึ้น

เส้นสีเหลือง


คุณสามารถเพิ่มรหัสของคุณได้หรือไม่?
aziza

16
ฉันสงสัยว่าสาเหตุเป็นเพราะคุณไม่มี Scaffold ในหน้านี้
aziza

@aziza ฉันคิดว่าคุณพูดถูก หน้านี้ไม่มีนั่งร้าน ฉันสงสัยว่าอาจเป็นปัญหา แต่ไม่ได้ดำเนินการตรวจสอบ มีความคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้นเมื่อฉันไม่มีโครง? ฉันไม่รู้ว่ามันจำเป็น ฉันควรใช้ Scaffold หรือไม่แม้ว่าฉันจะใช้พารามิเตอร์ the_body_ เท่านั้น
dasfima

2
แต่ละหน้าต้องมี Scaffold แม้ว่าคุณจะปรับโครงสร้างวิดเจ็ตขนาดเล็กลงในคลาสแยกกัน แต่ก็ควรจะจบลงด้วย Scaffold parent ที่ไหนสักแห่ง ฉันไม่แน่ใจว่ามันหมายถึงวิธีนี้เพื่อให้ข้อความถูกขีดเส้นใต้หรือเป็นปัญหาไม่ว่าคุณจะต้องสร้างหน้าใด ๆ ภายใน Scaffold
aziza

3
หรือหากคุณไม่ต้องการScaffoldคุณสามารถล้อมรอบTextด้วยMaterialวิดเจ็ตของคุณได้
realpac

คำตอบ:


156

ปัญหาคือไม่มีScaffoldหรือไม่มี Scaffoldเป็นตัวช่วยสำหรับMaterialแอพ ( AppBar, Drawerประเภทของสิ่งต่างๆ) Materialแต่คุณไม่ได้บังคับให้ใช้

สิ่งที่คุณขาดหายไปคือตัวอย่างของการThemeเป็นพ่อแม่

เหตุใดจึงสำคัญที่ต้องรู้? เพราะเมื่อคุณจะพัฒนา Modal ( showDialogตัวอย่างเช่น) คุณจะประสบปัญหาเดียวกัน แต่ Scaffold เป็นวิดเจ็ตแบบเต็มหน้าจอทึบแสง! และเห็นได้ชัดว่าคุณไม่ต้องการสิ่งนั้นใน Modal ของคุณ

มีหลายวิธีในการแนะนำอินสแตนซ์ธีม ในแอป Material มักทำได้โดยการสร้างMaterialวิดเจ็ต และเดาอะไร? Scaffoldสร้างขึ้นมาเพื่อคุณ แต่Dialogเกินไป!


3
นอกจากนี้โปรดทราบว่าฮีโร่ถูกตัดการเชื่อมต่อกับผู้ปกครองในขณะที่ 'อยู่ระหว่างการบิน' ดังนั้นการเพิ่มMaterial(หรือธีมใด ๆ ) เป็นลูกของฮีโร่ (ทั้งสองด้าน) จะแก้ไขได้ในช่วงการเปลี่ยนแปลง ดูgithub.com/flutter/flutter/issues/30647
aaronvargas

79

เพิ่มMaterialวิดเจ็ตเป็นองค์ประกอบรูท

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

1
รอบ ๆtextหรือwidgetด้วยMaterialวิดเจ็ตช่วยฉัน การเพิ่มวัสดุเป็นองค์ประกอบรากไม่ได้ช่วยในกรณีของฉัน
MMK

1
ทำงานได้ทั้งแบบมีtype: MaterialType.transparencyหรือไม่มี
sassman

29

คุณสามารถใช้Scaffold(โดยทั่วไปจะดีกว่า) หรือส่วนประกอบอื่น ๆ ที่มีธีมวัสดุเช่นMaterialวิดเจ็ตธรรมดา

นี่คือตัวอย่างใช้อย่างใดอย่างหนึ่ง:

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

เป็นวิธีแก้ปัญหาชั่วคราวคุณสามารถใช้:

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

16

รูปแบบข้อความมีอาร์กิวเมนต์การตกแต่งที่สามารถตั้งค่าเป็นไม่มี

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

นอกจากนี้ตามที่คนอื่น ๆ กล่าวถึงหากวิดเจ็ตข้อความของคุณอยู่ในโครงสร้างของวิดเจ็ต Scaffold หรือ Material คุณก็ไม่จำเป็นต้องใช้สไตล์ข้อความตกแต่ง



7

เพียงเพิ่มวิธีอื่นที่ฉันพบในคำตอบเหล่านี้

ตัดวิดเจ็ตรูทรอบวิดเจ็ตDefaultTextStyle การแก้ไขวิดเจ็ตข้อความแต่ละรายการไม่จำเป็นที่นี่

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

หวังว่ามันจะช่วยใครบางคน


3

คุณควรเพิ่มวิดเจ็ต Material และ Scaffold ในไฟล์ main.dart

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

2

มีวิธีแก้ปัญหาอื่นสำหรับสิ่งนี้โดยเฉพาะอย่างยิ่งหากคุณใช้หลาย ๆ เพจที่อยู่ภายใต้ไฟล์main.dartคุณสามารถทำสิ่งนี้ได้:

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

การดำเนินการนี้จะลบเส้นสีเหลืองใต้ข้อความที่มีอยู่ในหน้าใด ๆ ที่อ้างอิง / ใช้ภายใต้ Wrapper



0

สามารถใช้ได้ 2 วิธี:

ใช้ scaffuld ในพาเรนต์ของหน้าจอ

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

ใช้วัสดุสำหรับผู้ปกครองของวิดเจ็ต

Material(child: Text("My Text"))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.