HarmonyOS 半模态相关使用

1.登录页出现转场方式应该是半模态,但是通过查询资料只能通过bindSheet属性进行绑定,而bindSheet里需要声明builder,builder是是自定义组件的自定义构建函数,在这里builder应该是我们的登录页,将我们的页面变为某个组件的自定义构建函数,这并不是很合理,除了这种方式还有其余方式达到半模态吗?

2.list中某几个item点击的时候希望弹出弹窗,希望弹出这些弹窗的效果是半模态,如果使用bindsheet进行实现的话,会出现两个弹窗。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

问题1参考以下demo:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/multimodaltransion

问题2由于使用了ForEach为每一个ListItem都绑定了半模态页面,同时每一个半模态页面的显示控制都是同一个字段“isShow1”。这样就会出现“isShow1”改变后,显示多个半模态页面

interface arrData {
  itemData: ItemInData[];
}

class ItemInData {
  name: string = "";

  constructor(name: string) {
    this.name = name;
  }
}

@Entry
@Component
struct SheetTransitionExample {
  showItem: ItemInData = new ItemInData("")
  arrData: arrData[] = [
    {
      itemData: [new ItemInData('1组1')]
    },
    {
      itemData: [new ItemInData('2组1'), new ItemInData('2组2'), new ItemInData('2组3')]
    }
  ]
  @State isShow: boolean = false;

  @Builder
  myBuilder(name: string) {
    Column() {
      Button(name)
        .margin(10)
        .fontSize(20)

    }
    .width('100%')

  }

  build() {
    Column() {
      /**
       * TODO: 知识点: 通过bindSheet属性为组件绑定半模态页面,由于半模态必须绑定组件,
       * 此处绑定无样式的Text组件作为开屏半模态展示。
       */
      Text().bindSheet($$this.isShow, this.myBuilder(this.showItem.name), {
        showClose: false,
        preferType: SheetType.CENTER,
        onWillAppear: () => {
          console.log("BindSheet onWillAppear." + this.showItem.name)
        },
        onWillDisappear: () => {
          console.log("BindSheet onWillDisappear."+ this.showItem.name)
        }
      })

      List({ space: 20 }) {
        ForEach(this.arrData, (item: arrData, groupId: number) => {
          ListItemGroup() {
            ForEach(item.itemData, (project: ItemInData, rowIdOfGroup: number) => {
              ListItem() {
                Button(project.name).backgroundColor(Color.Black)
                  .width("100%")
                  .padding(10)
              }
              .onClick(() => {
                this.isShow = true;
                this.showItem = project;
              })
            }, (item: string) => item)
          }
          .divider({ strokeWidth: 0.5, color: '#CFD6D6' }) // 每行之间的分界线
        })
      }.backgroundColor(Color.Green)
    }
    .justifyContent(FlexAlign.Start)
    .width('100%')
    .height('100%')
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS bindSheet模态弹窗
308浏览 • 1回复 待解决
基于bindSheet的模态弹窗
1033浏览 • 1回复 待解决
应用怎么实现模态效果
2274浏览 • 1回复 待解决
模态转场如何控制固定高度
1925浏览 • 1回复 待解决
如何固定模态转场的高度
521浏览 • 1回复 待解决
模态弹窗如何禁止两边触摸
98浏览 • 0回复 待解决
CustomDialog如何实现模态详情页效果
1754浏览 • 1回复 待解决
模态转场来实现弹框样式的页面
915浏览 • 1回复 待解决