返回键处理

This commit is contained in:
renhaoting 2025-11-18 14:48:43 +08:00
parent 76bb6e3e42
commit b1ab016709
25 changed files with 142 additions and 63 deletions

View File

@ -1,8 +1,8 @@
package com.gamedog.vididin package com.gamedog.vididin
import android.app.Application import com.ama.core.architecture.BaseApp
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp @HiltAndroidApp
class App : Application() class App : BaseApp()

View File

@ -2,7 +2,6 @@ package com.gamedog.vididin.main
import com.ama.core.common.util.asSafe import com.ama.core.common.util.asSafe
import androidx.activity.OnBackPressedCallback
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -10,15 +9,17 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.activity.addCallback
import androidx.activity.viewModels import androidx.activity.viewModels
import com.ama.core.architecture.appBase.AppViewsActivity import com.ama.core.architecture.appBase.AppViewsActivity
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.ext.toast
import com.ama.core.architecture.util.bindViewPager2 import com.ama.core.architecture.util.bindViewPager2
import com.ama.core.architecture.util.setCommonNavigator import com.ama.core.architecture.util.setCommonNavigator
import com.ama.core.architecture.util.setDataOrAdapter import com.ama.core.architecture.util.setDataOrAdapter
import com.gamedog.vididin.R
import com.gamedog.vididin.adapter.MainTabsAdapter import com.gamedog.vididin.adapter.MainTabsAdapter
import com.gamedog.vididin.adapter.MainViewPagerAdapter import com.gamedog.vididin.adapter.MainViewPagerAdapter
import com.gamedog.vididin.main.interfaces.OnSwitchTabListener
import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue import kotlin.getValue
@ -32,21 +33,11 @@ import com.gamedog.vididin.main.MainViewModel as ViewModel
@AndroidEntryPoint @AndroidEntryPoint
class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabStyleListener { class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabStyleListener {
override val viewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
private lateinit var navigatorAdapter: MainTabsAdapter private lateinit var navigatorAdapter: MainTabsAdapter
private val fragmentStateAdapter by lazy { MainViewPagerAdapter(this) } private val fragmentStateAdapter by lazy { MainViewPagerAdapter(this) }
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
fragmentStateAdapter.getFragmentByIndex(0).asSafe<OnSwitchTabListener>()
?.onSwitchTab(-1)
binding.viewPager2.setCurrentItem(0, false)
}
}
override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater)
override fun ViewBinding.initWindowInsets() { override fun ViewBinding.initWindowInsets() {
@ -76,12 +67,18 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
} }
override fun ViewBinding.initListeners() { override fun ViewBinding.initListeners() {
onBackPressedDispatcher.addCallback(this@MainActivity, onBackPressedCallback) onBackPressedDispatcher.addCallback(this@MainActivity) {
if (mViewModel.canBack) {
finish()
} else {
toast(R.string.close_app_hint)
mViewModel.startCanBackTimer()
}
}
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
super.onPageSelected(position) super.onPageSelected(position)
setOnBackPressedCallbackIsEnabled()
} }
}) })
@ -102,16 +99,13 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
} }
override fun ViewBinding.onUiStateCollect(uiState: UiState) { override fun ViewBinding.onUiStateCollect(uiState: UiState) {
magicIndicator.setDataOrAdapter(uiState.tabs) { navigatorAdapter } magicIndicator.setDataOrAdapter(uiState.tabs) { navigatorAdapter }
viewPager2.setDataOrAdapter(uiState.tabs, Int.MAX_VALUE) { fragmentStateAdapter } viewPager2.setDataOrAdapter(uiState.tabs, Int.MAX_VALUE) { fragmentStateAdapter }
} }
private fun setOnBackPressedCallbackIsEnabled() {
onBackPressedCallback.isEnabled = binding.viewPager2.currentItem != 0
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
} }

View File

@ -1,6 +1,7 @@
package com.gamedog.vididin.main package com.gamedog.vididin.main
import android.util.TimeUtils
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.ama.core.architecture.appBase.vm.AppViewModel import com.ama.core.architecture.appBase.vm.AppViewModel
import com.gamedog.vididin.R import com.gamedog.vididin.R
@ -8,6 +9,7 @@ import com.gamedog.vididin.beans.MainTabsItem
import com.gamedog.vididin.repository.MainRepository import com.gamedog.vididin.repository.MainRepository
import com.gamedog.vididin.repository.MainTabType import com.gamedog.vididin.repository.MainTabType
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -51,6 +53,17 @@ class MainViewModel @Inject constructor(
}.map { }.map {
UiState(tabs = it) UiState(tabs = it)
} }
var canBack = false
fun startCanBackTimer() {
viewModelScope.launch {
canBack = true
delay(2000)
canBack = false
}
}
} }

View File

@ -2,7 +2,6 @@ package com.gamedog.vididin.main.fragments
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
@ -27,16 +26,13 @@ import com.gamedog.vididin.main.fragments.home.YoutubeUiState as UiState
@AndroidEntryPoint @AndroidEntryPoint
class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwitchTabListener, class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwitchTabListener, OnFragmentBackgroundListener {
OnFragmentBackgroundListener {
override val viewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true override var isBackgroundBright: Boolean = true
private val onBackPressedCallback = object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() {
}
}
private val mViewPagerAdapter by lazy { HomeFragmentStateAdapter(this) } private val mViewPagerAdapter by lazy { HomeFragmentStateAdapter(this) }
override fun inflateViewBinding( override fun inflateViewBinding(
@ -59,16 +55,10 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
} }
override fun ViewBinding.initListeners() { override fun ViewBinding.initListeners() {
requireActivity().onBackPressedDispatcher.addCallback(
this@HomeFragment,
onBackPressedCallback
)
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
super.onPageSelected(position) super.onPageSelected(position)
setHomeTabStyle(mViewPagerAdapter.getFragmentByIndex(position)) setHomeTabStyle(mViewPagerAdapter.getFragmentByIndex(position))
setOnBackPressedCallbackIsEnabled()
} }
}) })
@ -91,12 +81,10 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
setOnBackPressedCallbackIsEnabled()
} }
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
setOnBackPressedCallbackIsEnabled()
} }
override fun onSwitchTab(index: Int, smoothScroll: Boolean) { override fun onSwitchTab(index: Int, smoothScroll: Boolean) {
@ -108,10 +96,6 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
} }
private fun setOnBackPressedCallbackIsEnabled() {
onBackPressedCallback.isEnabled =
isResumed && binding?.viewPager2?.currentItem != mViewPagerAdapter.itemCount - 1
}
private fun setHomeTabStyle(f: Fragment?) { private fun setHomeTabStyle(f: Fragment?) {
isBackgroundBright = f.asSafe<OnFragmentBackgroundListener>()?.isBackgroundBright ?: return isBackgroundBright = f.asSafe<OnFragmentBackgroundListener>()?.isBackgroundBright ?: return

View File

@ -20,7 +20,7 @@ import com.gamedog.vididin.main.fragments.mine.MineViewModel as ViewModel
@AndroidEntryPoint @AndroidEntryPoint
class MineFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), class MineFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(),
OnFragmentBackgroundListener { OnFragmentBackgroundListener {
override val viewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true override var isBackgroundBright: Boolean = true

View File

@ -0,0 +1,22 @@
package com.gamedog.vididin.widget.loopViewpager
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
class LoopPagerAdapter<T>(
private val activity: FragmentActivity,
private val dataList: List<T>,
private val fragmentCreatorFun: (List<T>, Int) -> Fragment // 修改点1传入整个数据列表和真实位置, 接收一个创建Fragment的lambda传入数据和在ViewPager中的真实位置
) : FragmentStateAdapter(activity) {
private val mRealPageCount = 3
override fun getItemCount(): Int = Int.MAX_VALUE
override fun createFragment(position: Int): Fragment {
val realPosition = position % mRealPageCount
return fragmentCreatorFun(dataList, realPosition)
}
}

View File

@ -7,4 +7,5 @@
<string name="main_tabs_message">Message</string> <string name="main_tabs_message">Message</string>
<string name="main_tabs_mine">Mine</string> <string name="main_tabs_mine">Mine</string>
<string name="main_tabs_friend">Friend</string> <string name="main_tabs_friend">Friend</string>
<string name="close_app_hint">Press again to close app</string>
</resources> </resources>

View File

@ -15,7 +15,6 @@ dependencies {
api(project(":core:common")) api(project(":core:common"))
api(project(":core:designsystem")) api(project(":core:designsystem"))
api(project(":core:model")) api(project(":core:model"))
api 'com.google.code.gson:gson:2.10.1'
api(libs.material) api(libs.material)
api(libs.appcompat) api(libs.appcompat)
api(libs.lifecycle.viewmodel.ktx) api(libs.lifecycle.viewmodel.ktx)
@ -26,6 +25,9 @@ dependencies {
api(libs.glide) api(libs.glide)
api(libs.okhttp.logging) api(libs.okhttp.logging)
api(libs.kotlinx.serialization.json) api(libs.kotlinx.serialization.json)
//api(libs.multiDex)
//api(libs.gson)
api 'com.google.code.gson:gson:2.13.2'
implementation(libs.startup) implementation(libs.startup)
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.8.22' implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.8.22'

View File

@ -0,0 +1,42 @@
package com.ama.core.architecture
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.res.Configuration
import java.lang.ref.WeakReference
abstract class BaseApp : Application() {
companion object {
private var currentActivity: WeakReference<Activity>? = null
fun setCurrentActivity(activity: Activity?) {
currentActivity = if (activity == null) null else WeakReference(activity)
}
fun getCurrentActivity(): Activity? {
return currentActivity?.get()
}
private lateinit var instance: BaseApp
fun appContext(): Context = instance
}
override fun onCreate() {
super.onCreate()
instance = this
}
override fun onTerminate() {
super.onTerminate()
}
// 系统资源配置发生更改回调,例如主题模式,需要重新刷新多语言
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
}
}

View File

@ -8,7 +8,7 @@ import com.ama.core.architecture.empty.EmptyViewModel
abstract class AppViewsEmptyViewModelActivity<Binding : ViewBinding> : abstract class AppViewsEmptyViewModelActivity<Binding : ViewBinding> :
AppViewsActivity<Binding, EmptyUiState, EmptyViewModel>() { AppViewsActivity<Binding, EmptyUiState, EmptyViewModel>() {
override val viewModel: EmptyViewModel by viewModels() override val mViewModel: EmptyViewModel by viewModels()
override fun Binding.onUiStateCollect(uiState: EmptyUiState) { override fun Binding.onUiStateCollect(uiState: EmptyUiState) {
} }

View File

@ -8,7 +8,7 @@ import com.ama.core.architecture.empty.EmptyViewModel
abstract class AppViewsEmptyViewModelDialogFragment<Binding : ViewBinding> : abstract class AppViewsEmptyViewModelDialogFragment<Binding : ViewBinding> :
AppViewsDialogFragment<Binding, EmptyUiState, EmptyViewModel>() { AppViewsDialogFragment<Binding, EmptyUiState, EmptyViewModel>() {
override val viewModel: EmptyViewModel by viewModels() override val mViewModel: EmptyViewModel by viewModels()
override fun Binding.onUiStateCollect(uiState: EmptyUiState) { override fun Binding.onUiStateCollect(uiState: EmptyUiState) {
} }

View File

@ -8,7 +8,7 @@ import com.ama.core.architecture.empty.EmptyViewModel
abstract class AppViewsEmptyViewModelFragment<Binding : ViewBinding> : abstract class AppViewsEmptyViewModelFragment<Binding : ViewBinding> :
AppViewsFragment<Binding, EmptyUiState, EmptyViewModel>() { AppViewsFragment<Binding, EmptyUiState, EmptyViewModel>() {
override val viewModel: EmptyViewModel by viewModels() override val mViewModel: EmptyViewModel by viewModels()
override fun Binding.onUiStateCollect(uiState: EmptyUiState) { override fun Binding.onUiStateCollect(uiState: EmptyUiState) {
} }

View File

@ -72,7 +72,7 @@ abstract class BaseViewsActivity<Binding : ViewBinding, UiState : Any,
override fun Binding.initBaseObservers() { override fun Binding.initBaseObservers() {
// 初始化UiState收集 // 初始化UiState收集
lifecycleScope.launch { lifecycleScope.launch {
viewModel.uiState mViewModel.uiState
.flowWithLifecycle(lifecycle) .flowWithLifecycle(lifecycle)
.collect { uiState -> .collect { uiState ->
onUiStateCollect(uiState) onUiStateCollect(uiState)
@ -80,13 +80,13 @@ abstract class BaseViewsActivity<Binding : ViewBinding, UiState : Any,
} }
// 初始化Message收集 // 初始化Message收集
messageCollector.initCollect( messageCollector.initCollect(
viewModel.messageController, mViewModel.messageController,
lifecycleScope, lifecycleScope,
lifecycle, lifecycle,
) )
// 初始化LoadStateUiState收集 // 初始化LoadStateUiState收集
initLoadStateUiStateCollect(viewModel, lifecycleScope, lifecycle) initLoadStateUiStateCollect(mViewModel, lifecycleScope, lifecycle)
} }
} }

View File

@ -99,20 +99,20 @@ abstract class BaseViewsDialogFragment<Binding : ViewBinding, UiState : Any, Vie
// -必须用viewLifecycleOwner.lifecycleScope.launch{},否则里面的收集被调用多次,而没取消,导致同一个数据会被多个接收者接收。 // -必须用viewLifecycleOwner.lifecycleScope.launch{},否则里面的收集被调用多次,而没取消,导致同一个数据会被多个接收者接收。
// --说明因为页面跳转View销毁但是Fragment没有所以不能用范围广的lifecycleScope而是用view的lifecycleScope。(lifecycle同理) // --说明因为页面跳转View销毁但是Fragment没有所以不能用范围广的lifecycleScope而是用view的lifecycleScope。(lifecycle同理)
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
viewModel.uiState.flowWithLifecycle(viewLifecycleOwner.lifecycle).collect { uiState -> mViewModel.uiState.flowWithLifecycle(viewLifecycleOwner.lifecycle).collect { uiState ->
onUiStateCollect(uiState) onUiStateCollect(uiState)
} }
} }
// 初始化Message收集 // 初始化Message收集
// -说明使用Activity的lifecycleScope、lifecycle会收集多次所以不能在此使用也不能覆盖此实现。 // -说明使用Activity的lifecycleScope、lifecycle会收集多次所以不能在此使用也不能覆盖此实现。
messageCollector.initCollect( messageCollector.initCollect(
viewModel.messageController, mViewModel.messageController,
viewLifecycleOwner.lifecycleScope, viewLifecycleOwner.lifecycleScope,
viewLifecycleOwner.lifecycle, viewLifecycleOwner.lifecycle,
) )
// 初始化LoadStateUiState收集 // 初始化LoadStateUiState收集
initLoadStateUiStateCollect( initLoadStateUiStateCollect(
viewModel, mViewModel,
viewLifecycleOwner.lifecycleScope, viewLifecycleOwner.lifecycleScope,
viewLifecycleOwner.lifecycle viewLifecycleOwner.lifecycle
) )

View File

@ -118,21 +118,21 @@ abstract class BaseViewsFragment<Binding : ViewBinding, UiState : Any, ViewModel
// -必须用viewLifecycleOwner.lifecycleScope.launch{},否则里面的收集被调用多次,而没取消,导致同一个数据会被多个接收者接收。 // -必须用viewLifecycleOwner.lifecycleScope.launch{},否则里面的收集被调用多次,而没取消,导致同一个数据会被多个接收者接收。
// --说明因为页面跳转View销毁但是Fragment没有所以不能用范围广的lifecycleScope而是用view的lifecycleScope。(lifecycle同理) // --说明因为页面跳转View销毁但是Fragment没有所以不能用范围广的lifecycleScope而是用view的lifecycleScope。(lifecycle同理)
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
viewModel.uiState.flowWithLifecycle(viewLifecycleOwner.lifecycle).collect { uiState -> mViewModel.uiState.flowWithLifecycle(viewLifecycleOwner.lifecycle).collect { uiState ->
onUiStateCollect(uiState) onUiStateCollect(uiState)
} }
} }
// 初始化Message收集 // 初始化Message收集
// -说明使用Activity的lifecycleScope、lifecycle会收集多次所以不能在此使用也不能覆盖此实现。 // -说明使用Activity的lifecycleScope、lifecycle会收集多次所以不能在此使用也不能覆盖此实现。
messageCollector.initCollect( messageCollector.initCollect(
viewModel.messageController, mViewModel.messageController,
viewLifecycleOwner.lifecycleScope, viewLifecycleOwner.lifecycleScope,
viewLifecycleOwner.lifecycle, viewLifecycleOwner.lifecycle,
) )
// 初始化LoadStateUiState收集 // 初始化LoadStateUiState收集
initLoadStateUiStateCollect( initLoadStateUiStateCollect(
viewModel, mViewModel,
viewLifecycleOwner.lifecycleScope, viewLifecycleOwner.lifecycleScope,
viewLifecycleOwner.lifecycle viewLifecycleOwner.lifecycle
) )

View File

@ -0,0 +1,17 @@
package com.ama.core.architecture.ext
import android.app.Activity
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.ama.core.architecture.BaseApp
private fun toast(strRes: Int): Unit {
Toast.makeText(BaseApp.appContext(), strRes, Toast.LENGTH_SHORT).show()
}
fun View.toast(strRes: Int): Unit = toast(strRes = strRes)
fun Fragment.toast(strRes: Int): Unit = toast(strRes = strRes)
fun Activity.toast(strRes: Int): Unit = toast(strRes = strRes)

View File

@ -4,5 +4,5 @@ import com.ama.core.architecture.base.BaseViewModel
interface ViewModelOwner<UiState : Any, ViewModel : BaseViewModel<UiState>> { interface ViewModelOwner<UiState : Any, ViewModel : BaseViewModel<UiState>> {
val viewModel: ViewModel val mViewModel: ViewModel
} }

View File

@ -19,7 +19,7 @@ fun <UiState : Any, ViewModel : BaseViewModel<UiState>, Value> BaseViewsFragment
flowCollector: FlowCollector<Value> flowCollector: FlowCollector<Value>
) { ) {
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
viewModel.uiState.map { mapFun(it) }.distinctUntilChanged() mViewModel.uiState.map { mapFun(it) }.distinctUntilChanged()
.flowWithLifecycle(viewLifecycleOwner.lifecycle).collect(flowCollector) .flowWithLifecycle(viewLifecycleOwner.lifecycle).collect(flowCollector)
} }
} }
@ -32,7 +32,7 @@ fun <UiState : Any, ViewModel : BaseViewModel<UiState>, Value> BaseViewsActivity
flowCollector: FlowCollector<Value> flowCollector: FlowCollector<Value>
) { ) {
lifecycleScope.launch { lifecycleScope.launch {
viewModel.uiState.map { mapFun(it) }.distinctUntilChanged() mViewModel.uiState.map { mapFun(it) }.distinctUntilChanged()
.flowWithLifecycle(lifecycle).collect(flowCollector) .flowWithLifecycle(lifecycle).collect(flowCollector)
} }
} }

View File

@ -10,7 +10,7 @@ class DefaultStateEmptyView : ConstraintLayoutMergeStateBaseView(), StateEmptyVi
private val emptyGroup by lazy { root!!.findViewById<View>(R.id.state_empty_group) } private val emptyGroup by lazy { root!!.findViewById<View>(R.id.state_empty_group) }
override fun getResId() = R.layout.douyin_core_designsystem_view_state_empty override fun getResId() = R.layout.view_state_empty
override fun setVisible(isVisible: Boolean) { override fun setVisible(isVisible: Boolean) {
emptyGroup.isVisible = isVisible emptyGroup.isVisible = isVisible

View File

@ -13,7 +13,7 @@ class DefaultStateErrorView : ConstraintLayoutMergeStateBaseView(), StateErrorVi
private val errorRetry by lazy { root!!.findViewById<View>(R.id.state_error_retry) } private val errorRetry by lazy { root!!.findViewById<View>(R.id.state_error_retry) }
private val errorDescription by lazy { root!!.findViewById<TextView>(R.id.state_error_description) } private val errorDescription by lazy { root!!.findViewById<TextView>(R.id.state_error_description) }
override fun getResId() = R.layout.douyin_core_designsystem_view_state_error override fun getResId() = R.layout.view_state_error
override fun setVisible(isVisible: Boolean) { override fun setVisible(isVisible: Boolean) {
errorGroup.isVisible = isVisible errorGroup.isVisible = isVisible

View File

@ -9,7 +9,7 @@ import com.gamedog.vididin.core.designsystem.stateview.state.interfaces.StateLoa
class DefaultStateLoadingView : ConstraintLayoutMergeStateBaseView(), StateLoadingView { class DefaultStateLoadingView : ConstraintLayoutMergeStateBaseView(), StateLoadingView {
private val loading by lazy { root!!.findViewById<View>(R.id.state_loading) } private val loading by lazy { root!!.findViewById<View>(R.id.state_loading) }
override fun getResId() = R.layout.douyin_core_designsystem_view_state_loading override fun getResId() = R.layout.view_state_loading
override fun setVisible(isVisible: Boolean) { override fun setVisible(isVisible: Boolean) {
loading.isVisible = isVisible loading.isVisible = isVisible

View File

@ -35,9 +35,10 @@ smartRefreshLayout = "3.0.0-alpha"
retrofit = "2.11.0" retrofit = "2.11.0"
okhttp = "4.12.0" okhttp = "4.12.0"
glide = "4.16.0" glide = "4.16.0"
gson = "2.9.0" gsonVer = "2.10.1"
testPoint = "0.0.1" testPoint = "0.0.1"
spans = "1.1.0" spans = "1.1.0"
multiDex = "2.0.1"
#================================Plugin相关=================================== #================================Plugin相关===================================
agp = "8.10.1" agp = "8.10.1"
kotlin = "2.1.20" kotlin = "2.1.20"
@ -93,8 +94,11 @@ okhttp-logging = { group = "com.squareup.okhttp3", name = "logging-interceptor",
# glide # glide
glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" }
# multiDex
multiDex = { group = "androidx.multidex:multidex", name = "multiDex", version.ref = "multiDex" }
# gson # gson
gson = { group = "com.google.code.gson:gson", name = "gson", version.ref = "gson" } gson = { group = "com.google.code.gson:gson", name = "gson", version.ref = "gsonVer" }
# test-point # test-point
test-point-annotation = { group = "io.github.zrq1060", name = "test-point-annotation", version.ref = "testPoint" } test-point-annotation = { group = "io.github.zrq1060", name = "test-point-annotation", version.ref = "testPoint" }