diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 5bc305cb..3c582b99 100755
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -31,7 +31,7 @@
-
+
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index a137bc25..f3d382c6 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -213,6 +213,12 @@ PODS:
- JPush (= 5.3.0)
- just_audio (0.0.1):
- Flutter
+ - JVerification (3.2.4):
+ - JCore (>= 2.1.6)
+ - jverify (0.0.1):
+ - Flutter
+ - JCore (>= 4.6.2)
+ - JVerification (= 3.2.4)
- nanopb (3.30910.0):
- nanopb/decode (= 3.30910.0)
- nanopb/encode (= 3.30910.0)
@@ -290,6 +296,7 @@ DEPENDENCIES:
- JPush
- jpush_flutter (from `.symlinks/plugins/jpush_flutter/ios`)
- just_audio (from `.symlinks/plugins/just_audio/ios`)
+ - jverify (from `.symlinks/plugins/jverify/ios`)
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
- open_filex (from `.symlinks/plugins/open_filex/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
@@ -331,6 +338,7 @@ SPEC REPOS:
- ios-voice-processor
- JCore
- JPush
+ - JVerification
- nanopb
- PromisesObjC
- SDWebImage
@@ -397,6 +405,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/jpush_flutter/ios"
just_audio:
:path: ".symlinks/plugins/just_audio/ios"
+ jverify:
+ :path: ".symlinks/plugins/jverify/ios"
network_info_plus:
:path: ".symlinks/plugins/network_info_plus/ios"
open_filex:
@@ -462,7 +472,7 @@ SPEC CHECKSUMS:
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
- fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849
+ fluwx: daa284756ce53442b3d0417ceeda66e981906811
google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99
GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
@@ -474,6 +484,8 @@ SPEC CHECKSUMS:
JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e
jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
+ JVerification: 0774807f44dd788c78d50303a14e133735807856
+ jverify: 337ea43ac1e16f9484f4195abe787d1b6241163c
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
@@ -498,4 +510,3 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6
COCOAPODS: 1.14.3
-
diff --git a/lan/lan_ar.json b/lan/lan_ar.json
index 51882dae..dbf36900 100644
--- a/lan/lan_ar.json
+++ b/lan/lan_ar.json
@@ -1120,5 +1120,6 @@
"跟随系统": "اتبع النظام",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف بصمات القفل. هل أنت متأكد أنك تريد إعادة ضبطه ؟",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟",
- "版本说明": "تعليمات الإصدار"
+ "版本说明": "تعليمات الإصدار",
+ "一键登录": "تسجيل الدخول بنقرة واحدة"
}
\ No newline at end of file
diff --git a/lan/lan_bg.json b/lan/lan_bg.json
index 62e1410b..e6ba5228 100644
--- a/lan/lan_bg.json
+++ b/lan/lan_bg.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Следете система",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "След нулиране, пръстовите отпечатъци на заключването ще бъдат изтрити. Сигурен ли сте, че искате да го нулирате?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?",
- "版本说明": "Обяснение на версията"
+ "版本说明": "Обяснение на версията",
+ "一键登录": "Вход с едно кликване"
}
\ No newline at end of file
diff --git a/lan/lan_bn.json b/lan/lan_bn.json
index 7c730be4..abf78946 100644
--- a/lan/lan_bn.json
+++ b/lan/lan_bn.json
@@ -1120,5 +1120,6 @@
"跟随系统": "এক্ফক্লোসিস্টেম",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?",
- "版本说明": "ভার্সনপরিচিতি"
+ "版本说明": "ভার্সনপরিচিতি",
+ "一键登录": "এক-সিক্লিক্লোগিন"
}
\ No newline at end of file
diff --git a/lan/lan_cs.json b/lan/lan_cs.json
index 504867c1..ccdffef9 100644
--- a/lan/lan_cs.json
+++ b/lan/lan_cs.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Sledovat systém",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetování budou otisky prstů zámku odstraněny. Opravdu ho chcete obnovit?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?",
- "版本说明": "Verze"
+ "版本说明": "Verze",
+ "一键登录": "Přihlášení s jedním kliknutím"
}
\ No newline at end of file
diff --git a/lan/lan_da.json b/lan/lan_da.json
index df10a266..3fa32f8c 100644
--- a/lan/lan_da.json
+++ b/lan/lan_da.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Følg systemet",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?",
- "版本说明": "Versionsbeskrivelse"
+ "版本说明": "Versionsbeskrivelse",
+ "一键登录": "Login med et enkelt klik"
}
\ No newline at end of file
diff --git a/lan/lan_de.json b/lan/lan_de.json
index 32b6dcd6..adeb27e5 100644
--- a/lan/lan_de.json
+++ b/lan/lan_de.json
@@ -1120,5 +1120,6 @@
"跟随系统": "System folgen",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Finger abdrücke des Schlosses gelöscht. Sind Sie sicher, dass Sie es zurücksetzen wollen?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?",
- "版本说明": "Versionsbeschreibung"
+ "版本说明": "Versionsbeschreibung",
+ "一键登录": "Ein-Klick-Login"
}
\ No newline at end of file
diff --git a/lan/lan_el.json b/lan/lan_el.json
index dadf971d..2ff371f0 100644
--- a/lan/lan_el.json
+++ b/lan/lan_el.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Ακολουθήστε το σύστημα",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;",
- "版本说明": "Περιγραφή έκδοσης"
+ "版本说明": "Περιγραφή έκδοσης",
+ "一键登录": "Σύνδεση ενός κλικ"
}
\ No newline at end of file
diff --git a/lan/lan_en.json b/lan/lan_en.json
index eb01a32a..da13b366 100644
--- a/lan/lan_en.json
+++ b/lan/lan_en.json
@@ -1121,5 +1121,6 @@
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?",
"版本说明": "Version description",
- "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds. Click Next when the blue indicator light flashes"
+ "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds. Click Next when the blue indicator light flashes",
+ "一键登录": "One-click login"
}
diff --git a/lan/lan_es.json b/lan/lan_es.json
index f2d40436..3cf4cf48 100644
--- a/lan/lan_es.json
+++ b/lan/lan_es.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Seguir sistema",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Después de restablecer, se eliminarán las huellas dactilares del bloqueo. ¿Está seguro de que desea restablecerlo?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?",
- "版本说明": "Instrucciones de versión"
+ "版本说明": "Instrucciones de versión",
+ "一键登录": "Inicio de sesión con un solo clic"
}
\ No newline at end of file
diff --git a/lan/lan_et.json b/lan/lan_et.json
index 3b680872..3b9ec20c 100644
--- a/lan/lan_et.json
+++ b/lan/lan_et.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Süsteemi jälgimine",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?",
- "版本说明": "Versiooniteave"
+ "版本说明": "Versiooniteave",
+ "一键登录": "Üheklõpsu sisselogimine"
}
\ No newline at end of file
diff --git a/lan/lan_fi.json b/lan/lan_fi.json
index 0bc1d06e..423b0063 100644
--- a/lan/lan_fi.json
+++ b/lan/lan_fi.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Seuraa järjestelmää",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?",
- "版本说明": "Versio"
+ "版本说明": "Versio",
+ "一键登录": "Yhden napsautuksen kirjautuminen"
}
\ No newline at end of file
diff --git a/lan/lan_fr.json b/lan/lan_fr.json
index f2c17fcc..6c0e37b2 100644
--- a/lan/lan_fr.json
+++ b/lan/lan_fr.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Suivre le système",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?",
- "版本说明": "Explication de la version"
+ "版本说明": "Explication de la version",
+ "一键登录": "Connexion en un clic"
}
\ No newline at end of file
diff --git a/lan/lan_he.json b/lan/lan_he.json
index b5ce2fe3..3cd26f89 100644
--- a/lan/lan_he.json
+++ b/lan/lan_he.json
@@ -1120,5 +1120,6 @@
"跟随系统": "מערכת מעקב",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?",
- "版本说明": "המידע על גרסה"
+ "版本说明": "המידע על גרסה",
+ "一键登录": "התחברות בלחיצה אחת"
}
\ No newline at end of file
diff --git a/lan/lan_hk.json b/lan/lan_hk.json
index c61800ba..ed7e097e 100644
--- a/lan/lan_hk.json
+++ b/lan/lan_hk.json
@@ -1120,5 +1120,6 @@
"跟随系统": "跟隨系統",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置之後,鎖嘅指紋將被刪除。 你確定要重置它啊?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?",
- "版本说明": "版本說明"
+ "版本说明": "版本說明",
+ "一键登录": "一键登录"
}
\ No newline at end of file
diff --git a/lan/lan_hr.json b/lan/lan_hr.json
index 3eede61c..180f7b98 100644
--- a/lan/lan_hr.json
+++ b/lan/lan_hr.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Prati sistem:",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?",
- "版本说明": "Informacije o verziji"
+ "版本说明": "Informacije o verziji",
+ "一键登录": "Prijavljivanje jednog klika"
}
\ No newline at end of file
diff --git a/lan/lan_hu.json b/lan/lan_hu.json
index f0a2c104..71b13b85 100644
--- a/lan/lan_hu.json
+++ b/lan/lan_hu.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Follow system",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?",
- "版本说明": "Versió leírás"
+ "版本说明": "Versió leírás",
+ "一键登录": "Egykattintásos bejelentkezés"
}
\ No newline at end of file
diff --git a/lan/lan_id.json b/lan/lan_id.json
index 735d0d50..7604e091 100644
--- a/lan/lan_id.json
+++ b/lan/lan_id.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Sistem mengikuti",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?",
- "版本说明": "Catatan versi"
+ "版本说明": "Catatan versi",
+ "一键登录": "Masuk satu klik"
}
\ No newline at end of file
diff --git a/lan/lan_it.json b/lan/lan_it.json
index 91b0f6cf..68d93fb7 100644
--- a/lan/lan_it.json
+++ b/lan/lan_it.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Seguire il sistema",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Dopo il reset, le impronte digitali del lucchetto verranno cancellate. Sei sicuro di volerlo resettare?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?",
- "版本说明": "Versione"
+ "版本说明": "Versione",
+ "一键登录": "Accesso con un clic"
}
\ No newline at end of file
diff --git a/lan/lan_ja.json b/lan/lan_ja.json
index 77e5ddd2..9dfb40de 100644
--- a/lan/lan_ja.json
+++ b/lan/lan_ja.json
@@ -1120,5 +1120,6 @@
"跟随系统": "システムに従う",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?",
- "版本说明": "バージョン説明"
+ "版本说明": "バージョン説明",
+ "一键登录": "ワンクリックログイン"
}
\ No newline at end of file
diff --git a/lan/lan_keys.json b/lan/lan_keys.json
index d4247e2f..2b4c4bb1 100755
--- a/lan/lan_keys.json
+++ b/lan/lan_keys.json
@@ -1121,5 +1121,6 @@
"跟随系统": "跟随系统",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?",
- "版本说明": "版本说明"
+ "版本说明": "版本说明",
+ "一键登录": "一键登录"
}
diff --git a/lan/lan_kk.json b/lan/lan_kk.json
index 6bafdaca..bddeb6ce 100644
--- a/lan/lan_kk.json
+++ b/lan/lan_kk.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Жүйені қолдану",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?",
- "版本说明": "Версиятын көрсету"
+ "版本说明": "Версиятын көрсету",
+ "一键登录": "Бір шертті кіру"
}
\ No newline at end of file
diff --git a/lan/lan_ko.json b/lan/lan_ko.json
index ecaeda0f..af8a531c 100644
--- a/lan/lan_ko.json
+++ b/lan/lan_ko.json
@@ -1120,5 +1120,6 @@
"跟随系统": "시스템을 따르십시오",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?",
- "版本说明": "버전 설명"
+ "版本说明": "버전 설명",
+ "一键登录": "원 클릭 로그인"
}
\ No newline at end of file
diff --git a/lan/lan_lt.json b/lan/lan_lt.json
index fec5cf96..95763916 100644
--- a/lan/lan_lt.json
+++ b/lan/lan_lt.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Sekti sistema",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?",
- "版本说明": "Versijos aprašymas"
+ "版本说明": "Versijos aprašymas",
+ "一键登录": "Vieno paspaudimo prisijungimas"
}
\ No newline at end of file
diff --git a/lan/lan_ms.json b/lan/lan_ms.json
index f084c7bb..c7c5f5d4 100644
--- a/lan/lan_ms.json
+++ b/lan/lan_ms.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Ikut system",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?",
- "版本说明": "Penerangan versi"
+ "版本说明": "Penerangan versi",
+ "一键登录": "Log masuk satu klik"
}
\ No newline at end of file
diff --git a/lan/lan_nl.json b/lan/lan_nl.json
index 3bed21f6..9e1cf0f8 100644
--- a/lan/lan_nl.json
+++ b/lan/lan_nl.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Systeem volgen",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?",
- "版本说明": "Versieomschrijving"
+ "版本说明": "Versieomschrijving",
+ "跟随系统": "Systeem volgen",
}
\ No newline at end of file
diff --git a/lan/lan_pl.json b/lan/lan_pl.json
index fe406a81..d3d3cce4 100644
--- a/lan/lan_pl.json
+++ b/lan/lan_pl.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Śledź system",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?",
- "版本说明": "Wersja"
+ "版本说明": "Wersja",
+ "一键登录": "Login jednym kliknięciem"
}
\ No newline at end of file
diff --git a/lan/lan_pt.json b/lan/lan_pt.json
index bcdb2ed2..7ab9de8b 100644
--- a/lan/lan_pt.json
+++ b/lan/lan_pt.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Siga o sistema",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?",
- "版本说明": "Descrição da versão"
+ "版本说明": "Descrição da versão",
+ "一键登录": "Login com um clique"
}
\ No newline at end of file
diff --git a/lan/lan_ro.json b/lan/lan_ro.json
index 7c6da3e2..c5769acb 100644
--- a/lan/lan_ro.json
+++ b/lan/lan_ro.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Urmează sistemul:",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?",
- "版本说明": "Descrierea versiunii"
+ "版本说明": "Descrierea versiunii",
+ "一键登录": "Autentificare cu un singur clicName"
}
\ No newline at end of file
diff --git a/lan/lan_ru.json b/lan/lan_ru.json
index 8001445e..807f2594 100644
--- a/lan/lan_ru.json
+++ b/lan/lan_ru.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Следуйте системе",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?",
- "版本说明": "Объяснение версии"
+ "版本说明": "Объяснение версии",
+ "一键登录": "Вход в один клик"
}
\ No newline at end of file
diff --git a/lan/lan_sk.json b/lan/lan_sk.json
index e6c0b02f..aa3e342d 100644
--- a/lan/lan_sk.json
+++ b/lan/lan_sk.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Sledovať systém",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetovaní budú prstové odtlačky zámku vymazané. Ste si istí, že chcete obnoviť?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?",
- "版本说明": "Popis verzie"
+ "版本说明": "Popis verzie",
+ "一键登录": "Prihlásenie jedným kliknutím"
}
\ No newline at end of file
diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json
index bdfb900b..18bf31eb 100644
--- a/lan/lan_sr_cyrl.json
+++ b/lan/lan_sr_cyrl.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Пратите систем",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Након ресетовања, отисци прстију браве ће бити избрисани. Да ли сте сигурни да желите да га ресетујете?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?",
- "版本说明": "Опис верзије"
+ "版本说明": "Опис верзије",
+ "一键登录": "Пријава једним кликом"
}
\ No newline at end of file
diff --git a/lan/lan_sv.json b/lan/lan_sv.json
index 99de674a..201f17df 100644
--- a/lan/lan_sv.json
+++ b/lan/lan_sv.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Följ system",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter återställd, kommer låsets fingeravtryck tas bort. Är du säker på att du vill återställa den?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?",
- "版本说明": "Versionsbeskrivning"
+ "版本说明": "Versionsbeskrivning",
+ "一键登录": "Ett klick inloggning"
}
\ No newline at end of file
diff --git a/lan/lan_th.json b/lan/lan_th.json
index 62fc6a47..4e9a6c4c 100644
--- a/lan/lan_th.json
+++ b/lan/lan_th.json
@@ -1120,5 +1120,6 @@
"跟随系统": "ระบบติดตามผล",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วลายนิ้วมือของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม",
- "版本说明": "คำอธิบายรุ่น"
+ "版本说明": "คำอธิบายรุ่น",
+ "一键登录": "เข้าสู่ระบบด้วยคลิกเดียว"
}
\ No newline at end of file
diff --git a/lan/lan_tr.json b/lan/lan_tr.json
index 8bf1e675..6341609f 100644
--- a/lan/lan_tr.json
+++ b/lan/lan_tr.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Sistemi takip et",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?",
- "版本说明": "Sürüm açıklaması"
+ "版本说明": "Sürüm açıklaması",
+ "一键登录": "Tek tıklama giriş"
}
\ No newline at end of file
diff --git a/lan/lan_tw.json b/lan/lan_tw.json
index 3c0cf448..26eb951c 100644
--- a/lan/lan_tw.json
+++ b/lan/lan_tw.json
@@ -1120,5 +1120,6 @@
"跟随系统": "跟蹤系統",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?",
- "版本说明": "版本說明"
+ "版本说明": "版本說明",
+ "一键登录": "一鍵登錄"
}
\ No newline at end of file
diff --git a/lan/lan_uk.json b/lan/lan_uk.json
index bbbe0c19..f48ef8a6 100644
--- a/lan/lan_uk.json
+++ b/lan/lan_uk.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Система стеження за",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?",
- "版本说明": "Опис версії"
+ "版本说明": "Опис версії",
+ "一键登录": "Вхід в один клік"
}
\ No newline at end of file
diff --git a/lan/lan_vi.json b/lan/lan_vi.json
index 3d23aa5b..9be34b34 100644
--- a/lan/lan_vi.json
+++ b/lan/lan_vi.json
@@ -1120,5 +1120,6 @@
"跟随系统": "Hệ thống theo dõi",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sau khi đặt lại, dấu vân tay của khóa sẽ bị xóa. Bạn có chắc chắn muốn thiết lập lại nó?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?",
- "版本说明": "Thông tin phiên bản"
+ "版本说明": "Thông tin phiên bản",
+ "一键登录": "Đăng nhập bằng một cú nhấp chuột"
}
\ No newline at end of file
diff --git a/lan/lan_zh.json b/lan/lan_zh.json
index d665bb14..848858f9 100755
--- a/lan/lan_zh.json
+++ b/lan/lan_zh.json
@@ -1121,5 +1121,6 @@
"跟随系统": "跟随系统",
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?",
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?",
- "版本说明": "版本说明"
+ "版本说明": "版本说明",
+ "一键登录": "一键登录"
}
diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart
index 2bfdddf6..f04c6674 100755
--- a/lib/login/login/starLock_login_logic.dart
+++ b/lib/login/login/starLock_login_logic.dart
@@ -1,6 +1,9 @@
+import 'dart:io';
+
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/apm/apm_helper.dart';
+import 'package:jverify/jverify.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart';
@@ -14,6 +17,7 @@ import '../../mine/mine/starLockMine_logic.dart';
import '../../network/api_repository.dart';
import '../../tools/dateTool.dart';
import '../../tools/eventBusEventManage.dart';
+import '../../tools/jverify_one_click_login.dart';
import '../../tools/showTipView.dart';
import '../../tools/storage.dart';
import '../register/entity/checkIP_entity.dart';
@@ -73,6 +77,43 @@ class StarLockLoginLogic extends BaseGetXController {
}
}
+ Future oneClickLoginAction() async {
+ await JverifyOneClickLoginManage().loginAuth((e) async {
+ final int? code = e.code;
+ final String? content = e.message;
+ // final String operator = map['operator'];
+ AppLog.log('1111code:$code content:$content');
+ if (code == 6000) {
+ final LoginEntity entity = await ApiRepository.to.oneClickLogin(
+ loginType: '3',
+ loginToken: content ?? '',
+ deviceInfo: state.deviceInfoMap);
+ if (entity.errorCode!.codeIsSuccessful) {
+ ApmHelper.instance.trackEvent('login_result', {
+ 'account': state.emailOrPhone.value,
+ 'date': DateTool().getNowDateWithType(1),
+ 'login_res': '成功',
+ });
+
+ Storage.saveLoginData(entity.data);
+ Storage.setBool(saveIsVip, entity.data!.isVip == 1);
+ eventBus.fire(MineInfoChangeRefreshUI());
+ if (Get.isRegistered()) {
+ Get.find().getStarLockInfo(isUnShowLoading: true);
+ }
+ Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
+ BlueManage().scanDevices.clear(); //清除设备缓存
+ } else {
+ ApmHelper.instance.trackEvent('login_result', {
+ 'account': state.emailOrPhone.value,
+ 'date': DateTool().getNowDateWithType(1),
+ 'login_res': '${entity.errorCode}--${entity.errorMsg}',
+ });
+ }
+ }
+ });
+ }
+
Future checkIpAction() async {
final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
if (entity.errorCode!.codeIsSuccessful) {
@@ -110,6 +151,16 @@ class StarLockLoginLogic extends BaseGetXController {
state.canNext.value = state.pwdIsOK && state.isEmailOrPhone;
}
+ @override
+ Future onInit() async {
+ super.onInit();
+
+ JverifyOneClickLoginManage();
+ oneClickLoginAction();
+ state.isCheckVerifyEnable.value =
+ await JverifyOneClickLoginManage().checkVerifyEnable();
+ }
+
@override
void onClose() {
state.onClose();
diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart
index 143ffb90..b9344e57 100755
--- a/lib/login/login/starLock_login_page.dart
+++ b/lib/login/login/starLock_login_page.dart
@@ -1,3 +1,4 @@
+import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -12,6 +13,7 @@ import '../../appRouters.dart';
import '../../app_settings/app_colors.dart';
import '../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../tools/commonItem.dart';
+import '../../tools/jverify_one_click_login.dart';
import '../../tools/submitBtn.dart';
import '../../tools/tf_loginInput.dart';
import '../../tools/titleAppBar.dart';
@@ -234,6 +236,24 @@ class _StarLockLoginPageState extends State {
}
}
: null)),
+ // SizedBox(height: 20.w),
+ // Obx(() => Visibility(
+ // visible: state.isCheckVerifyEnable.value,
+ // child: SubmitBtn(
+ // btnName: '一键登录',
+ // fontSize: 28.sp,
+ // borderRadius: 20.w,
+ // padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
+ // // isDisabled: state.canNext.value,
+ // onClick: () {
+ // if (state.agree.value == false) {
+ // logic.showToast('请先同意用户协议及隐私政策'.tr);
+ // return;
+ // } else {
+ // logic.oneClickLoginAction();
+ // }
+ // }),
+ // )),
SizedBox(height: 50.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,
@@ -258,24 +278,23 @@ class _StarLockLoginPageState extends State {
child: SizedBox(
width: 10.sp,
)),
- if (F.isLite)
- Container()
- else
- GestureDetector(
- child: SizedBox(
- // width: 150.w,
- height: 50.h,
- // color: Colors.red,
- child: Center(
- child: Text('演示模式'.tr,
- style: TextStyle(
- fontSize: 22.sp, color: AppColors.mainColor)),
+ Obx(() => Visibility(
+ visible: state.isCheckVerifyEnable.value,
+ child: GestureDetector(
+ child: SizedBox(
+ // width: 150.w,
+ height: 50.h,
+ // color: Colors.red,
+ child: Center(
+ child: Text('一键登录'.tr,
+ style: TextStyle(
+ fontSize: 22.sp,
+ color: AppColors.mainColor)),
+ ),
+ ),
+ onTap: logic.oneClickLoginAction,
),
- ),
- onTap: () {
- Get.toNamed(Routers.demoModeLockDetailPage);
- },
- )
+ ))
],
),
],
diff --git a/lib/login/login/starLock_login_state.dart b/lib/login/login/starLock_login_state.dart
index 41bc0fef..ec224880 100755
--- a/lib/login/login/starLock_login_state.dart
+++ b/lib/login/login/starLock_login_state.dart
@@ -45,6 +45,8 @@ class StarLockLoginState {
'deviceType': 0
}.obs;
+ RxBool isCheckVerifyEnable = false.obs;
+
void onClose() {
// emailOrPhoneController.dispose();
// pwdController.dispose();
diff --git a/lib/login/login/starLock_login_xhj_page.dart b/lib/login/login/starLock_login_xhj_page.dart
index 8138db92..b0810366 100755
--- a/lib/login/login/starLock_login_xhj_page.dart
+++ b/lib/login/login/starLock_login_xhj_page.dart
@@ -1,3 +1,4 @@
+import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -186,14 +187,12 @@ class _StarLockLoginPageState extends State {
onPressed: () async {
final dynamic data =
await Get.toNamed(Routers.starLockRegisterPage);
- if (data != null) {
- state.emailOrPhoneController.text =
- data['phoneOrEmailStr'];
- logic.checkNext(state.emailOrPhoneController);
- state.pwdController.text = data['pwd'];
- logic.checkNext(state.pwdController);
- setState(() {});
- }
+ state.emailOrPhoneController.text =
+ data['phoneOrEmailStr'];
+ logic.checkNext(state.emailOrPhoneController);
+ state.pwdController.text = data['pwd'];
+ logic.checkNext(state.pwdController);
+ setState(() {});
},
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.mainColor),
@@ -229,25 +228,25 @@ class _StarLockLoginPageState extends State {
child: SizedBox(
width: 10.sp,
)),
- if (F.isLite)
- Container()
- else
- GestureDetector(
- child: SizedBox(
- // width: 150.w,
- height: 50.h,
- // color: Colors.red,
- child: Center(
- child: Text('演示模式'.tr,
- style: TextStyle(
- fontSize: 22.sp,
- color: AppColors.mainColor)),
+ Obx(() => Visibility(
+ visible: state.isCheckVerifyEnable.value,
+ child: GestureDetector(
+ child: SizedBox(
+ // width: 150.w,
+ height: 50.h,
+ // color: Colors.red,
+ child: Center(
+ child: Text('一键登录'.tr,
+ style: TextStyle(
+ fontSize: 22.sp,
+ color: AppColors.mainColor)),
+ ),
+ ),
+ onTap: () async {
+ logic.oneClickLoginAction();
+ },
),
- ),
- onTap: () {
- Get.toNamed(Routers.demoModeLockDetailPage);
- },
- )
+ ))
],
),
],
diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
index 4eb5137a..052ac7e8 100755
--- a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
+++ b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/apm/apm_helper.dart';
+import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart';
@@ -68,34 +69,38 @@ class DoorLockLogLogic extends BaseGetXController {
final List uploadList = [];
for (int i = 0; i < getList.length; i++) {
final List indexList = getList[i];
- // AppLog.log("indexList:$indexList");
- final Map indexMap = {};
- indexMap['type'] = indexList[0].toString();
+ try {
+ // AppLog.log("indexList:$indexList");
+ final Map indexMap = {};
+ indexMap['type'] = indexList[0].toString();
- final int userNo = (indexList[1] * 256) + indexList[2];
- indexMap['user'] = userNo.toString();
- // AppLog.log('userNouserNouserNouserNo:$userNo');
+ final int userNo = (indexList[1] * 256) + indexList[2];
+ indexMap['user'] = userNo.toString();
+ // AppLog.log('userNouserNouserNouserNo:$userNo');
- final List passwordData = indexList.sublist(7, 17);
- final String password = utf8String(passwordData);
- indexMap['password'] = password.toString();
- // AppLog.log('passwordpasswordpassword:$password');
+ final List passwordData = indexList.sublist(7, 17);
+ final String password = utf8String(passwordData);
+ indexMap['password'] = password.toString();
+ // AppLog.log('passwordpasswordpassword:$password');
- indexMap['success'] = '1';
+ indexMap['success'] = '1';
- final int time = (0xff & indexList[3]) << 24 |
- (0xff & indexList[4]) << 16 |
- (0xff & indexList[5]) << 8 |
- (0xFF & indexList[6]);
- final int operateDate = time * 1000;
- final int serverTime = state.currentDate;
- if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
- DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
- // AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}');
- continue;
+ final int time = (0xff & indexList[3]) << 24 |
+ (0xff & indexList[4]) << 16 |
+ (0xff & indexList[5]) << 8 |
+ (0xFF & indexList[6]);
+ final int operateDate = time * 1000;
+ final int serverTime = state.currentDate;
+ if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
+ DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
+ // AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}');
+ continue;
+ }
+ indexMap['date'] = '$operateDate';
+ uploadList.add(indexMap);
+ } catch (e) {
+ AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。');
}
- indexMap['date'] = '$operateDate';
- uploadList.add(indexMap);
}
if (dataLength == state.logCountPage) {
state.ifHaveNext = true;
@@ -246,6 +251,7 @@ class DoorLockLogLogic extends BaseGetXController {
/// 刷新门锁日志列表
StreamSubscription? _getDoorLockLogListRefreshUIEvent;
+
void _getDoorLockLogListRefreshUIAction() {
_getDoorLockLogListRefreshUIEvent = eventBus
.on()
diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
index 5cef5acf..9a9bb1e3 100755
--- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
+++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
@@ -296,38 +296,43 @@ class LockDetailLogic extends BaseGetXController {
final List uploadList = [];
for (int i = 0; i < getList.length; i++) {
final List indexList = getList[i];
- AppLog.log('indexList:$indexList');
- final Map indexMap = {};
- indexMap['type'] = indexList[0].toString();
+ try {
+ AppLog.log('indexList:$indexList');
+ final Map indexMap = {};
+ indexMap['type'] = indexList[0].toString();
- final int userNo = (indexList[1] * 256) + indexList[2];
- indexMap['user'] = userNo.toString();
- // AppLog.log('userNouserNouserNouserNo:$userNo');
+ final int userNo = (indexList[1] * 256) + indexList[2];
+ indexMap['user'] = userNo.toString();
+ // AppLog.log('userNouserNouserNouserNo:$userNo');
- final List passwordData = indexList.sublist(7, 17);
- final String password = utf8String(passwordData);
- indexMap['password'] = password.toString();
- // AppLog.log('passwordpasswordpassword:$password');
+ final List passwordData = indexList.sublist(7, 17);
+ final String password = utf8String(passwordData);
+ indexMap['password'] = password.toString();
+ // AppLog.log('passwordpasswordpassword:$password');
- indexMap['success'] = '1';
+ indexMap['success'] = '1';
- final int time = (0xff & indexList[3]) << 24 |
- (0xff & indexList[4]) << 16 |
- (0xff & indexList[5]) << 8 |
- (0xFF & indexList[6]);
- int operateDate = time * 1000;
- if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
- DateTime.fromMillisecondsSinceEpoch(getUTCNetTime() * 1000))) {
- continue;
- }
+ final int time = (0xff & indexList[3]) << 24 |
+ (0xff & indexList[4]) << 16 |
+ (0xff & indexList[5]) << 8 |
+ (0xFF & indexList[6]);
+ int operateDate = time * 1000;
+ if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
+ DateTime.fromMillisecondsSinceEpoch(
+ getUTCNetTime() * 1000))) {
+ continue;
+ }
- indexMap['date'] = '$operateDate';
- uploadList.add(indexMap);
+ indexMap['date'] = '$operateDate';
+ uploadList.add(indexMap);
- if (i == getList.length - 1) {
- //设置最后的时间戳
+ if (i == getList.length - 1) {
+ //设置最后的时间戳
- state.operateDate = operateDate;
+ state.operateDate = operateDate;
+ }
+ } catch (e) {
+ AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。');
}
}
lockRecordUploadData(uploadList);
diff --git a/lib/main_local.dart b/lib/main_local.dart
index 0fe387f7..9e30d007 100755
--- a/lib/main_local.dart
+++ b/lib/main_local.dart
@@ -4,7 +4,7 @@ import 'flavors.dart';
import 'main.dart' as runner;
Future main() async {
- F.appFlavor = Flavor.pre;
+ F.appFlavor = Flavor.xhj;
// AppLog.log('local调用了main函数');
await runner.main();
}
diff --git a/lib/network/api.dart b/lib/network/api.dart
index 09ec5b51..0cd68027 100755
--- a/lib/network/api.dart
+++ b/lib/network/api.dart
@@ -5,6 +5,7 @@ abstract class Api {
final String getSliderVerifyImgUrl = '/user/getSliderVerifyImg';
final String checkImgUrl = '/user/isSliderValid';
final String loginUrl = '/user/login';
+ final String oneClickLoginUrl = '/user/quickLogin'; // 一键登录
final String resetPasswordURL = '/user/resetPassword'; //重置密码
final String getCountryRegionURL = '/system/listCountry'; //获取国家或地区
final String electronicKeyListURL = '/key/listUser'; //电子钥匙列表
diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart
index aa72dd07..07141ae1 100755
--- a/lib/network/api_provider.dart
+++ b/lib/network/api_provider.dart
@@ -80,6 +80,17 @@ class ApiProvider extends BaseProvider {
'deviceInfo': deviceInfo,
}));
+ Future oneClickLogin(
+ String loginType, String loginToken, Map deviceInfo) =>
+ post(
+ oneClickLoginUrl.toUrl,
+ jsonEncode({
+ 'loginType': loginType,
+ 'platId': '2',
+ 'loginToken': loginToken,
+ 'deviceInfo': deviceInfo,
+ }));
+
Future resetPassword(
String countryCode,
String account,
diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart
index 53d9b263..8f0796e0 100755
--- a/lib/network/api_repository.dart
+++ b/lib/network/api_repository.dart
@@ -145,6 +145,16 @@ class ApiRepository {
return LoginEntity.fromJson(res.body);
}
+ //登录
+ Future oneClickLogin(
+ {required String loginType,
+ required String loginToken,
+ required Map deviceInfo}) async {
+ final res =
+ await apiProvider.oneClickLogin(loginType, loginToken, deviceInfo);
+ return LoginEntity.fromJson(res.body);
+ }
+
//重置密码
Future resetPassword(
String countryCode,
diff --git a/lib/tools/jverify_one_click_login.dart b/lib/tools/jverify_one_click_login.dart
new file mode 100644
index 00000000..94993d6d
--- /dev/null
+++ b/lib/tools/jverify_one_click_login.dart
@@ -0,0 +1,272 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:jverify/jverify.dart';
+import 'package:star_lock/app_settings/app_colors.dart';
+
+import '../app_settings/app_settings.dart';
+import '../common/XSConstantMacro/XSConstantMacro.dart';
+import '../flavors.dart';
+
+class JverifyOneClickLoginManage {
+ factory JverifyOneClickLoginManage() => shareManager()!;
+
+ JverifyOneClickLoginManage._init() {
+ _initSDK();
+ }
+
+ static JverifyOneClickLoginManage? _manager;
+
+ static JverifyOneClickLoginManage? shareManager() {
+ _manager ??= JverifyOneClickLoginManage._init();
+ return _manager;
+ }
+
+ JverifyOneClickLoginManage? get manager => shareManager();
+ Jverify jverify = Jverify();
+
+ /// 统一 key
+ String f_result_key = 'result';
+
+ /// 错误码
+ String f_code_key = 'code';
+
+ /// 回调的提示信息,统一返回 flutter 为 message
+ String f_msg_key = 'message';
+
+ /// 运营商信息
+ String f_opr_key = 'operator';
+
+ Future _initSDK() async {
+ try {
+ await initPlatformState();
+
+ isInitSuccess();
+
+ getToken();
+
+ preLogin();
+ } catch (e) {
+ AppLog.log('SDK 初始化错误: $e');
+ }
+ }
+
+ Future initPlatformState() async {
+ // 初始化 SDK 之前添加监听
+ jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) {
+ print('receive sdk setup call back event :${event.toMap()}');
+ });
+
+ jverify.setDebugMode(true); // 打开调试模式
+ jverify.setCollectionAuth(true);
+ String appKey;
+ if (F.isSKY) {
+ appKey = '7ff37d174c1a568a89e98dad';
+ AppLog.log('appKey:7ff37d174c1a568a89e98dad');
+ } else {
+ appKey = '251fc8074820d122b6de58d2';
+ AppLog.log('appKey:251fc8074820d122b6de58d2');
+ }
+ jverify.setup(
+ appKey: appKey, //"你自己应用的 AppKey",
+ channel: 'devloper');
+
+ /// 授权页面点击时间监听
+ jverify.addAuthPageEventListener((JVAuthPageEvent event) {
+ print('receive auth page event :${event.toMap()}');
+ });
+ }
+
+ /// sdk 初始化是否完成
+ void isInitSuccess() {
+ jverify.isInitSuccess().then((map) {
+ final bool result = map[f_result_key];
+ AppLog.log('sdk 初始化结果:$map');
+ if (result) {
+ AppLog.log('sdk 初始化成功');
+ } else {
+ AppLog.log('sdk 初始化失败');
+ }
+ });
+ }
+
+ /// 判断当前网络环境是否可以发起认证
+ Future checkVerifyEnable() async {
+ final Map map = await jverify.checkVerifyEnable();
+ final bool result = map[f_result_key];
+ return result;
+ // state.jverify.checkVerifyEnable().then((map) {
+ // final bool result = map[f_result_key];
+ // if (result) {
+ // AppLog.log('当前网络环境【支持认证】!');
+ // } else {
+ // AppLog.log('当前网络环境【不支持认证】!');
+ // }
+ // return result;
+ // });
+ }
+
+ void getToken() {
+ jverify.checkVerifyEnable().then((map) {
+ final bool result = map[f_result_key];
+ if (result) {
+ jverify.getToken().then((map) {
+ final int code = map[f_code_key];
+ final String token = map[f_msg_key];
+ final String operator = map[f_opr_key];
+ AppLog.log('getToken code:$code token:$token operator:$operator');
+ });
+ } else {
+ AppLog.log('[2016],msg = 当前网络环境不支持认证');
+ }
+ });
+ }
+
+ /// 登录预取号
+ void preLogin() {
+ jverify.checkVerifyEnable().then((map) {
+ final bool result = map[f_result_key];
+ if (result) {
+ jverify.preLogin().then((map) {
+ AppLog.log('预取号接口回调:${map.toString()}');
+ final int code = map[f_code_key];
+ final String message = map[f_msg_key];
+ });
+ } else {
+ AppLog.log('[2016],msg = 当前网络环境不支持认证');
+ }
+ });
+ }
+
+ /// SDK 请求授权一键登录
+ Future loginAuth(
+ Function(JVListenerEvent jvListenerEvent) action) async {
+ Map map = await jverify.checkVerifyEnable();
+ final bool result = map[f_result_key];
+ print('checkVerifyEnable $map');
+ //需要使用sms的时候不检查result
+ // if (result) {
+ // return await jverify.loginAuth(true);
+ // }
+ // return null;
+
+ if (result) {
+ bool isiOS = Platform.isIOS;
+
+ /// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里,
+ /// android项目将图片存放至drawable文件夹下,可使用图片选择器的文件名,例如:btn_login.xml,入参为"btn_login"。
+ /// ios项目存放在 Assets.xcassets。
+ JVUIConfig uiConfig = JVUIConfig();
+ // uiConfig.authBGGifPath = "main_gif";
+ // uiConfig.authBGVideoPath="main_vi";
+ // uiConfig.authBGVideoPath = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4';
+ uiConfig.authBackgroundImage = 'images/icon_left_grey.png';
+
+ // uiConfig.navHidden = !isiOS;
+ uiConfig.navColor = AppColors.mainColor.value;
+ uiConfig.navText = '一键登录'.tr;
+ uiConfig.navTextColor = Colors.white.value;
+ uiConfig.navReturnImgPath = 'return_bg'; //图片必须存在
+
+ uiConfig.logoWidth = 100;
+ uiConfig.logoHeight = 100;
+ //uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt();
+ uiConfig.logoOffsetY = 100;
+ uiConfig.logoVerticalLayoutItem = JVIOSLayoutItem.ItemSuper;
+ uiConfig.logoHidden = false;
+ uiConfig.logoImgPath = 'logo';
+
+ uiConfig.numberFieldWidth = 200;
+ uiConfig.numberFieldHeight = 40;
+ //uiConfig.numFieldOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.numberFieldWidth/2).toInt();
+ uiConfig.numFieldOffsetY = isiOS ? 120 : 220;
+ uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo;
+ uiConfig.numberColor = AppColors.mainColor.value;
+ uiConfig.numberSize = 18;
+
+ uiConfig.sloganOffsetY = isiOS ? 120 : 260;
+ uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
+ uiConfig.sloganTextColor = Colors.black.value;
+ uiConfig.sloganTextSize = 15;
+// uiConfig.slogan
+ //uiConfig.sloganHidden = 0;
+
+ uiConfig.logBtnOffsetX = 20;
+ uiConfig.logBtnWidth = double.parse('${1.sw - 20 * 2}').toInt();
+ uiConfig.logBtnHeight = 50;
+ //uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt();
+ uiConfig.logBtnOffsetY = isiOS ? 120 : 330;
+ uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
+ uiConfig.logBtnText = '一键登录'.tr;
+ uiConfig.logBtnTextColor = Colors.white.value;
+ uiConfig.logBtnTextSize = 16;
+ uiConfig.logBtnBackgroundPath = '';
+ // uiConfig.logBtnTextBold = true;
+ // uiConfig.loginBtnNormalImage = 'login_btn_normal'; //图片必须存在
+ // uiConfig.loginBtnPressedImage = 'login_btn_press'; //图片必须存在
+ // uiConfig.loginBtnUnableImage = 'login_btn_unable'; //图片必须存在
+
+ uiConfig.privacyHintToast =
+ true; //only android 设置隐私条款不选中时点击登录按钮默认显示toast。
+
+ uiConfig.privacyState = false; //设置默认勾选
+ uiConfig.privacyCheckboxSize = 20;
+ uiConfig.checkedImgPath = 'check_image'; //图片必须存在
+ uiConfig.uncheckedImgPath = 'uncheck_image'; //图片必须存在
+ uiConfig.privacyCheckboxInCenter = true;
+ uiConfig.privacyCheckboxHidden = false;
+ uiConfig.isAlertPrivacyVc = true;
+
+ //uiConfig.privacyOffsetX = isiOS ? (20 + uiConfig.privacyCheckboxSize) : null;
+ uiConfig.privacyOffsetY = 30; // 距离底部距离
+ uiConfig.privacyOffsetX = 15; // 距离底部距离
+ uiConfig.privacyVerticalLayoutItem = JVIOSLayoutItem.ItemSuper;
+ uiConfig.clauseName = '协议1';
+ uiConfig.clauseUrl = 'http://www.baidu.com';
+ uiConfig.clauseBaseColor = Colors.black.value;
+ uiConfig.clauseNameTwo = '协议二';
+ uiConfig.clauseUrlTwo = 'http://www.hao123.com';
+ uiConfig.clauseColor = AppColors.mainColor.value;
+ uiConfig.privacyText = ['我已阅读并同意'.tr];
+ uiConfig.privacyTextSize = 13;
+ uiConfig.privacyItem = [
+ JVPrivacy('用户协议'.tr, XSConstantMacro.userAgreementURL,
+ beforeName: '', afterName: '', separator: ''),
+ JVPrivacy('隐私政策'.tr, XSConstantMacro.privacyPolicyURL, separator: '')
+ ];
+ uiConfig.textVerAlignment = 1;
+ //uiConfig.privacyWithBookTitleMark = true;
+ //uiConfig.privacyTextCenterGravity = false;
+ uiConfig.authStatusBarStyle = JVIOSBarStyle.StatusBarStyleDarkContent;
+ uiConfig.privacyStatusBarStyle = JVIOSBarStyle.StatusBarStyleDefault;
+ uiConfig.modelTransitionStyle = JVIOSUIModalTransitionStyle.CrossDissolve;
+
+ uiConfig.statusBarColorWithNav = true;
+ // uiConfig.virtualButtonTransparent = true;
+
+ uiConfig.privacyStatusBarColorWithNav = true;
+ uiConfig.privacyVirtualButtonTransparent = true;
+
+ uiConfig.needStartAnim = true;
+ uiConfig.needCloseAnim = true;
+ uiConfig.enterAnim = 'activity_slide_enter_bottom';
+ uiConfig.exitAnim = 'activity_slide_exit_bottom';
+
+ uiConfig.privacyNavColor = AppColors.mainColor.value;
+ uiConfig.privacyNavTitleTextColor = Colors.white.value;
+ uiConfig.privacyNavTitleTextSize = 16;
+
+ /// 调用接口设置 UI
+ jverify.setCustomAuthorizationView(true, uiConfig,
+ landscapeConfig: uiConfig);
+ jverify.loginAuthSyncApi2(
+ autoDismiss: true,
+ loginAuthcallback: (event) {
+ action(event);
+ // AppLog.log('获取到 loginAuthSyncApi 接口返回数据,code=${event.code},message = ${event.message},operator = ${event.operator}');
+ });
+ }
+ }
+}
diff --git a/lib/widget/permission/permission_dialog.dart b/lib/widget/permission/permission_dialog.dart
index 150f3867..a68aaa7d 100755
--- a/lib/widget/permission/permission_dialog.dart
+++ b/lib/widget/permission/permission_dialog.dart
@@ -1,3 +1,4 @@
+import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
@@ -109,8 +110,9 @@ class PermissionDialog {
if (Get.context == null) {
return false;
}
+ final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
final bool isAndroid33 =
- AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
+ AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33;
//通用的局部函数
List requestPermission() {
@@ -197,8 +199,9 @@ class PermissionDialog {
if (Get.context == null) {
return false;
}
+ final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
final bool isAndroid33 =
- AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
+ AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33;
//通用的局部函数
List requestPermission() {
diff --git a/pubspec.lock b/pubspec.lock
index a31c6a96..49aad6b2 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -996,6 +996,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.13"
+ jverify:
+ dependency: "direct main"
+ description:
+ name: jverify
+ sha256: "26d1667d8c71403b77a2620a8c618625f8b4bfc950dac285b8f35ebc5e60fa5a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
leak_tracker:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 8462e77b..d408e99c 100755
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -249,6 +249,7 @@ dependencies:
flutter_bugly: ^1.0.2
open_filex: ^4.4.0
+ jverify: 3.0.0
#
umeng_common_sdk: 1.2.8
#