381

我正在使用 Flutter,我想为小部件(在本例中为Text小部件)添加边框。

我试过TextStyleand Text,但我没有看到如何添加边框。

4

11 回答 11

731

您可以将Textas a添加childContainer具有BoxDecorationwithborder属性的 a 中:

在此处输入图像描述

Container(
  margin: const EdgeInsets.all(15.0),
  padding: const EdgeInsets.all(3.0),
  decoration: BoxDecoration(
    border: Border.all(color: Colors.blueAccent)
  ),
  child: Text('My Awesome Border'),
)
于 2017-11-21T22:47:22.747 回答
447

这是一个扩展的答案。ADecoratedBox是您需要添加边框的内容,但我使用 a 是Container为了方便添加边距和填充。

这是一般设置。

在此处输入图像描述

Widget myWidget() {
  return Container(
    margin: const EdgeInsets.all(30.0),
    padding: const EdgeInsets.all(10.0),
    decoration: myBoxDecoration(), //             <--- BoxDecoration here
    child: Text(
      "text",
      style: TextStyle(fontSize: 30.0),
    ),
  );
}

BoxDecoration在哪里

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border.all(),
  );
}

边框宽度

在此处输入图像描述

它们的边框宽度分别为1310

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border.all(
      width: 1, //                   <--- border width here
    ),
  );
}

边框颜色

在此处输入图像描述

它们的边框颜色为

  • Colors.red
  • Colors.blue
  • Colors.green

代码

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border.all(
      color: Colors.red, //                   <--- border color
      width: 5.0,
    ),
  );
}

边框侧

在此处输入图像描述

这些有一个边界边

  • 左(3.0),上(3.0)
  • 底部 (13.0)
  • 左 (blue[100], 15.0), 上 (blue[300], 10.0), 右 (blue[500], 5.0), 下 (blue[800], 3.0)

代码

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border(
      left: BorderSide( //                   <--- left side
        color: Colors.black,
        width: 3.0,
      ),
      top: BorderSide( //                    <--- top side
        color: Colors.black,
        width: 3.0,
      ),
    ),
  );
}

边界半径

在此处输入图像描述

它们的边界半径分别为51030

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border.all(
      width: 3.0
    ),
    borderRadius: BorderRadius.all(
        Radius.circular(5.0) //                 <--- border radius here
    ),
  );
}

继续

DecoratedBox/BoxDecoration非常灵活。阅读Flutter — BoxDecoration 备忘单以获得更多想法。

于 2018-12-08T06:08:44.533 回答
25

最好的方法是使用 BoxDecoration()

优势

  • 您可以设置小部件的边框
  • 您可以设置边框颜色宽度
  • 您可以设置边框的圆角
  • 您可以添加一个小部件的影子

坏处

  • BoxDecoration仅与Container小部件一起使用,因此您想将小部件包装在Container()

例子

    Container(
      margin: EdgeInsets.all(10),
      padding: EdgeInsets.all(10),
      alignment: Alignment.center,
      decoration: BoxDecoration(
        color: Colors.orange,
        border: Border.all(
            color: Colors.pink[800], // Set border color
            width: 3.0),   // Set border width
        borderRadius: BorderRadius.all(
            Radius.circular(10.0)), // Set rounded corner radius
        boxShadow: [BoxShadow(blurRadius: 10,color: Colors.black,offset: Offset(1,3))] // Make rounded corner of border
      ),
      child: Text("My demo styling"),
    )

在此处输入图像描述

于 2019-12-03T09:13:30.777 回答
15

如文档中所述,Flutter 更喜欢组合而不是参数。

大多数时候,您不是在寻找属性,而是在寻找包装器(有时还有一些助手/“构建器”)。

对于边框,您需要DecoratedBox,它具有decoration定义边框的属性;还有背景图像或阴影。

或者,就像Aziza 所说,您可以使用Container. 这是和其他一些有用的小部件DecoratedBox的组合。SizedBox

于 2017-11-21T23:15:58.970 回答
9

用容器包装那个小部件

Container(
        margin: const EdgeInsets.all(30.0),
        padding: const EdgeInsets.all(10.0),
        decoration: BoxDecoration(border: Border.all(
        color: Colors.black,
        width: 1,
      ),
    ), 
        child: Text(
          "text",
          style: TextStyle(fontSize: 30.0),
        ),
      );
于 2021-09-25T08:27:19.457 回答
7

在这里,由于Text小部件没有允许我们定义 a 的属性border,我们应该用一个允许我们定义边框的小部件包装它。有几种解决方案。但最好的解决方案是在Container小部件中使用BoxDecoration

为什么选择使用 BoxDecoration?

因为 BoxDecoration 提供了更多的自定义功能,例如可以定义:

首先,borderand也定义:

  • 边框颜色
  • 边框宽度
  • 边界半径
  • 形状
  • 和更多 ...

一个例子:

   Container(
     child:Text(' Hello Word '),
     decoration: BoxDecoration(
          color: Colors.yellow,
          border: Border.all(
                color: Colors.red ,
                width: 2.0 ,
              ),
          borderRadius: BorderRadius.circular(15),
            ),
          ),

输出:

在此处输入图像描述

于 2020-12-10T14:33:40.480 回答
5

您可以使用 Container 来包含您的小部件:

Container(
  decoration: BoxDecoration(
    border: Border.all(
    color: Color(0xff000000),
    width: 1,
  )),
  child: Text()
),
于 2020-06-05T11:20:44.730 回答
5

使用带有 Boxdercoration 的容器。

 BoxDecoration(
    border: Border.all(
      width: 3.0
    ),
    borderRadius: BorderRadius.circular(10.0)
  );
于 2020-07-05T10:46:58.500 回答
3

在这种情况下,您可以将该小部件包装到为该小部件提供装饰的 DecoratedBox

Widget textDecoration(String text){
    return DecoratedBox(
        decoration: BoxDecoration(
            border: Border.all(
                color: Colors.red,
                width: 10,
            ),
        ),
        child: Text(text)
    );
}
于 2021-11-02T08:26:17.040 回答
1

如果您想为容器的某些文本添加边框,那么您可以通过将 BoxDecoration 应用到 Container 来轻松实现。

代码 :

Container(
  decoration: BoxDecoration(
    border: Border.all(
      color: Colors.redAccent,
      width: 1,
    ),
  ),
  child: Text('Some Text'),
);
于 2021-05-05T05:15:00.737 回答
1

如果有人想要轮廓/边框文本或应用多个边框。

你可以试试这个:

https://pub.dev/packages/outlined_text

在此处输入图像描述

演示

于 2021-05-29T21:10:34.083 回答