Làm cách nào để thêm đường viền vào tiện ích trong Flutter?


151

Tôi đang sử dụng Flutter và tôi muốn thêm đường viền vào một widget (trong trường hợp này là widget Text).

Tôi đã thử TextStyle và Text, nhưng tôi không thấy cách thêm viền.

Câu trả lời:


304

Bạn có thể thêm TextFieldnhư một childmột Containermà có một BoxDecorationvới borderbất động sản:

nhập mô tả hình ảnh ở đây

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"),
)

205

Đây là một câu trả lời mở rộng. A DecoratedBoxlà những gì bạn cần để thêm một đường viền, nhưng tôi đang sử dụng một Containerđể thuận tiện cho việc thêm lề và phần đệm.

Đây là thiết lập chung.

nhập mô tả hình ảnh ở đây

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),
    ),
  );
}

nơi đó BoxDecoration

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

Chiều rộng biên giới

nhập mô tả hình ảnh ở đây

Những có chiều rộng biên giới 1, 310tương ứng.

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

Màu viền

nhập mô tả hình ảnh ở đây

Những cái này có màu viền

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

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

Phía biên giới

nhập mô tả hình ảnh ở đây

Những cái này có một biên giới của

  • trái (3.0), đầu (3.0)
  • dưới cùng (13,0)
  • trái (xanh lam [100], 15.0), trên cùng (xanh lam [300], 10.0), phải (xanh lam [500], 5.0), dưới cùng (xanh lam [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,
      ),
    ),
  );
}

Bán kính biên giới

nhập mô tả hình ảnh ở đây

Những có bán kính biên giới 5, 1030tương ứng.

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

Đang xảy ra

DecoratedBox/ BoxDecorationrất linh hoạt. Đọc Flutter - BoxDecoration Cheat Sheet để biết thêm nhiều ý tưởng.


Bất cứ ai cũng biết cách sử dụng BorderSide với BorderRadius?
HaSnen Tai

@HaSnenTai Bạn đã tìm được giải pháp nào chưa? Trong thiết kế của tôi, tôi cần phải cho đáy biên với hình dạng giống như thuốc. Làm thế nào tôi có thể đạt được điều này?
Robert Williams

@RobertWilliams, tôi sẽ sử dụng một widget vẽ tùy chỉnh.
Suragch

@Suragch Tiện ích là Văn bản cần đường viền mạnh (hình viên thuốc). Chiều rộng widget văn bản không cố định. Để sử dụng tiện ích vẽ tùy chỉnh, tôi sẽ không cần cung cấp thuộc tính sửa chữa?
Robert Williams

@RobertWilliams, tôi không biết chính xác những gì bạn đang cố gắng làm. Tôi sẽ mở một câu hỏi mới với một minh họa và giải thích về những gì hiện không hoạt động. Hãy liên kết với nó từ đây.
Suragch

10

Như đã nêu trong tài liệu, flutter thích thành phần hơn các tham số. Hầu hết thời gian những gì bạn đang tìm kiếm không phải là một tài sản, mà thay vào đó là một trình bao bọc (và đôi khi là một vài người trợ giúp / "người xây dựng")

Đối với đường viền những gì bạn muốn là DecoratedBox, có một thuộc decorationtính xác định đường viền; mà còn hình nền hoặc bóng.

Hoặc như @Aziza nói, bạn có thể sử dụng Container. Đó là sự kết hợp của DecoratedBox, SizedBoxvà một vài vật dụng hữu ích khác.


7

Cách tốt nhất là sử dụng BoxDecoration ()

Lợi thế

  • Bạn có thể đặt đường viền của widget
  • Bạn có thể đặt Màu viền hoặc Chiều rộng
  • Bạn có thể đặt Góc tròn của đường viền
  • Bạn có thể thêm Shadow of widget

Bất lợi

  • BoxDecorationchỉ sử dụng với Containerwidget để bạn muốn bọc widget của mìnhContainer()

Thí dụ

    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"),
    )

nhập mô tả hình ảnh ở đây


1

Sử dụng BoxDecoration () là cách tốt nhất để hiển thị đường viền.

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

Bạn cũng có thể xem định dạng đầy đủ ở đây


0

Bạn có thể sử dụng Container để chứa widget của mình:

Container(
  decoration: BoxDecoration(
    border: Border.all(
    color: Color(0xff000000),
    width: 1,
  )),
  child: Text()
),

-1

Sử dụng một container với Boxdercoration.

 BoxDecoration(
    border: Border.all(
      width: 3.0
    ),
    borderRadius: BorderRadius.circular(10.0)
  );
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.