Closed dingxiansen1 closed 2 years ago
这里使用Flow出于什么需求?
你不会是打算写:
viewModel里面写个作用域请求数据, 然后无论错误成功都封装到一个自定义liveData里面, 然后赋值给viewModel里面的liveData. 然后在activity监听该liveData. 根据liveData的数据来判断网络请求成功与否?
然后你听说liveData被废弃改用Flow实现?
这套写法我称之为 脱裤子放屁写法
不是,我想把BRV列表的数据请求放到viewmodel里返回 fun getData() : List
Demo里面有ViewModel使用示例 另外scope作用域本身不建议放到ViewModel, 特别是一些UI层的作用域.
kotlin协程相当于一个统一的回调. 你企图封装一个回调, 然后直接return结果.....这本身就是无法实现的
我看了下,viewmodel里的使用事例是通过livedata来实现的,这样一次性数据好处理,但是加载下一页是不方便addData(),而不使用viewmodel来请求处理数据,直接把get放到onRefresh {scope {}}里面这样就会照成很代码很臃肿。因为要处理返回的数据
处理返回数据是由viewModel内部处理的
page.onRefresh {
scope {
val user = Get<UserData>("userInfo").await()
addData(user.toListData())
}
}
所以我想把请求数据放到viewmodel层,或者是Repository层,然后把处理好的数据在返回到onRefresh {scope {}}里面add
你在activity调用一个函数处理数据不就可以了吗?
或者协程封装
suspend fun fetchUserInfo() = coroutineScope {
val response = Get<UserData>("userInfo").await()
response.toListData()
}
这样确实可以,但是这就是mvc模式了。代码太臃肿了比如说我请求小说数据,我拿到小说数据后要处理章节,段落等格式,如果把这些都放到activity,就会非常庞大臃肿
我说的是调用函数, 没让写业务逻辑.
所谓访问函数/构造函数就是为了这种情况存在的
不是viewModel在activity里面调用了一个函数, 就算是mvc了. 感觉很多人思维僵化
那你vm.getData()是不是就算mvc了? 那你说下什么情况不算?
哦,懂了,多谢大佬指教
或者协程封装
suspend fun fetchUserInfo() = coroutineScope { val response = Get<UserData>("userInfo").await() response.toListData() }
可以在这里面把response处理好了在返回对吧。多谢,我是新手上路还有很多不懂的地方,打扰到大佬,不好意思。多谢大佬的不吝赐教,万分感激
demo有更新, 可以看看. 有问题肯定就有需求, 互相探讨问题而已
Net如何配合Flow在viewmodel里请求数据个BRV加载一页使用呢?我自己试了试,但是感觉没用对,用起来不得劲