, May 25, 2022

0 kết quả được tìm thấy

Flutter Container Cheat Sheet

  • Đăng bởi  Chau Le
  •  Feb 05, 2022

  •   11 min reads
Flutter Container Cheat Sheet

Container Class URL

Container widget được sử dụng để chứa child widget với khả năng áp dụng một số thuộc tính styling.

Nếu Container widget không có child, nó sẽ tự động lấp đầy vùng đã cho trên màn hình, nếu không, nó sẽ wrap chiều cao và chiều rộng của child element đã cho.

Lưu ý: Container Widget không nên hiển thị trực tiếp mà không có bất kỳ parent widget. Bạn có thể sử dụng Center widget, Padding Widget, Column Widget, Row Widget hoặc Scaffold Widget với tư cách là parent.

Hãy bắt đầu với một empty container và áp dụng một green color property. Container sẽ lấp đầy tất cả màn hình.

Center(
  child: Container(
    color: Colors.green,
  ),
);

Hãy thêm child cho container

Center(
  child: Container(
    color: Colors.green,
    child: Text("Flutter CheatSheet."),
  ),
);

Chúng ta có thể thấy rằng container có kích thước của child. (Chúng ta sẽ nói sau về Text Widget).

Color Property

Bạn có thể sử dụng color property để thêm background cho container.

Bạn sẽ sử dụng Color Class hoặc Colors Class với color property như bên dưới:

Colors Class

sử dụng Colors Class với color name

Center(
  child: Container(
    color: Colors.green,
  ),
);

Bạn cũng có thể thêm shade

Center(
  child: Container(
    color: Colors.green[400],
  ),
);

Hoặc

Center(
  child: Container(
    color: Colors.green.shade400,
  ),
);

Color Class

Sử dụng Color Class với đầy đủ 8 chữ số thập lục phân không phải là 6. Nếu bạn chỉ chỉ định sáu, thì hai chữ số hàng đầu được giả định là 0, có nghĩa là hoàn toàn trong suốt.

Color(0xFFFFFF); // fully transparent white (invisible)
Color(0xFFFFFFFF); // fully opaque white (visible)

Bạn có thể sử dụng.fromARGB(A = Alpha hoặc opacity, R = Red, G = Green, B = Blue) với số màu hoặc số thập lục phân

Color.fromARGB(0xFF, 0x42, 0xA5, 0xF5);
Color.fromARGB(255, 66, 165, 245);

Và bạn có thể sử dụng.fromRGBO(R = Red, G = Green, B = Blue, O = Opacity) với số màu (color number)

Color c = const Color.fromRGBO(66, 165, 245, 1.0);

Child Property

Cung cấp child widget được chứa trong container, container sẽ wrap chiều rộng & chiều cao của child widget này.

Widget này chỉ có thể có một child. Để bố trí nhiều children, hãy để child của widget này là một widget như Row, Column, hoặc Stack, có children property và sau đó cung cấp các children cho widget đó.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    child: new Text("Flutter Cheatsheet"),
  ),
);

Alignment Property

Chúng ta sử dụng Alignment Class với alignment property được áp dụng cho việc căn chỉnh các child widget.

Alignment nhận vào 2 tham số x và y.

Alignment(0.0, 0.0)đại diện cho tâm của hình chữ nhật.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    child: new Text("Flutter Cheatsheet",
      style: TextStyle(
        fontSize: 10.0
      ),
    ),
    alignment: Alignment(0.0, 0.0),
  ),
);

Alignment(-1.0, -1.0)đại diện cho phía trên bên trái của hình chữ nhật.

Alignment(1.0, 1.0) đại diện cho phía dưới bên phải của hình chữ nhật.

Alignment(0.0, 3.0)thể hiện một điểm có tâm theo chiều ngang đối với hình chữ nhật và theo chiều dọc bên dưới đáy hình chữ nhật bằng chiều cao của hình chữ nhật.

Hình dưới đây cho thấy đồ thị của X và Y

Bạn cũng có thể sử dụng một tên cố định với class Alignment

Alignment.bottomCenterĐiểm chính giữa dọc theo cạnh dưới giống nhưAlignment(0.0, 1.0)

Alignment.bottomLeftGóc dưới cùng bên trái giống vớiAlignment(-1.0, 1.0)

Alignment.bottomRightGóc dưới cùng bên phải giống vớiAlignment(1.0, 1.0)

Alignment.centerĐiểm trung tâm, theo cả chiều ngang và chiều dọc giống nhưAlignment(0.0, 0.0)

Alignment.centerLeftĐiểm chính giữa dọc theo cạnh trái giống nhưAlignment(-1.0, 0.0)

Alignment.centerRightĐiểm chính giữa dọc theo cạnh bên phải giống nhưAlignment(1.0, 0.0)

Alignment.topCenterĐiểm chính giữa dọc theo cạnh trên giống như Alignment(0.0, -1.0)

Alignment.topLeftGóc trên cùng bên trái giống vớiAlignment(-1.0, -1.0)

Alignment.topRightGóc trên cùng bên phải giống vớiAlignment(1.0, -1.0)

Bạn có thể sử dụng FractionalOffset Class với alignment property.

FractionalOffsetAlignment là hai đại diện khác nhau của cùng một thông tin: vị trí bên trong hình chữ nhật so với kích thước của hình chữ nhật. Sự khác biệt giữa hai class là trong hệ thống tọa độ mà chúng sử dụng để biểu diễn vị trí.

FractionalOffset sử dụng hệ tọa độ có điểm gốc ở góc trên bên trái của hình chữ nhật trong khi Alignment sử dụng hệ tọa độ có điểm gốc ở tâm hình chữ nhật.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    child: new Text("Flutter Cheatsheet",
      style: TextStyle(
        fontSize: 20.0
      ),
    ),
    alignment: FractionalOffset(0.5, 0.5),
  ),
);

Bạn cũng có thể sử dụng một tên cố định với class FractionalOffset

FractionalOffset.bottomCenterĐiểm chính giữa dọc theo cạnh dưới giống vớiFractionalOffset(0.5, 1.0)

FractionalOffset.bottomLeftGóc dưới bên trái giống vớiFractionalOffset(0.0, 1.0)

FractionalOffset.bottomRightGóc dưới cùng bên phải giống vớiFractionalOffset(1.0, 1.0)

FractionalOffset.centerĐiểm trung tâm, theo cả chiều ngang và chiều dọc giống nhưFractionalOffset(0.5, 0.5)

FractionalOffset.centerLeftĐiểm chính giữa dọc theo cạnh trái giống vớiFractionalOffset(0.0, 0.5)

FractionalOffset.centerRightĐiểm trung tâm dọc theo cạnh bên phải giống nhưFractionalOffset(1.0, 0.5)

FractionalOffset.topCenterĐiểm chính giữa dọc theo cạnh trên giống vớiFractionalOffset(0.5, 0.0)

FractionalOffset.topLeft Góc trên bên trái giống vớiFractionalOffset(0.0, 0.0)

FractionalOffset.topRightGóc trên cùng bên phải giống vớiFractionalOffset(1.0, 0.0)

Bạn có thể sử dụng AlignmentDirectional Class với alignment property.

Offset được biểu thị dưới dạng một phần của Size, nhưng có horizontal component phụ thuộc vào writing direction.

Điều này có thể được sử dụng để chỉ ra offset từ bên trái trong văn bản TextDirection.ltr và offset từ bên phải trong văn bản TextDirection.rtl mà không cần phải biết text direction hiện tại.

Bạn cũng có thể sử dụng một tên cố định với class AlignmentDirectional

AlignmentDirectional.bottomCenterĐiểm chính giữa dọc theo cạnh dưới giống nhưAlignmentDirectional(0.0, 1.0)

AlignmentDirectional.bottomEndGóc dưới cùng ở phía "cuối" giống vớiAlignmentDirectional(1.0, 1.0)

AlignmentDirectional.bottomStartGóc dưới cùng ở phía "bắt đầu" giống vớiAlignmentDirectional(-1.0, 1.0)

AlignmentDirectional.centerĐiểm trung tâm, theo cả chiều ngang và chiều dọc giống nhưAlignmentDirectional(0.0, 0.0)

AlignmentDirectional.centerEndĐiểm trung tâm dọc theo cạnh "cuối" giống nhưAlignmentDirectional(1.0, 0.0)

AlignmentDirectional.centerStartĐiểm chính giữa dọc theo cạnh "bắt đầu" giống nhưAlignmentDirectional(-1.0, 0.0)

AlignmentDirectional.topCenterĐiểm chính giữa dọc theo cạnh trên giống nhưAlignmentDirectional(0.0, -1.0)

AlignmentDirectional.topEndGóc trên cùng ở phía "cuối" giống vớiAlignmentDirectional(1.0, -1.0)

AlignmentDirectional.topEndGóc trên cùng ở phía "bắt đầu" giống vớiAlignmentDirectional(-1.0, -1.0)

Constraints Property

Constraint chỉ là một thuộc tính chỉ định kích thước hoặc không gian mà một widget có thể lấy. Hầu hết các widget và giao diện người dùng có thể được xây dựng bằng cách sử dụng BoxConstraint đơn giản.

BoxConstraint chỉ quan tâm đến minWidth, maxWidth, minHeight maxHeight.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      constraints: BoxConstraints(
          maxHeight: 300.0,
          maxWidth: 200.0,
          minWidth: 150.0,
          minHeight: 150.0
      ),
    ),
  ),
);

Như chúng ta đã biết trước đây, nếu container widget không có child, nó sẽ tự động lấp đầy vùng đã cho trên màn hình và bởi vì chúng ta có chiều rộng tối đa và chiều cao tối đa nên container sẽ lấp đầy kích thước vùng của chiều rộng tối đa và chiều cao tối đa.

Hãy thêm Text widget vào container.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      child: Text("Flutter"),
      constraints: BoxConstraints(
          maxHeight: 300.0,
          maxWidth: 200.0,
          minWidth: 150.0,
          minHeight: 150.0
      ),
    ),
  ),
);

Bởi vì có child trong container, nó sẽ wrap chiều cao và chiều rộng của child element đã cho và vì chúng ta có chiều rộng tối thiểu và chiều cao tối thiểu, vì vậy nó sẽ lấy kích thước đã cho trong BoxConstraints.

Hãy thử với một văn bản dài.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      child: Text("Flutter Cheatsheet Flutter Cheatsheet"),
      constraints: BoxConstraints(
          maxHeight: 300.0,
          maxWidth: 200.0,
          minWidth: 150.0,
          minHeight: 150.0
      ),
    ),
  ),
);

Chúng ta có thể thấy trong ảnh chụp màn hình, container không thể sử dụng nhiều hơn chiều rộng tối đa và chiều cao tối đa.

Nếu chúng ta cần mở rộng container của mình đến kích thước tối đa ngay cả khi container có child, chúng ta có thể sử dụng BoxConstraints.expand()

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      child: Text("Flutter"),
      constraints: BoxConstraints.expand(),
    ),
  ),
);

Chúng ta có thể thấy rằng container đã không wrap chiều cao và chiều rộng của child element đã cho, nó đã sử dụng đến mức tối đa.

Bạn cũng có thể thiết lập chiều rộng và chiều cao dưới dạng tham số.

Margin Property

Margin chỉ là một thuộc tính chỉ định để thêm không gian trống bao quanh container bằng cách sử dụng giá trị không đổi EdgeInsets.

EdgeInsets.all()

nếu bạn cần canh lề ở tất cả các bên

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      margin: new EdgeInsets.all(20.0),
    ),
  ),
);

EdgeInsets.symmetric()

Nếu bạn cần thêm lề với các hiệu số dọc và/hoặc ngang đối xứng

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      margin: new EdgeInsets.symmetric(
        vertical: 20.0,
        horizontal: 50.0
      ),
    ),
  ),
);

EdgeInsets.fromLTRB()
Nếu bạn cần thêm lề từ các hiệu số từ trái, trên, phải và dưới.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      margin: new EdgeInsets.fromLTRB(20.0, 30.0, 40.0, 50.0),
    ),
  ),
);

EdgeInsets.only()
Nếu bạn cần thêm lề chỉ với các giá trị đã cho khác 0.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      color: Colors.green,
      margin: new EdgeInsets.only(
        left: 20.0,
        bottom: 40.0,
        top: 50.0
      ),
    ),
  ),
);

Padding Property

Padding chỉ là một thuộc tính được chỉ định để thêm không gian trống bên trong container bằng cách sử dụng một giá trị không đổi EdgeInsets giống như lề.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      margin: new EdgeInsets.only(
          left: 20.0,
          bottom: 40.0,
          top: 50.0
      ),
      padding: new EdgeInsets.all(40.0),
      color: Colors.green,
      child: Text("Flutter Cheatsheet"),
      constraints: BoxConstraints.expand(),
    ),
  ),
);

ForegroundDecoration Property

A decoration property can be applied in front of the given container.

The value can be

  • BoxDecoration Class
  • FlutterLogoDecoration Class
  • ShapeDecoration Class
  • UnderlineTabIndicator Class

We will talk about the above class later in a different article

Decoration Property

Decoration property có thể được áp dụng phía sau container đã cho.

Giá trị có thể là:

  • class BoxDecoration
  • class FlutterLogoDecoration
  • class ShapeDecoration
  • class UnderlineTabIndicator

Transform Property

Thực hiện chuyển đổi trên container khi nó được bố trí. Chúng ta sử dụng class Matrix làm giá trị.

Center(
  child: Container(
    color: Color.fromARGB(255, 66, 165, 245),
    alignment: AlignmentDirectional(0.0, 0.0),
    child: Container(
      padding: new EdgeInsets.all(40.0),
      color: Colors.green,
      child: Text("Flutter Cheatsheet"),
      transform: new Matrix4.rotationZ(0.5)
    ),
  ),
);

Hy vọng bạn sẽ thích bài viết này!

Bài viết được lược dịch từ Julien Louage.

Bài viết liên quan

Fix lỗi Flutter 3 không thể build app trên iOS

Cách fix lỗi Flutter 3 không thể build và run được app trên iOS với video hướng dẫn chia tiết...

Fix lỗi Flutter 3 không thể build app trên iOS
Flutter Coding UI Speed Code

Nhận bản UI siêu đẹp nhưng làm sao để phân tích rồi code ra một cách chính xác nhất? Series này 200Lab sẽ cho bạn một góc nhìn thực tế về quá trình code UI cho app Movie Ticket....

Flutter Coding UI Speed Code
Flutter 3 - Những cập nhật mới có gì hot

Bài viết này cung cấp cho bạn những thông tin cập nhật mới nhất của Flutter 3, giúp bạn có cái nhìn tổng quan về các thay đổi và tính năng bổ ích...

Flutter 3 - Những cập nhật mới có gì hot
Mọi thứ bạn cần biết về Route Transition của Flutter

Chúng ta cũng có thể kết hợp nhiều transition để tạo ra thứ gì đó tuyệt vời như scale và rotate cùng một lúc....

Mọi thứ bạn cần biết về Route Transition của Flutter
Hướng dẫn custom RenderObject của riêng bạn

Khi "khám phá" source code Flutter, bạn sẽ phát hiện ra rằng phần lớn các widget không sử dụng composition hay CustomPaint. Thay vào đó, chúng sử dụng RenderObject...

Hướng dẫn custom RenderObject của riêng bạn
You've successfully subscribed to 200Lab Blog
Great! Next, complete checkout for full access to 200Lab Blog
Xin chào mừng bạn đã quay trở lại
OK! Tài khoản của bạn đã kích hoạt thành công.
Success! Your billing info is updated.
Billing info update failed.
Your link has expired.