Flutter中的文本小部件下的黄线?


123

在我的第一个Flutter应用上工作。应用程序主屏幕没有此问题,所有文本均应显示。

但是,在我正在开发的新屏幕中,所有文本小部件的下面都有一些奇怪的黄线/双线。

有什么想法为什么会这样?

黄线


您可以添加代码吗?
阿齐扎

14
我怀疑原因是因为您在此页面上没有脚手架。
阿齐扎

@aziza我认为你是对的。此页面没有脚手架。我怀疑这可能是问题所在,但没有进行检查。关于没有脚手架时为什么会发生这种情况的任何想法?我没有意识到这是必需的。即使我只使用the_body_参数,我还是应该使用脚手架吗?
dasfima

2
每个页面都需要一个Scaffold,即使您将较小的小部件重构为单独的类,它们也应该以某个Scaffold父级结尾。我不确定是要用这种方式对文本加上下划线还是是个问题,无论如何,最终您都需要在Scaffold中构建任何页面。
阿齐扎

3
或者,如果你想DONOT Scaffold,你可以环绕你TextMaterial小部件
realpac

Answers:


154

问题是Scaffold没有。 ScaffoldMaterial应用程序(AppBar,之Drawer类的东西)的助手。但是您并没有被迫使用Material

您所缺少的是 Theme作为父级。

为什么知道那么重要?因为当您开发模态(showDialog例如使用)时,您将面临相同的问题。但是Scaffold是一个不透明的全屏小部件!而且您显然不希望在您的Modal中使用它。

有很多方法可以引入主题实例。在Material App中,通常是通过实例化MaterialWidget 来实现的。你猜怎么着?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
围绕textwidgetMaterial小部件一起帮助了我。在我的情况下,将材料添加为根元素无济于事
MMK

1
无论type: MaterialType.transparency有无都可以使用。
萨斯曼

28

您可以使用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

文字样式的修饰参数可以设置为none

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

另外,正如其他人提到的那样,如果“文本”小部件位于“脚手架”或“材料”小部件的树中,则不需要装饰文本样式。



6

只是增加了我遇到这些答案的另一种方式。

将根Widget包裹在DefaultTextStyle Widget周围。此处不必更改每个“文本”小部件。

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

希望它能帮助某人。


2

您应该在main.dart文件中添加Material和Scaffold小部件

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

2

还有另一种解决方案,尤其是当您使用包裹在main.dart文件下的多个页面时,您可以执行以下操作:

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

这将删除包装器下引用/使用的任何页面中存在的文本下的黄线。


1

您只需要添加Material根小部件。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.