
Chào mừng các bạn đến với buổi học hôm nay, nơi chúng ta sẽ cùng "mổ xẻ" một trong những "trụ cột" quan trọng nhất của trải nghiệm người dùng trên các ứng dụng di động: BottomNavigationBarItem. Hãy hình dung nó như những "tấm vé thông hành" hay những "biểu tượng chỉ dẫn" nằm trên một "bảng điều khiển trung tâm" ở cuối màn hình – cái mà chúng ta gọi là BottomNavigationBar.
BottomNavigationBarItem là gì và để làm gì?
Trong vũ trụ Flutter bao la, BottomNavigationBarItem chính là linh hồn của mỗi nút bấm trên thanh điều hướng dưới cùng của ứng dụng. Mỗi BottomNavigationBarItem đại diện cho một "điểm đến" chính, một "ngăn kéo" chứa đựng những tính năng cốt lõi, hay một "chương" quan trọng trong câu chuyện ứng dụng của bạn.
Mục đích của nó? Đơn giản mà hiệu quả: giúp người dùng dễ dàng "nhảy" qua lại giữa các màn hình chức năng chính mà không cần phải "lặn lội" vào menu hamburger phức tạp hay phải "bơi" qua hàng tá màn hình con. Nó giống như việc bạn có một bản đồ với các điểm POI (Point of Interest) được đánh dấu sẵn, chỉ cần chạm nhẹ là đến nơi, không sợ lạc lối.
Một BottomNavigationBarItem cơ bản bao gồm hai thành phần chính:
icon: Biểu tượng trực quan, như một "cờ hiệu" để người dùng nhận diện nhanh chóng chức năng của mục đó.label: Đoạn văn bản mô tả ngắn gọn, "tên gọi" chính thức của điểm đến.
Ngoài ra, nó còn có activeIcon (biểu tượng khi được chọn, như tấm vé phát sáng khi bạn dùng nó) và backgroundColor (màu nền riêng cho item, tuy ít dùng trực tiếp).

Code Ví Dụ Minh Hoạ: Xây dựng "Bảng Điều Khiển" của bạn
Để các bạn dễ hình dung, chúng ta hãy cùng xây dựng một ứng dụng Flutter nhỏ với BottomNavigationBar và ba BottomNavigationBarItems cơ bản. Đây là cách chúng ta "đóng gói" các điểm đến của mình:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Bottom Nav Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _selectedIndex = 0; // Index của item hiện tại được chọn
// Danh sách các màn hình tương ứng với mỗi item trên BottomNavigationBar
static const List<Widget> _widgetOptions = <Widget>[
Text('Trang Chủ', style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
Text('Tìm Kiếm', style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
Text('Cài Đặt', style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Ứng dụng với Bottom Nav'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex), // Hiển thị màn hình tương ứng
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home), // Biểu tượng khi không được chọn
activeIcon: Icon(Icons.home_filled), // Biểu tượng khi được chọn
label: 'Trang Chủ',
),
BottomNavigationBarItem(
icon: Icon(Icons.search), // Biểu tượng khi không được chọn
activeIcon: Icon(Icons.search_rounded), // Biểu tượng khi được chọn
label: 'Tìm Kiếm',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings), // Biểu tượng khi không được chọn
activeIcon: Icon(Icons.settings_applications), // Biểu tượng khi được chọn
label: 'Cài Đặt',
),
],
currentIndex: _selectedIndex, // Đánh dấu item hiện tại đang được chọn
selectedItemColor: Colors.amber[800], // Màu sắc của item được chọn
onTap: _onItemTapped, // Hàm xử lý khi người dùng chạm vào item
),
);
}
}
Trong ví dụ trên, chúng ta đã tạo một BottomNavigationBar chứa một danh sách các BottomNavigationBarItem. Mỗi item có một icon và label riêng. Khi người dùng chạm vào một item, hàm _onItemTapped sẽ được gọi, cập nhật _selectedIndex và hiển thị màn hình tương ứng.
Mẹo Vặt & Best Practices Từ Giảng Viên Lão Luyện
Để BottomNavigationBarItem của bạn không chỉ đẹp mà còn "thông minh" và "thân thiện", hãy ghi nhớ vài "kim chỉ nam" sau:
- Số Lượng Vàng: 3-5 item là con số lý tưởng. Ít quá có thể bỏ lỡ các tính năng quan trọng, nhiều quá sẽ làm thanh điều hướng trở nên chật chội, khó bấm và gây "nhiễu loạn" thị giác. Hãy nghĩ đến một "bảng điều khiển" gọn gàng, không phải "bảng điều khiển" của tàu vũ trụ.
- Icon Phải "Nói Lên Tất Cả": Chọn những biểu tượng rõ ràng, dễ hiểu, mang tính biểu tượng cao. Tránh dùng những icon trừu tượng hay "đánh đố" người dùng. Mục đích là để họ "nhìn là hiểu", không phải "nhìn là đoán". Ví dụ,
homecho trang chủ,searchcho tìm kiếm. - Label Ngắn Gọn, Súc Tích: Tên gọi nên dưới 1-2 từ. "Trang Chủ", "Khám Phá", "Hồ Sơ" là những ví dụ tuyệt vời. Tránh "Trang chủ của tôi" hay "Tìm kiếm sản phẩm". Ngắn gọn là vàng!
- Nhất Quán Là Chìa Khóa: Giữ phong cách thiết kế (flat, outline, filled) và màu sắc của các icon nhất quán. Điều này tạo cảm giác chuyên nghiệp và dễ chịu cho mắt người dùng. Đừng để mỗi item là một "cá tính" riêng, hãy để chúng là một "đội nhóm" hòa hợp.
- Tận Dụng
activeIcon: Sử dụngactiveIconđể tạo hiệu ứng "sống động" khi người dùng chọn một mục. Ví dụ, icon rỗng khi chưa chọn, icon đầy khi đã chọn. Điều này giúp người dùng dễ dàng nhận biết họ đang ở "đâu" trong ứng dụng. - Kiểm Tra Khả Năng Tiếp Cận (Accessibility): Đảm bảo kích thước chạm của mỗi item đủ lớn (thường là 48x48 logical pixels) và độ tương phản màu sắc giữa icon/label với nền đủ cao để người dùng có vấn đề về thị giác vẫn có thể sử dụng dễ dàng.
Ứng Dụng Thực Tế: Ai Đã Dùng "La Bàn" Này?
Bạn có thể thấy BottomNavigationBarItem "hiện diện" ở hầu hết các ứng dụng di động mà bạn sử dụng hàng ngày. Nó là một "người bạn đồng hành" quen thuộc, một "công cụ điều hướng" không thể thiếu:
- Mạng xã hội: Facebook, Instagram, TikTok – các tab "Trang chủ", "Khám phá", "Tạo bài viết", "Thông báo", "Hồ sơ" là những ví dụ điển hình.
- Thương mại điện tử: Shopee, Lazada, Tiki – các tab "Trang chủ", "Danh mục", "Giỏ hàng", "Thông báo", "Tài khoản".
- Ngân hàng di động: MB Bank, Techcombank – các tab "Trang chủ", "Chuyển tiền", "Thanh toán", "Tiết kiệm", "Tiện ích".
- Ứng dụng giao hàng: Grab, Gojek – các tab "Trang chủ", "Đơn hàng", "Ví", "Ưu đãi", "Tài khoản".
Những ứng dụng này đều tận dụng triệt để BottomNavigationBarItem để mang lại trải nghiệm điều hướng nhanh chóng, trực quan và hiệu quả, giúp người dùng dễ dàng tiếp cận các tính năng cốt lõi mà không cần phải "đau đầu" tìm kiếm.
Hy vọng qua buổi học này, các bạn đã "thấm nhuần" được tầm quan trọng và cách sử dụng BottomNavigationBarItem một cách "nghệ thuật" nhất. Hãy thực hành và biến những "tấm vé thông hành" này thành những "điểm nhấn" không thể thiếu trong ứng dụng của mình nhé!
Thuộc Series: Flutter
Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!