Compose | UI组件(八) | Dialog - 对话框


前言

在我们传统的UI界面中,经常用到弹框,Compose也有弹框,但是Compose的弹框显示和隐藏和传统的弹框显示(show)和隐藏 (dismiss)不一样,Compose中显示与否要看是否重组被执行,所以它显示与否要依赖状态控制


Dialog 普通弹框

Dialog是最底层的弹框,可以在该组件之上封装

@Composable
fun Dialog(
    onDismissRequest: () -> Unit,   //关闭回调函数
    properties: DialogProperties = DialogProperties(), //对话框的属性,用于自定义对话框
    content: @Composable () -> Unit    //对话框内容
)

Dialog 普通弹框的使用

@Composable
fun DialogMethod(){
    val openDialog = remember { mutableStateOf(false) }

    BaseDialog(dialogState = openDialog)

    Button(modifier = Modifier.wrapContentSize(),
           onClick  = { openDialog.value = !openDialog.value}) {
             Text(text = "显示普通dialog")
    }
}

@Composable
fun BaseDialog(dialogState:MutableState<Boolean>){
      if(dialogState.value){
          Dialog(onDismissRequest = { dialogState.value = false }) {
              Box(modifier = Modifier
                  .size(200.dp, 50.dp)
                  .background(Color.Red))
          }
      }
}

AlertDialog 警告弹框

AlertDialog组件是Dialog组件更高级的封装组件,它定位好了标题,内容文本,按钮位置

@Composable
fun AlertDialog(
    onDismissRequest: () -> Unit,                           //关闭回调函数
    confirmButton: @Composable () -> Unit,                  //确认按钮
    modifier: Modifier = Modifier,                          //修饰符
    dismissButton: @Composable (() -> Unit)? = null,        //取消按钮
    icon: @Composable (() -> Unit)? = null,                 //图标
    title: @Composable (() -> Unit)? = null,                //标题
    text: @Composable (() -> Unit)? = null,                 //内容
    shape: Shape = AlertDialogDefaults.shape,               //样式
    containerColor: Color = AlertDialogDefaults.containerColor,       //内容颜色
    iconContentColor: Color = AlertDialogDefaults.iconContentColor,   //图标颜色
    titleContentColor: Color = AlertDialogDefaults.titleContentColor, //标题颜色
    textContentColor: Color = AlertDialogDefaults.textContentColor,   //字体颜色
    tonalElevation: Dp = AlertDialogDefaults.TonalElevation,          //设置阴影
    properties: DialogProperties = DialogProperties()                 //对话框的属性,用于自定义对话框
) 

AlertDialog 警告弹框的使用

@Composable
fun DialogMethod(){
    val openAlertDialog = remember { mutableStateOf(false) }
   
    AlertDialogSample(dialogState = openAlertDialog)

    Button(modifier = Modifier.wrapContentSize(),
           onClick  = { openAlertDialog.value = !openAlertDialog.value}) {
           Text(text = "显示Alertdialog")
    }
}

@Composable
fun AlertDialogSample(dialogState:MutableState<Boolean>){
     if(dialogState.value){
         AlertDialog(onDismissRequest = { dialogState.value = false },
                     title = {
                          Text(text = "提示标题")
                     },
                     text = {
                          Text(text = "提示内容")
                     },
                     confirmButton = {
                          TextButton(onClick = { dialogState.value = false }) {
                              Text(text = "确定")
                          }
                     },
                     dismissButton = {
                          TextButton(onClick = { dialogState.value = false }) {
                              Text(text = "取消")
                          }
                     }
         )

     }
}

总结

  1. Dialog是最底层的弹框,可以在该组件之上封装

  2. AlertDialog组件是Dialog组件更高级的封装组件,它定位好了标题,内容文本,按钮位置

对于Pinia框架和pinia-plugin-persistedstate插件,根据引用提供的快速开始教程,您可以使用pinia-plugin-persistedstate插件来实现token的持久化存储。 根据引用和引用提供的代码示例,您需要先导入createPinia函数和piniaPluginPersistedstate插件,并在创建pinia实例时使用pinia.use()方法来注册插件。 接下来,您需要确保在您的代码中正确配置插件。根据引用提供的文档,您可以在创建pinia实例之前设置插件的配置项,例如指定存储的键名。 最后,您可以通过在pinia的store中定义一个token属性,并在需要的时候进行读取和设置操作,插件会自动将该属性的值持久化存储在浏览器的localStorage中。 因此,如果您的pinia-plugin-persistedstate插件无法正确地将token持久化存储,您可以检查以下几点: - 确保在pinia实例创建之前正确导入和使用piniaPluginPersistedstate插件; - 检查插件的配置项是否正确设置,特别是存储的键名是否正确指定; - 确保在您的store中正确定义了token属性,并在需要的时候进行读取和设置操作。 通过以上步骤,您应该能够成功实现pinia-plugin-persistedstate插件的持久化存储功能,并让token在应用程序中持久保存下来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [如何通过pinia-plugin-persistedstate实现数据持久化?](https://blog.csdn.net/weixin_48082900/article/details/131450277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭祖爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值