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
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)
|
|
}
|
|
|
|
|
|
|
|
|