0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng dẫn Kotlin Flow phần 3: Tìm hiểu SharedFlow và StateFlow cho ứng dụng Android

Đăng vào 3 tuần trước

• 2 phút đọc

Hướng dẫn Kotlin Flow phần 3: Tìm hiểu SharedFlow và StateFlow cho ứng dụng Android

Chào mừng bạn đến với phần cuối cùng trong loạt bài Kotlin Cheat Sheet. Trong bài viết này, chúng ta sẽ tìm hiểu hai kiểu flow đặc biệt trong Kotlin Flow là SharedFlowStateFlow. Đây là những công cụ mạnh mẽ giúp chia sẻ trạng thái và sự kiện giữa các thành phần khác nhau trong ứng dụng Android của bạn.

SharedFlow: Khái niệm cơ bản

SharedFlow là một loại hot stream, có thể gửi các giá trị đến nhiều receiver cùng một lúc. Những đặc điểm nổi bật của SharedFlow bao gồm:

  • Có thể có nhiều consumer nhận giá trị giống nhau.
  • Luôn hoạt động cho đến khi scope của nó bị đóng.
  • Có phiên bản có thể thay đổi là MutableSharedFlow, cho phép emit các giá trị mới thông qua phương thức emit.
  • Hỗ trợ cấu hình như chế độ replay và tràn buffer.

Các tham số cấu hình của MutableSharedFlow

kotlin Copy
public fun <T> MutableSharedFlow(
    replay: Int = 0,
    extraBufferCapacity: Int = 0,
    onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
): MutableSharedFlow<T>

Chuyển đổi Flow thành SharedFlow

Sử dụng shareIn để biến một Flow thành SharedFlow:

kotlin Copy
myFlow.shareIn(
    scope = viewModelScope,
    started = SharingStarted.Lazily
)

Trường hợp sử dụng: Quan sát thay đổi từ cơ sở dữ liệu

Nếu bạn sử dụng Room, bạn có thể sử dụng SharedFlow để tránh việc đọc dữ liệu nhiều lần từ đĩa:

kotlin Copy
suspend fun getUserSettings(): SharedFlow<List<UserSettings>> {
    return dao.getAll().shareIn(
        scope = this,
        started = SharingStarted.Lazily,
        replay = 1
    )
}

StateFlow: Khái niệm cơ bản

StateFlow là một biến thể của SharedFlow nhưng chỉ lưu trữ một giá trị nhất định duy nhất. Tương tự như LiveData, StateFlow có thể được sử dụng để quản lý trạng thái trong ứng dụng:

kotlin Copy
val state = MutableStateFlow("A") // Giá trị ban đầu
state.value = "B"  // Đặt giá trị thành B

Chuyển đổi Flow thành StateFlow

Sử dụng stateIn để chuyển một Flow thành StateFlow:

kotlin Copy
val myState: StateFlow<MyState> = myFlow
    .map { /* xử lý dữ liệu */ }
    .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), MyState.Loading)

Kết thúc

Cảm ơn bạn đã theo dõi chuỗi bài viết về Kotlin Flow. Hy vọng rằng những kiến thức này sẽ giúp bạn tự tin hơn trong việc làm việc với Kotlin Coroutines và Flow trong các ứng dụng Android của mình. Hãy tiếp tục khám phá thế giới lập trình Kotlin và đón chờ những bài viết tiếp theo nhé!

Tài nguyên tham khảo

Bài viết được cung cấp bởi Henry Techie. Theo dõi chúng tôi trên:

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào