package com.narutohuo.xindazhou.common.ui import android.view.View import android.widget.Toast import androidx.fragment.app.Fragment import com.google.android.material.snackbar.Snackbar /** * 消息提示管理器 * * 统一封装 Toast 和 Snackbar,提供便捷的消息提示方式 * * 使用方式: * ```kotlin * // Toast 提示 * MessageHelper.showToast("操作成功") * MessageHelper.showSuccess("保存成功") * MessageHelper.showError("操作失败") * * // Snackbar 提示 * MessageHelper.showSnackbar(view, "操作成功") * MessageHelper.showSnackbar(view, "操作失败", "重试") { /* 重试操作 */ } * ``` */ object MessageHelper { /** * 是否使用 Snackbar(默认使用 Toast) * 可以在 Application 中设置为 true,统一使用 Snackbar */ var useSnackbar: Boolean = false /** * Toast 显示时长 */ var toastDuration: Int = Toast.LENGTH_SHORT /** * Snackbar 显示时长(毫秒) */ var snackbarDuration: Int = 2000 /** * 显示 Toast 消息 * * @param view View 上下文(Activity 或 Fragment 的 View) * @param message 消息内容 */ fun showToast(view: View, message: String) { if (useSnackbar) { showSnackbar(view, message) } else { val context = view.context Toast.makeText(context, message, toastDuration).show() } } /** * 显示 Toast 消息(Activity 扩展函数) */ fun androidx.appcompat.app.AppCompatActivity.showToast(message: String) { if (useSnackbar) { val rootView = window.decorView.findViewById(android.R.id.content) showSnackbar(rootView, message) } else { Toast.makeText(this, message, toastDuration).show() } } /** * 显示 Toast 消息(Fragment 扩展函数) */ fun Fragment.showToast(message: String) { if (useSnackbar) { view?.let { showSnackbar(it, message) } } else { Toast.makeText(requireContext(), message, toastDuration).show() } } /** * 显示成功消息 * * @param view View 上下文 * @param message 消息内容 */ fun showSuccess(view: View, message: String) { showToast(view, message) } /** * 显示成功消息(Activity 扩展函数) */ fun androidx.appcompat.app.AppCompatActivity.showSuccess(message: String) { showToast(message) } /** * 显示成功消息(Fragment 扩展函数) */ fun Fragment.showSuccess(message: String) { showToast(message) } /** * 显示错误消息 * * @param view View 上下文 * @param message 消息内容 */ fun showError(view: View, message: String) { showToast(view, message) } /** * 显示错误消息(Activity 扩展函数) */ fun androidx.appcompat.app.AppCompatActivity.showError(message: String) { showToast(message) } /** * 显示错误消息(Fragment 扩展函数) */ fun Fragment.showError(message: String) { showToast(message) } /** * 显示 Snackbar 消息 * * @param view 父 View * @param message 消息内容 * @param actionText 操作按钮文本(可选) * @param action 操作按钮点击回调(可选) */ fun showSnackbar( view: View, message: String, actionText: String? = null, action: (() -> Unit)? = null ) { val snackbar = Snackbar.make(view, message, snackbarDuration) actionText?.let { text -> action?.let { callback -> snackbar.setAction(text) { callback() } } } snackbar.show() } /** * 显示 Snackbar 消息(Activity 扩展函数) */ fun androidx.appcompat.app.AppCompatActivity.showSnackbar( message: String, actionText: String? = null, action: (() -> Unit)? = null ) { val rootView = window.decorView.findViewById(android.R.id.content) showSnackbar(rootView, message, actionText, action) } /** * 显示 Snackbar 消息(Fragment 扩展函数) */ fun Fragment.showSnackbar( message: String, actionText: String? = null, action: (() -> Unit)? = null ) { view?.let { showSnackbar(it, message, actionText, action) } } }