Theo nghĩa rộng nhất có thể, trạng thái của ứng dụng là mọi thứ tồn tại trong bộ nhớ khi ứng dụng đang chạy. Điều này bao gồm nội dung của ứng dụng, tất cả các biến mà khung Flutter lưu giữ về giao diện người dùng, trạng thái hoạt ảnh, kết cấu, phông chữ, v.v. Mặc dù định nghĩa rộng nhất có thể này về trạng thái là hợp lệ, nhưng nó không hữu ích lắm cho việc kiến trúc một ứng dụng.
Đầu tiên, bạn thậm chí không quản lý một số trạng thái (như kết cấu). Khung xử lý những điều đó cho bạn. Vì vậy, một định nghĩa hữu ích hơn về trạng thái là “bất kỳ dữ liệu nào bạn cần để xây dựng lại giao diện người dùng của bạn bất kỳ lúc nào”. Thứ hai, trạng thái mà bạn tự quản lý có thể được tách thành hai loại khái niệm: ephemeral state and app state.
Ephemeral state
Ephemeral state (đôi khi được gọi là UI state or local state) là trạng thái bạn có thể chứa gọn gàng trong một tiện ích con.
Đây là một định nghĩa mơ hồ, vì vậy đây là một vài ví dụ:
- Page hiện tại trong PageView
- Tiến hành hiện tại trong một animation phức tạp.
- Tab được chọn hiện tại trong BottomNavigationBar.
Các phần khác của widget tree hiếm khi cần phải truy cập vào loại trạng thái này. Không cần phải tuần tự hóa nó và nó không thay đổi theo những cách phức tạp.
Nói cách khác, không cần sử dụng các kỹ thuật quản lý trạng thái (ScopedModel, Redux, v.v.) trên loại trạng thái này. Tất cả những gì bạn cần là một StatefulWidget.
Dưới đây, bạn thấy cách mục hiện được chọn trong thanh điều hướng dưới cùng được giữ trong trường _index của lớp _MyHomepageState. Trong ví dụ này, _index là ephemeral state.
Ở đây, việc sử dụng setState() và một trường bên trong lớp StatefulWidget’s State là hoàn toàn tự nhiên. Không phần nào khác trong ứng dụng của bạn cần truy cập _index. Biến chỉ thay đổi bên trong tiện ích MyHomepage. Và, nếu người dùng đóng và khởi động lại ứng dụng, bạn đừng bận tâm rằng _index đặt lại về 0.
App state
Đây không phải là ephemeral state mà bạn muốn chia sẻ trên nhiều phần của ứng dụng và bạn muốn giữ lại giữa các phiên của người dùng, chúng ta gọi là application state (đôi khi còn được gọi shared state).
Ví dụ về application state:
- Sở thích của người sử dụng
- Thông tin đăng nhập
- Thông báo trong một ứng dụng mạng xã hội
- Giỏ hàng trong ứng dụng thương mại điện tử
- Trạng thái đã đọc / chưa đọc của các bài báo trong một ứng dụng tin tức
Để quản lý app state, bạn sẽ muốn nghiên cứu các tùy chọn của mình. Lựa chọn của bạn phụ thuộc vào mức độ phức tạp và bản chất của ứng dụng, trải nghiệm trước đây của nhóm bạn và nhiều khía cạnh khác.
Không có quy tắc rõ ràng.
Để rõ ràng hơn, bạn có thể sử dụng State và setState() để quản lý tất cả các trạng thái trong ứng dụng của mình. Trên thực tế, nhóm Flutter thực hiện điều này trong nhiều mẫu ứng dụng đơn giản (bao gồm cả ứng dụng dành cho người mới bắt đầu mà bạn nhận được sau mỗi lần tạo Flutter).
Nó cũng đi theo hướng khác. Ví dụ: bạn có thể quyết định rằng — trong ngữ cảnh của ứng dụng cụ thể của bạn — tab đã chọn trong thanh điều hướng dưới cùng không phải là trạng thái tạm thời. Bạn có thể cần phải thay đổi nó từ bên ngoài lớp học, giữ nó giữa các phiên, v.v. Trong trường hợp đó, biến _index là trạng thái ứng dụng.
Không có quy tắc chung, rõ ràng nào để phân biệt một biến cụ thể là ephemeral sate hay trạng thái ứng dụng. Đôi khi, bạn sẽ phải cấu trúc lại cái này thành cái khác. Ví dụ: bạn sẽ bắt đầu với một số trạng thái rõ ràng là tạm thời, nhưng khi ứng dụng của bạn phát triển về các tính năng, nó có thể cần được chuyển sang app state.
Vì lý do đó, hãy lấy sơ đồ sau với một lượng muối lớn:
Cảm ơn mọi người đã theo dõi.