如何在Flutter中为窗口小部件添加边框?

Set*_*add 75 dart flutter

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

我尝试了TextStyle和Text,但我没有看到如何添加边框.

azi*_*iza 166

您可以将TextFielda 添加childContainer具有BoxDecorationwith border属性的a:

在此输入图像描述

new 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"),
)
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 122

这是一个扩展的答案.A DecoratedBox是你需要添加边框,但我使用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),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

其中,BoxDecoration

BoxDecoration myBoxDecoration() {
  return BoxDecoration(
    border: Border.all(),
  );
}
Run Code Online (Sandbox Code Playgroud)

边框宽度

在此输入图像描述

这些具有的边框宽度1,310分别.

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

边框颜色

在此输入图像描述

它们的边框颜色为

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

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

边境边

在此输入图像描述

这些都有边界

  • 左(3.0),上(3.0)
  • 底部(13.0)
  • 左(蓝色[100],15.0),顶部(蓝色[300],10.0),右侧(蓝色[500],5.0),底部(蓝色[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,
      ),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

边界半径

在此输入图像描述

这些有边界半径5,1030分别.

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

继续

DecoratedBox/ BoxDecoration非常灵活.阅读Flutter - BoxDecoration备忘单了解更多想法.

  • 您还可以使用简写“BorderRadius.circular(8)”代替“BorderRadius.all(Radius.circular(5.0))”。 (5认同)
  • 有人知道如何使用 BorderSide 和 BorderRadius 吗? (4认同)

小智 35

您可以用它来包装DecoratedBox提供装饰的小部件:

Widget textDecoration(String text){
    return DecoratedBox(
        decoration: BoxDecoration(
            border: Border.all(
                color: Colors.red,
                width: 10,
            ),
        ),
        child: Text(text)
    );
}
Run Code Online (Sandbox Code Playgroud)


kri*_*yaa 26

概括

我试图总结使用borderin时的所有重要可能性BoxDecoration

以下解释边界的结果:

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述


说明

基本的

在此输入图像描述

  Container(
    decoration: BoxDecoration(border: Border.all()),
    child: const Text("Text"),
 ),    
Run Code Online (Sandbox Code Playgroud)

边框颜色、宽度和描边对齐

在此输入图像描述

Container(
   decoration: BoxDecoration(
   border: Border.all(
       width: 4,
       color: Colors.green,
       strokeAlign: BorderSide.strokeAlignCenter)),
   child: const Text("Text"),
),
Run Code Online (Sandbox Code Playgroud)

仅在特定一侧有边框

在此输入图像描述

      Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: [
          Container(
            decoration: const BoxDecoration(
                border: Border(top: BorderSide(width: 2))),
            child: const Text("Text"),
          ),
          Container(
            decoration: const BoxDecoration(
                border: Border(bottom: BorderSide(width: 2))),
            child: const Text("Text"),
          ),
          Container(
            decoration: const BoxDecoration(
                border: Border(
                    top: BorderSide(width: 2),
                    bottom: BorderSide(width: 4))),
            child: const Text("Text"),
          ),
        ],
      ),
Run Code Online (Sandbox Code Playgroud)

不同的形状

在此输入图像描述

      Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Container(
            padding: const EdgeInsets.all(10),
            decoration: BoxDecoration(
                border: Border.all(),
                shape: BoxShape.circle),
            child: const Text("Text"),
          ),
          Container(
            padding: const EdgeInsets.all(10),
            decoration: BoxDecoration(
              border: Border.all(),
              borderRadius: BorderRadius.circular(10),
            ),
            child: const Text("Text"),
          ),
        ],
      ),
Run Code Online (Sandbox Code Playgroud)

弯曲边界半径

在此输入图像描述

    Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Container(
            padding: const EdgeInsets.all(10),
            decoration: BoxDecoration(
                border: Border.all(),
                borderRadius: const BorderRadius.horizontal(
                    left: Radius.circular(5), right: Radius.circular(20))
                ),
            child: const Text("Text"),
          ),
          Container(
            padding: const EdgeInsets.all(10),
            decoration: BoxDecoration(
                border: Border.all(),
                borderRadius: const BorderRadius.only(
                    topLeft: Radius.circular(10),
                    bottomRight: Radius.circular(20))),
            child: const Text("Text"),
          ),
        ],
      ),
Run Code Online (Sandbox Code Playgroud)


San*_*inh 22

最好的方法是使用 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"),
    )
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


x86*_*x86 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),
        ),
      );
Run Code Online (Sandbox Code Playgroud)


shi*_*kla 9

上面的答案也是正确的,但如果你想在同一个小部件中添加多个边框,那么你可以设置这个

Container(
      child: const Center(
        child: Text(
          'This is your Container',
        ),
      ),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10),
        color: Colors.white,
        boxShadow: const [
          BoxShadow(color: Colors.green, spreadRadius: 8),
          BoxShadow(color: Colors.yellow, spreadRadius: 5),
        ],
      ),
      height: 50,
    )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Kab*_*uda 6

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

为什么选择使用 BoxDecoration?

因为 BoxDecoration 提供了更多的自定义,比如定义的可能性:

首先,border和 还定义:

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

一个例子:

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

输出:

在此处输入图片说明


Rém*_*let 5

如文档中所述,抖动优先于组合而不是参数。在大多数情况下,您要寻找的不是属性,而是包装器(有时是一些帮助器/“构建器”)

对于边界,您想要的是DecoratedBox具有decoration定义边界的属性; 而且还有背景图片或阴影。

也可以像@Aziza所说的那样使用Container。这是组合DecoratedBoxSizedBox和其他一些有用的小工具。


小智 5

使用 BoxDecoration() 是显示边框的最佳方式。

Container(
  decoration: BoxDecoration(
    border: Border.all(
    color: Color(0xff000000),
    width: 4,
  )),
  child: // Your child widget
),
Run Code Online (Sandbox Code Playgroud)

您还可以在此处查看完整格式。


小智 5

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

Container(
  decoration: BoxDecoration(
    border: Border.all(
    color: Color(0xff000000),
    width: 1,
  )),
  child: Text()
),
Run Code Online (Sandbox Code Playgroud)


S.R*_*hav 5

使用带有 Boxdercoration 的容器。

 BoxDecoration(
    border: Border.all(
      width: 3.0
    ),
    borderRadius: BorderRadius.circular(10.0)
  );
Run Code Online (Sandbox Code Playgroud)