AppBar — nó là gì, cấu hình và widget Flutter

Tác giả: IT Sectr Đã đăng: 2026-07-02 Thời gian đọc: 9 phút

AppBar là widget bảng điều khiển phía trên màn hình trong Flutter, triển khai thành phần Material Design với tiêu đề, hành động, nút điều hướng và tab. Không giống như bảng tùy chỉnh dựa trên Row hoặc Stack, AppBar cung cấp kiến trúc có sẵn với chiều cao chính xác 56dp (48dp ở trạng thái thu gọn) và xử lý SafeArea tự động. Theo Flutter API Reference (2026), AppBar hỗ trợ hoạt ảnh cuộn qua SliverAppBar và tích hợp với Material 3 qua tham số forceMaterialTransparency. Trong một ứng dụng di động điển hình, AppBar hoạt động như một trung tâm điều hướng và thông tin, kết hợp tiêu đề trang, hành động hệ thống và chuyển đổi giữa các phần.

Những điểm chính

  • AppBar — widget bảng điều khiển phía trên trong Flutter với tiêu đề, actions, leading và hỗ trợ TabBar và Material 3
  • Title — văn bản tiêu đề, được căn giữa hoặc căn trái tùy theo nền tảng
  • Actions — danh sách widget hành động (IconButton, PopupMenuButton) được đặt ở bên phải trong AppBar
  • Leading — nút điều hướng bên trái (biểu tượng “bánh hamburger” cho Drawer hoặc nút “Quay lại” cho màn hình lồng nhau)
  • Bottom — khu vực phía dưới của AppBar để nhúng TabBar, PreferredSize hoặc widget tùy chỉnh

AppBar trong Flutter là gì

AppBar là thành phần bảng điều khiển phía trên Material tiêu chuẩn xuất hiện ở đầu Scaffold. Nó chứa tiêu đề màn hình, nút điều hướng (thường là biểu tượng “bánh hamburger” hoặc mũi tên “Quay lại”) và các hành động — biểu tượng mở tìm kiếm, cài đặt hoặc các chức năng khác. AppBar tự động thích ứng với nền tảng: trên Android sử dụng bóng đổ Material tiêu chuẩn ở dưới, trên iOS — thiết kế phẳng hơn với độ trong suốt.

AppBar triển khai giao diện PreferredSizeWidget, nghĩa là chiều cao của nó được cố định và biết trước khi xây dựng. Theo mặc định, chiều cao AppBar là 56dp trên Android và 44dp trên iOS ở hướng dọc, có tính đến SafeArea ở phía trên. Tính năng này cho phép Scaffold tính toán trước không gian khả dụng cho body, tránh việc tái tổ hợp trong quá trình kết xuất.

Theo Flutter Material Library Guide (2026), AppBar đã trải qua nhiều lần lặp: trong Flutter 1.x, nó là một container đơn giản với văn bản, trong Flutter 2.x, nó đã có hỗ trợ Material 3 và flexibleSpace, và trong Flutter 3.x — tích hợp với System UI (màu thanh trạng thái, độ trong suốt). AppBar hiện đại hỗ trợ Dynamic Color từ Material You trên các thiết bị Android 12+.

Cấu trúc AppBar: thuộc tính và tham số

AppBar cung cấp một tập hợp các tham số điều khiển từng phần của bảng điều khiển phía trên. Hiểu được các thuộc tính này cho phép tùy chỉnh bảng một cách linh hoạt cho mọi yêu cầu thiết kế mà không cần tạo các giải pháp tùy chỉnh.

Thuộc tínhLoạiMô tả
titleWidget?Tiêu đề chính của bảng, thường là Text với tên màn hình
leadingWidget?Widget ở bên trái tiêu đề (nút “Quay lại” hoặc biểu tượng menu)
actionsList<Widget>?Danh sách widget hành động ở bên phải (IconButton, PopupMenuButton)
bottomPreferredSizeWidget?Khu vực phía dưới cho TabBar hoặc widget tùy chỉnh
flexibleSpaceWidget?Widget nền hoạt ảnh khi cuộn trong SliverAppBar
backgroundColorColor?Màu nền của bảng, ghi đè màu chủ đề
elevationdoubleBóng đổ dưới bảng, tạo hiệu ứng nâng lên trên nội dung
centerTitlebool?Căn giữa tiêu đề (true — hành vi Material 3, false — kiểu Android)

Title và leading: cấu hình tiêu đề và điều hướng

Thuộc tính title chấp nhận bất kỳ widget nào, nhưng phổ biến nhất là sử dụng Text với cấu hình kiểu qua TextStyle. Đối với tiêu đề dài, nên bọc title trong Flexible để văn bản được cắt chính xác khi thiếu không gian. Thuộc tính leading tự động được thay thế bằng BackButton khi điều hướng đến màn hình lồng nhau qua Navigator.push, nếu không được đặt rõ ràng.

Actions: đặt biểu tượng hành động

Danh sách actions chứa các widget được căn về mép phải của AppBar. Mỗi phần tử không được rộng hơn 48dp (tiêu chuẩn Material Design). Để nhóm các hành động, hãy sử dụng PopupMenuButton — thao tác này ẩn các tùy chọn ít quan trọng hơn trong trình đơn thả xuống và tuân thủ các khuyến nghị của Material về mật độ giao diện.

Tùy chỉnh AppBar: kiểu, màu sắc và hành vi

AppBar hỗ trợ tùy chỉnh sâu thông qua các thuộc tính màu sắc, bóng đổ và khoảng đệm. Kiểu dáng cơ bản được kế thừa từ chủ đề ứng dụng, nhưng mỗi thuộc tính có thể được ghi đè riêng lẻ. Hãy xem xét các kịch bản cấu hình chính.

Màu nền của AppBar được đặt qua backgroundColor. Nếu không được chỉ định, appBarTheme từ ThemeData sẽ được sử dụng. Trong Material 3, màu AppBar tự động được tính từ ColorScheme.primary, nhưng có thể được ghi đè cho một màn hình cụ thể. Đối với AppBar trong suốt (thường được sử dụng trong hồ sơ), hãy đặt backgroundColor: Colors.transparent với elevation: 0.

Thuộc tính elevation điều khiển bóng đổ dưới AppBar. Giá trị 0 loại bỏ bóng đổ, tạo hiệu ứng bảng “phẳng”, phù hợp với Material 3. Giá trị 4 tạo bóng đổ Material Design tiêu chuẩn. Để điều khiển bóng đổ tùy chỉnh, hãy sử dụng shadowColor — màu bóng giúp phân cách trực quan bảng điều khiển khỏi nội dung.

Để điều khiển màu văn bản trong AppBar, hãy sử dụng foregroundColor. Thuộc tính này ảnh hưởng đến màu của tiêu đề, biểu tượng và văn bản trong actions. Khi thay đổi backgroundColor, foregroundColor tương phản sẽ tự động được chọn, nhưng có thể được ép buộc cho các thiết kế không tiêu chuẩn.

SliverAppBar: phiên bản hoạt ảnh của AppBar

SliverAppBar là phần mở rộng của AppBar để sử dụng trong CustomScrollView, hỗ trợ hoạt ảnh khi cuộn: thu gọn, hiệu ứng thị sai và ghim. Không giống như AppBar tiêu chuẩn, SliverAppBar là widget sliver và có thể thay đổi kích thước một cách động tùy theo vị trí cuộn.

Các chế độ chính của SliverAppBar được xác định bởi sự kết hợp của các thuộc tính pinned, floating và snap. Ở chế độ pinned, bảng luôn hiển thị ở đầu màn hình. Ở chế độ floating, nó xuất hiện khi cuộn ngược lại. Sự kết hợp floating + snap tạo ra hành vi bảng “dính” xuất hiện khi cuộn lên dù chỉ một chút, thường được sử dụng trong bảng tin tức.

Theo Flutter API SliverAppBar (2026), để sử dụng SliverAppBar, cần thay thế ListView hoặc Column thông thường bằng CustomScrollView chứa các widget sliver. Scaffold vẫn hoạt động chính xác, nhưng thuộc tính appBar của Scaffold phải là null — SliverAppBar được đặt trong CustomScrollView như sliver đầu tiên.

Ví dụ cấu hình AppBar trong ứng dụng

Hãy xem một ví dụ về AppBar với tìm kiếm, trình đơn thả xuống và TabBar. Đoạn mã này minh họa một cấu hình bảng điều khiển phía trên điển hình trong ứng dụng Flutter sản xuất.

dart
Scaffold(
  appBar: AppBar(
    title: const Text('Danh mục'),
    centerTitle: true,
    leading: IconButton(
      icon: const Icon(Icons.menu),
      onPressed: () => Scaffold.of(context).openDrawer(),
    ),
    actions: [
      IconButton(
        icon: const Icon(Icons.search),
        onPressed: () => showSearch(context: context, delegate: ProductSearch()),
      ),
      PopupMenuButton<String>(
        onSelected: (String value) {},
        itemBuilder: (context) => [
          const PopupMenuItem(value: 'settings', child: Text('Cài đặt')),
          const PopupMenuItem(value: 'about', child: Text('Giới thiệu Ứng dụng')),
        ],
      ),
    ],
    bottom: const TabBar(
      tabs: [
        Tab(text: 'All'),
        Tab(text: 'New'),
        Tab(text: 'Popular'),
      ],
    ),
  ),
  body: const TabBarView(
    children: [
      AllProductsPage(),
      NewProductsPage(),
      PopularProductsPage(),
    ],
  ),
)

Trong ví dụ, AppBar chứa tiêu đề được căn giữa, nút mở Drawer ở bên trái, biểu tượng tìm kiếm và trình đơn thả xuống ở bên phải. TabBar ở phía dưới cho phép chuyển đổi giữa các danh mục sản phẩm. Cấu hình này bao phủ hầu hết các kịch bản ứng dụng di động: điều hướng, tìm kiếm, tùy chọn bổ sung và chuyển đổi phần — tất cả trong một bảng điều khiển phía trên duy nhất.

Câu hỏi thường gặp

Làm thế nào để thay đổi chiều cao AppBar trong Flutter?

Chiều cao của AppBar được cố định (56dp) và không thể thay đổi trực tiếp. Để có chiều cao tùy chỉnh, hãy sử dụng PreferredSize bao bọc một widget tùy chỉnh có chiều cao mong muốn. Ngoài ra, hãy sử dụng SliverAppBar với collapsedHeight để quản lý kích thước linh hoạt ở trạng thái thu gọn mà không mất chức năng bảng tiêu chuẩn.

Làm thế nào để xóa bóng đổ dưới AppBar?

Đặt thuộc tính elevation: 0 trong trình tạo AppBar. Thao tác này sẽ xóa bóng đổ và làm cho bảng trở nên phẳng về mặt thị giác, phù hợp với phong cách Material 3. Để kiểm soát hoàn toàn, hãy sử dụng shadowColor: Colors.transparent để ghi đè màu bóng mà không thay đổi elevation, nếu bạn cần giữ nguyên tọa độ z.

AppBar khác SliverAppBar như thế nào?

AppBar là bảng tĩnh có chiều cao cố định, được đặt trong Scaffold.appBar. SliverAppBar là phiên bản động được sử dụng trong CustomScrollView, có thể thu gọn, ghim và hoạt ảnh khi cuộn. SliverAppBar cung cấp các thuộc tính collapsedHeight, expandedHeight, pinned và floating để quản lý linh hoạt hành vi cuộn.

Làm thế nào để thêm tìm kiếm vào AppBar?

Thêm IconButton với biểu tượng tìm kiếm vào danh sách actions. Khi nhấn, bạn có thể gọi showSearch với SearchDelegate tùy chỉnh để mở màn hình tìm kiếm với hoạt ảnh tự động. Ngoài ra, hãy thay thế title bằng TextField, biến AppBar thành thanh tìm kiếm tại chỗ, thuận tiện cho danh mục và danh sách.

Tại sao tiêu đề không được căn giữa trong AppBar?

Theo mặc định centerTitle là null và hành vi phụ thuộc vào nền tảng: trên Android, tiêu đề được căn trái, trên iOS — căn giữa. Đặt rõ ràng centerTitle: true để buộc căn giữa trên cả hai nền tảng. Nếu tiêu đề không được căn giữa do leading, hãy kiểm tra leading không phải là null — sự hiện diện của nó sẽ đẩy tiêu đề sang phải.

Tổng kết

  • AppBar — bảng điều khiển phía trên tiêu chuẩn trong Flutter với tiêu đề, leading, actions và bottom cho TabBar, tự động xử lý SafeArea
  • Title — yếu tố trung tâm của bảng, chấp nhận bất kỳ widget nào với cấu hình căn giữa qua centerTitle
  • Actions — danh sách widget hành động ở bên phải, mỗi widget rộng đến 48dp theo tiêu chuẩn Material Design
  • Leading — nút điều hướng bên trái, tự động được thay thế bằng BackButton khi điều hướng đến màn hình lồng nhau
  • SliverAppBar — phần mở rộng AppBar cho CustomScrollView hỗ trợ thu gọn, ghim và hiệu ứng thị sai
  • Material 3 — AppBar hỗ trợ Dynamic Color, độ trong suốt và NavigationBar qua tham số forceMaterialTransparency
  • Tùy chỉnh — các thuộc tính backgroundColor, elevation, foregroundColor và shadowColor cho phép điều chỉnh trực quan chính xác cho thiết kế dự án

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm