|
|
1 napja | |
|---|---|---|
| .. | ||
| src | 1 napja | |
| README.md | 3 hete | |
| build.gradle | 1 napja | |
base-common 是业务封装层,提供:
✅ BridgeManager.kt - 封装 IBridge,提供 H5通信、模块间通信的便捷方法
功能:
callH5Method()、onH5Call()postEvent()、subscribeEvent()✅ ConfigManager.kt - 封装 IConfig,提供通用的配置管理
⚠️ ServerConfigManager.kt - 特定业务场景(开发测试时的服务器配置,待移到 app 模块)
功能:
getString()、getInt()、getBoolean()getEnvironment()、setEnvironment()isFeatureEnabled()、setFeatureEnabled()✅ ExecutorManager.kt - 封装 IExecutor,提供异步任务执行的便捷方法
功能:
executeIO()executeMain()executeDelayed()✅ ApiServiceFactory.kt - API 服务工厂,统一创建 API 服务实例
✅ ApiBaseRemoteDataSource.kt - 远程数据源基类,封装通用网络请求逻辑
✅ ApiBaseRepository.kt - Repository 基类,提供通用错误处理和数据转换
✅ ApiResponseParser.kt - 响应解析器,解析 Retrofit Response
功能:
ApiServiceFactory.create<AuthApi>()✅ BaseActivity.kt - Activity 基类,支持 ViewBinding、加载状态管理
✅ BaseFragment.kt - Fragment 基类,支持 ViewBinding、加载状态管理
✅ ActivityExtensions.kt - Activity 扩展函数,简化 StateFlow 观察
✅ FragmentExtensions.kt - Fragment 扩展函数,简化 StateFlow 观察
功能:
showLoading()、hideLoading()showError()、showSuccess()observeStateFlow()提供便捷的调用方式:
// 使用 BridgeManager(封装 IBridge)
BridgeManager.postEvent("user_login", userData)
// 使用 ConfigManager(封装 IConfig)
val apiUrl = ConfigManager.getString("api_url", "https://api.example.com")
// 使用 ExecutorManager(封装 IExecutor)
ExecutorManager.executeIO {
// 执行耗时操作
}
简化网络请求:
// 创建 API 服务
val authApi = ApiServiceFactory.create<AuthApi>()
// 封装数据源
class AuthRemoteDataSource : ApiBaseRemoteDataSource() {
private val authApi = ApiServiceFactory.create<AuthApi>()
suspend fun login() = executeRequest { authApi.login() }
}
简化 UI 开发:
class LoginActivity : BaseActivity<ActivityLoginBinding>() {
override fun getViewBinding() = ActivityLoginBinding.inflate(layoutInflater)
override fun initObserver() {
observeStateFlow(viewModel.uiState) { state ->
// 处理状态变化
}
}
}
// app/src/.../MainActivity.kt
import com.narutohuo.xindazhou.common.bridge.BridgeManager
class MainActivity : AppCompatActivity() {
fun initBridge() {
// H5通信
BridgeManager.callH5Method("showToast", "Hello")
BridgeManager.onH5Call("getUserInfo") { result ->
// 处理结果
}
// 模块间通信
BridgeManager.postEvent("user_login", userData)
BridgeManager.subscribeEvent("user_logout") { data ->
// 处理事件
}
}
}
// app/src/.../MainActivity.kt
import com.narutohuo.xindazhou.common.config.ConfigManager
class MainActivity : AppCompatActivity() {
fun initConfig() {
// 获取配置
val apiUrl = ConfigManager.getString("api_url", "https://api.example.com")
val isDebug = ConfigManager.getBoolean("is_debug", false)
// 设置配置
ConfigManager.setString("api_url", "https://api.example.com")
ConfigManager.setEnvironment("prod")
// 功能开关
if (ConfigManager.isFeatureEnabled("new_feature")) {
// 启用新功能
}
}
}
// app/src/.../MainActivity.kt
import com.narutohuo.xindazhou.common.executor.ExecutorManager
class MainActivity : AppCompatActivity() {
fun executeTask() {
// IO线程执行
ExecutorManager.executeIO {
// 执行耗时操作
val data = fetchData()
// 主线程更新UI
ExecutorManager.executeMain {
updateUI(data)
}
}
// 延迟执行
ExecutorManager.executeDelayed(1000) {
// 1秒后执行
}
}
}
// Application 中初始化
class XinDaZhouApplication : Application() {
override fun onCreate() {
super.onCreate()
// 设置默认 baseUrl
ApiServiceFactory.baseUrlProvider = {
ServerConfigManager.getHttpServerUrl()
}
}
}
// 业务层使用
class AuthRemoteDataSource : ApiBaseRemoteDataSource() {
private val authApi = ApiServiceFactory.create<AuthApi>()
suspend fun login(request: LoginRequest): Result<LoginResponse> {
return executeRequest(
request = { authApi.login(request) },
errorMessage = "登录失败"
)
}
}
// app/src/.../LoginActivity.kt
import com.narutohuo.xindazhou.common.ui.BaseActivity
import com.narutohuo.xindazhou.common.ui.observeStateFlow
class LoginActivity : BaseActivity<ActivityLoginBinding>() {
private val viewModel: LoginViewModel by viewModels()
override fun getViewBinding() = ActivityLoginBinding.inflate(layoutInflater)
override fun initView() {
binding.btnLogin.setOnClickListener {
viewModel.login()
}
}
override fun initObserver() {
// 观察 UI 状态
observeStateFlow(viewModel.uiState) { state ->
when (state) {
is LoginUiState.Loading -> showLoading()
is LoginUiState.Success -> {
hideLoading()
showSuccess("登录成功")
}
is LoginUiState.Error -> {
hideLoading()
showError(state.message)
}
}
}
}
}
baseUrlProvider