You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.1 KiB

package com.gyf.csams.uikit
import androidx.compose.material.SnackbarDuration
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.orhanobut.logger.Logger
interface FormLength{
val nameLengthError:String
}
abstract class FormName<T>(val formDesc:String){
protected val _formValue= MutableLiveData<T>()
val formValue: LiveData<T> = _formValue
val formPlaceholder="请输入$formDesc"
abstract fun onChange(value:T)
}
/**
* 文本输入框控制
*
* @property textLength
* @constructor
*
* @param formDesc
*/
open class StringForm(formDesc: String, val textLength: Int) : FormName<String>(formDesc = formDesc),
FormLength {
constructor(formDesc: String,textLength: Int,value:String) : this(formDesc = formDesc,textLength = textLength) {
_formValue.value=value
}
override val nameLengthError="${formDesc}不能超过最大长度$textLength"
override fun onChange(value: String) {
if(value.length>textLength){
_formValue.value=value.slice(IntRange(0,textLength-1))
}else{
_formValue.value=value
}
Logger.i("${formDesc}更新值:${_formValue.value}")
}
}
data class SnackBar(val message:String?, val actionLabel:String?=null,val duration: SnackbarDuration=SnackbarDuration.Short, val callback: () -> Unit?)
/**
* snackbar
*
*/
class ScaffoldModel:ViewModel(){
private val _data=MutableLiveData<SnackBar>()
val data:LiveData<SnackBar> = _data
fun update(message:String?=null,actionLabel: String? = null,callback: () -> Unit? = {}){
if(message==null){
_data.value=null
}else {
_data.value = SnackBar(message = message, actionLabel = actionLabel,callback = callback)
}
}
}
abstract class ScrollList<T>:ViewModel(){
protected val _data=MutableLiveData<MutableList<T>>(mutableListOf())
val data:LiveData<MutableList<T>> = _data
abstract val initSize:Int
//加载列表
abstract fun load()
//加载更多数据
abstract fun loadMore(callback:(message:String) -> Unit)
}