navController.navigate(Screen.AddScreen.route+"/$id")}})if(dismissState.isDismissed(DismissDirection.EndToStart)){viewModel.deleteWish(wish)}}}}}}@ComposablefunWishItem(wish:Wish,onClick:()->Unit){Card(modifier=
Compose:UI 层完全使用 Compose 实现 Hilt:依赖注入能力。ViewModel 等依赖 Hilt 来构建 Jetpack MVVM 指导我们将 UI层、逻辑层、数据层进行了很好地解耦。上图除了 UI 层的 Compose 以外,与一个常规的 Jetpack MVVM 项目并无不同。 接下来通过代码,看看 Compose 如何配合各 Jetpack 完成 HomeScreen 和PlantDetail...
HomeScreen Composable 中由 ViewModelFactory 初始化一个 ViewModel,然后传给对应组件。 import androidx.lifecycle.viewmodel.compose.viewModel @Composable fun HomeScreen(navController: NavController) { val mTodoViewModel: TodoViewModel = viewModel( factory = TodoViewModelFactory(context.applicationContext as Applicat...
Compose 项目一般使用单 Activity 结构, Activity 作为全局入口非常适合创建全局 ViewModel。 子 Compoable 之间需要基于 ViewModel 通信,所以构建 Composable 时将 ViewModel 作为参数传入。 Sample 中我们在 Activity 中创建的 ViewModel 仅仅是为了传递给MvvmApp使用,这种情况下也可以通过传递Lazy<MvvmViewModel>,将创建延...
ViewModel + Compose 我们希望 Composable 只负责UI,状态管理放到 ViewModel 中。 HomeScreen 作为入口的 Composable 一般在 Activity 或者 Fragment 中调用。 viewmodel-compose 可以方便地从当前 ViewModelStore 中获取 ViewModel: implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04" ...
...Compose 和传统 View 的思维转换使用 Jetpack Compose 进行 UI 开发是一种全新的方式,它和传统的 XML 布局完全不同。...在 ViewModel 中,通过 try-catch 捕获异常并和行错误处理,把错误信息传递给 UI。 3.3 UI 状态管理如何高效管理和更新 UI 状态是一个关键问题。...• 使用假状态:通过模拟 Main...
rememberNavController有一个非常简单的源代码,您可以使用它在单例服务中创建它:我走了一条类似于@Phil...
import com.example.test_compose.ui.theme.Test_composeTheme class MainActivity : ComponentActivity() { private val viewModel by viewModels<MainViewModel>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ...
并在记住NavHostController后对其进行设置。然后将其也注入到您的ViewModels中,您可以从那里进行导航。
然后在我的MainActivity中设置@HiltAndroidApp,并创建了一个viewModel,如下所示: @HiltViewModel class TaskViewModel: ViewModel() { //code } viewModel在我的导航中在MainActivity中被调用: val navController = rememberNavController() NavHost( navController = navController, ...