Key giúp Flutter giữ đúng danh tính (identity) của widget/element khi cây dựng lại — quyết định element nào khớp với widget nào trong quá trình diff.
Cần key khi:
- Có danh sách widget cùng kiểu thay đổi thứ tự/thêm/xóa (ví dụ list các StatefulWidget); không có key, Flutter khớp theo vị trí nên state có thể "nhảy" sai phần tử.
- Muốn giữ state khi widget di chuyển vị trí trong cây.
Loại thường dùng: ValueKey (theo giá trị định danh), ObjectKey, UniqueKey, và GlobalKey (truy cập state/toàn cục — dùng dè dặt vì tốn kém). Với widget stateless tĩnh, thường không cần key.