Dòng màu vàng bên dưới Tiện ích văn bản trong Flutter?


123

Làm việc trên ứng dụng rung đầu tiên của tôi. Màn hình ứng dụng chính không có vấn đề này, tất cả các văn bản hiển thị như bình thường.

Tuy nhiên, trong màn hình mới mà tôi đang phát triển này, tất cả widget văn bản đều có một số đường kẻ / hai dòng màu vàng kỳ lạ bên dưới.

Bất kỳ ý tưởng về lý do tại sao điều này đang xảy ra?

Dòng màu vàng


Bạn có thể thêm mã của bạn?
aziza

14
Tôi nghi ngờ lý do là vì bạn không có Scaffold trên trang này.
aziza

@aziza Tôi nghĩ bạn đúng. Trang này không có phần đầu. Tôi nghi ngờ đó có thể là vấn đề, nhưng đã không kiểm tra nó. Bất kỳ ý tưởng tại sao điều này xảy ra khi tôi không có giàn giáo? Tôi không nhận ra nó được yêu cầu. Tôi có nên sử dụng Scaffold không, mặc dù tôi chỉ sử dụng tham số the_body_?
dasfima

2
Mỗi trang cần một Scaffold, ngay cả khi bạn đang cấu trúc lại các widget nhỏ hơn vào các lớp riêng biệt, chúng sẽ kết thúc với một Scaffold cha ở đâu đó. Tôi không chắc liệu nó có nghĩa là theo cách này để văn bản được gạch dưới hay đó là một vấn đề, bất kể, bạn sẽ cần phải xây dựng bất kỳ trang nào trong Scaffold.
aziza

3
Hoặc nếu bạn donot muốn Scaffold, bạn có thể chỉ vòm của bạn Textvới Materialphụ tùng
realpac

Câu trả lời:


154

Vấn đề không phải là có Scaffoldhay không. Scaffoldlà một người trợ giúp cho Materialcác ứng dụng ( AppBar,, Drawerloại nội dung đó). Nhưng bạn không bị buộc phải sử dụng Material.

Những gì bạn đang thiếu là một ví dụ về việc Themelàm cha mẹ.

Tại sao điều đó lại quan trọng cần biết? Bởi vì khi bạn phát triển một Phương thức ( showDialogví dụ: sử dụng ), bạn sẽ gặp phải vấn đề tương tự. NHƯNG Scaffold là một widget toàn màn hình mờ đục! Và bạn rõ ràng không muốn điều đó trong Modal của mình.

Có nhiều cách để giới thiệu một thể hiện Chủ đề. Trong ứng dụng Material, điều này thường đạt được bằng cách khởi tạo MaterialWidget. Và đoán xem? Scaffoldtạo một cái cho bạn. Nhưng Dialogquá!


3
Cũng xin lưu ý đối với một Anh hùng, nó bị ngắt kết nối với cha mẹ khi 'đang bay' vì vậy việc thêm một Material(hoặc bất kỳ Chủ đề nào) làm con của Anh hùng (CẢ hai bên) sẽ khắc phục sự cố đó trong quá trình chuyển đổi. Xem github.com/flutter/flutter/issues/30647
aaronvargas

79

Thêm Materialwidget làm phần tử gốc.

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

1
xung quanh texthoặc widgetvới Materialwidget đã giúp tôi. Thêm Vật liệu làm phần tử gốc không giúp được gì trong trường hợp của tôi
MMK

1
hoạt động cả khi có type: MaterialType.transparencyhoặc không có bất kỳ.
sassman

28

Bạn có thể sử dụng Scaffold(nói chung là tốt hơn) hoặc bất kỳ thành phần nào khác cung cấp chủ đề material như một Materialwidget đơn giản .

Đây là ví dụ, sử dụng bất kỳ ví dụ nào:

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

Như một giải pháp thay thế bạn có thể sử dụng:

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

16

Kiểu văn bản có đối số trang trí có thể được đặt thành không

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

Ngoài ra, như những người khác đã đề cập, nếu tiện ích Văn bản của bạn nằm trong cây của một tiện ích Giàn xếp hoặc Vật liệu, bạn sẽ không cần kiểu văn bản trang trí.


10

Ngoài ra bạn có thể sử dụng trang trí: TextDecoration.none để loại bỏ gạch chân


6

Chỉ cần thêm một cách khác mà tôi gặp phải cho những câu trả lời này.

Bao bọc Widget gốc xung quanh một widget DefaultTextStyle . Ở đây không cần thiết phải thay đổi từng tiện ích Văn bản.

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

Hy vọng nó sẽ giúp một ai đó.


2

Bạn nên thêm các widget Material và Scaffold trong tệp main.dart

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

2

Có một giải pháp khác cho việc này, đặc biệt nếu bạn đang sử dụng nhiều trang được bao bọc trong tệp main.dart . Bạn có thể làm như sau:

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

Thao tác này sẽ xóa các dòng màu vàng dưới văn bản có trong bất kỳ trang nào được tham chiếu / sử dụng dưới trình bao bọc.


1

Bạn chỉ cần thêm tiện ích gốc Material.

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

0

2 cách khả dụng:

sử dụng giàn giáo trong cha của màn hình

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

sử dụng tài liệu cho phụ huynh của tiện ích con

Material(child: Text("My Text"))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.