Trong Flutter, UI được mô tả bằng cây các widget — mỗi widget là một mô tả bất biến (immutable) của một phần giao diện.
- Everything is a widget: layout (
Row,Column,Padding), thành phần hiển thị (Text,Image), cả cấu trúc app (MaterialApp,Scaffold) đều là widget → ghép (compose) lồng nhau thay vì kế thừa. - Flutter duy trì 3 cây song song: Widget (cấu hình), Element (thể hiện đang gắn trong cây, giữ state), RenderObject (đo đạc + vẽ).
- Khi state đổi, framework dựng lại cây widget mới rồi so khớp (diff) với element cũ để cập nhật tối thiểu.
Ý chính: bạn mô tả UI khai báo theo state hiện tại, framework lo phần cập nhật.