QML AppSwitch отправляет сигнал onCheckedChanged при каждом открытии страницы? - PullRequest
0 голосов
/ 29 июня 2019

У меня есть AppSwitch, который используется для «активации / деактивации» учетных записей пользователей в моем приложении. Он проверяет состояние, считывается из базы данных, которая работает как задумано, изменяя как переключатель, так и текст в зависимости от bool за пользователя.

Моя проблема
Каждый раз, когда я открываю страницу с включенным AppSwitch, он отправляет сигнал onCheckedChanged - в свою очередь, отправляется ли уведомление пользователю, его учетная запись активирована? Я планировал уведомить пользователей, что их учетная запись была активна, с помощью push-уведомления, но не хочу, чтобы эта отправка отправлялась каждый раз, когда администратор переходит на их страницу!

Я использую Felgo (ранее V-Play) для разработки, ссылка на документацию AppSwitch:
Felgo AppSwitch

Мой код:

            Rectangle {               
                width: parent.width / 2
                height: parent.height
                Column {
                    id: column
                    anchors.fill: parent
                    AppButton {
                        id: groupStatusText
                        width: parent.width
                        height: parent.height / 2
                    }
                    AppSwitch {
                        id: editStatus
                        knobColorOn: "#b0ced9"
                        backgroundColorOn: "#81b1c2"
                        checked: {
//userListItem is the current profile details of the user page
                            if(userListItem.groupStatus === 1) {
                                groupStatusText.text = "Deactivate this user"
                            }
                            else if(userListItem.groupStatus === 0) {
                                groupStatusText.text = "Activate this user"
                            }
                        }
                        onCheckedChanged: {
                            if(editStatus.checked === true) {
//the signal which sends to my database on updating the value,
//works as intended but sends signal each time page is created?
                                detailPage.adminEditGroupStatus(1)
                            } else {
                                detailPage.adminEditGroupStatus(0)
                            }
                        }
                    }
                }

Является ли нормальным поведение срабатывания сигнала onCheckedChanged при каждом загрузке страницы? или как я могу изменить это, чтобы оно срабатывало только тогда, когда пользователь его меняет!?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 01 июля 2019

Добавьте условие, чтобы сигнал отправлялся после полной инициализации компонента (в том числе после создания привязки в свойстве checked).

Вы можете добавить логическое свойство на коммутаторе:

AppSwitch {
    property bool loaded: false    

    Component.onCompleted: loaded = true

    onCheckedChanged: {
        if (loaded) {
            // notify user
        }
    }
}

или просто используйте state:

AppSwitch {    
    Component.onCompleted: state = "loaded"

    onCheckedChanged: {
        if (state === "loaded") {
            // notify user
        }
    }
}
...