diff --git a/lan/lan_ar.json b/lan/lan_ar.json index 65ea2bd7..b8d40192 100644 --- a/lan/lan_ar.json +++ b/lan/lan_ar.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_bg.json b/lan/lan_bg.json index 31814e15..973987ea 100644 --- a/lan/lan_bg.json +++ b/lan/lan_bg.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_bn.json b/lan/lan_bn.json index 717b2dda..7badc5ab 100644 --- a/lan/lan_bn.json +++ b/lan/lan_bn.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_cs.json b/lan/lan_cs.json index f12e2fc8..e3bce170 100644 --- a/lan/lan_cs.json +++ b/lan/lan_cs.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_da.json b/lan/lan_da.json index 6cc679ec..2c816ee0 100644 --- a/lan/lan_da.json +++ b/lan/lan_da.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_de.json b/lan/lan_de.json index 625698db..1e161734 100644 --- a/lan/lan_de.json +++ b/lan/lan_de.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_el.json b/lan/lan_el.json index 92bbd502..8fbb36ec 100644 --- a/lan/lan_el.json +++ b/lan/lan_el.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_en.json b/lan/lan_en.json index a68e857f..2e5dc1cc 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -1067,7 +1067,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_es.json b/lan/lan_es.json index 3671a855..80e19c93 100644 --- a/lan/lan_es.json +++ b/lan/lan_es.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_et.json b/lan/lan_et.json index 7e18e424..24f29906 100644 --- a/lan/lan_et.json +++ b/lan/lan_et.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_fi.json b/lan/lan_fi.json index 0172ecfd..d85b91e5 100644 --- a/lan/lan_fi.json +++ b/lan/lan_fi.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_fr.json b/lan/lan_fr.json index f592abf0..9bb8fc1c 100644 --- a/lan/lan_fr.json +++ b/lan/lan_fr.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_he.json b/lan/lan_he.json index 7814f574..5481005d 100644 --- a/lan/lan_he.json +++ b/lan/lan_he.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_hi.json b/lan/lan_hi.json index 27d5a63d..aaf974d0 100644 --- a/lan/lan_hi.json +++ b/lan/lan_hi.json @@ -1067,7 +1067,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_hk.json b/lan/lan_hk.json index d32e5045..c3026b24 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -1066,7 +1066,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_hr.json b/lan/lan_hr.json index d9e14471..6d16c1ee 100644 --- a/lan/lan_hr.json +++ b/lan/lan_hr.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_hu.json b/lan/lan_hu.json index 20713f6c..e48ff904 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_hy.json b/lan/lan_hy.json index d84ffba5..0b83d204 100644 --- a/lan/lan_hy.json +++ b/lan/lan_hy.json @@ -1067,7 +1067,7 @@ "波兰语": "Լեհերեն", "斯洛伐克语": "Սլովենչինա", "捷克语": "Չեշտինա", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_id.json b/lan/lan_id.json index ff57185f..8049dddf 100644 --- a/lan/lan_id.json +++ b/lan/lan_id.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_it.json b/lan/lan_it.json index 952f2314..85e2c038 100644 --- a/lan/lan_it.json +++ b/lan/lan_it.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ja.json b/lan/lan_ja.json index 4fea4fe7..ef964bea 100644 --- a/lan/lan_ja.json +++ b/lan/lan_ja.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ka.json b/lan/lan_ka.json index 8ba96e84..67aaa6f8 100644 --- a/lan/lan_ka.json +++ b/lan/lan_ka.json @@ -1067,7 +1067,7 @@ "波兰语": "პოლსკი", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_kk.json b/lan/lan_kk.json index cd0bcd7e..6c6716fc 100644 --- a/lan/lan_kk.json +++ b/lan/lan_kk.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ko.json b/lan/lan_ko.json index 9152fd09..e9fae44f 100644 --- a/lan/lan_ko.json +++ b/lan/lan_ko.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_lt.json b/lan/lan_lt.json index 399b4ac7..cfd24cce 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ms.json b/lan/lan_ms.json index 13240f71..833b1381 100644 --- a/lan/lan_ms.json +++ b/lan/lan_ms.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_nl.json b/lan/lan_nl.json index dc59ec9a..485d6e46 100644 --- a/lan/lan_nl.json +++ b/lan/lan_nl.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_pl.json b/lan/lan_pl.json index 22d90ca8..85dc5f65 100644 --- a/lan/lan_pl.json +++ b/lan/lan_pl.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_pt.json b/lan/lan_pt.json index b5481eca..a93f60e2 100644 --- a/lan/lan_pt.json +++ b/lan/lan_pt.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ro.json b/lan/lan_ro.json index 48dcde43..7592582a 100644 --- a/lan/lan_ro.json +++ b/lan/lan_ro.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ru.json b/lan/lan_ru.json index 779e0d2d..ebf8712c 100644 --- a/lan/lan_ru.json +++ b/lan/lan_ru.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_sk.json b/lan/lan_sk.json index 0092a539..6f33ec14 100644 --- a/lan/lan_sk.json +++ b/lan/lan_sk.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json index 87bdfadc..8e017246 100644 --- a/lan/lan_sr_cyrl.json +++ b/lan/lan_sr_cyrl.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_sv.json b/lan/lan_sv.json index b77c58ba..1d3a7b05 100644 --- a/lan/lan_sv.json +++ b/lan/lan_sv.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_th.json b/lan/lan_th.json index c31dc51f..da3fe4ed 100644 --- a/lan/lan_th.json +++ b/lan/lan_th.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_tr.json b/lan/lan_tr.json index d9ff0398..d870329b 100644 --- a/lan/lan_tr.json +++ b/lan/lan_tr.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_tw.json b/lan/lan_tw.json index eb1e5814..f49c8e3e 100644 --- a/lan/lan_tw.json +++ b/lan/lan_tw.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_uk.json b/lan/lan_uk.json index f4d5b602..c0bcfcd9 100644 --- a/lan/lan_uk.json +++ b/lan/lan_uk.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_ur.json b/lan/lan_ur.json index f2e55d80..45f7a811 100644 --- a/lan/lan_ur.json +++ b/lan/lan_ur.json @@ -1067,7 +1067,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_vi.json b/lan/lan_vi.json index 8e12c59f..e037b39a 100644 --- a/lan/lan_vi.json +++ b/lan/lan_vi.json @@ -1065,7 +1065,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lan/lan_zh.json b/lan/lan_zh.json index 86ddf95b..913c7bf3 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -1070,7 +1070,7 @@ "波兰语": "Polski", "斯洛伐克语": "Slovenčina", "捷克语": "Čeština", - "希腊语": "Ελληνικά", + "希腊语": "ελληνικά", "希伯来语": "עברית", "塞尔维亚语": "Српски", "土耳其语": "Türkçe", diff --git a/lib/blue/blue_manage.dart b/lib/blue/blue_manage.dart index 29ea09f3..b49f20a8 100755 --- a/lib/blue/blue_manage.dart +++ b/lib/blue/blue_manage.dart @@ -362,6 +362,27 @@ class BlueManage { // 00=未配对,01=已配对 if (pairStatus == '00') { return true; // 未配对才返回true + } else { + // 将十六进制字符串转换为整数(0~255) + int statusValue = int.parse(pairStatus, radix: 16); + // 提取 byte0(配对状态:第1位) + int byte0 = (statusValue >> 0) & 0x01; // 取最低位 + + // 提取 byte1(事件状态:第2位) + int byte1 = (statusValue >> 1) & 0x01; // 取次低位 + + // 判断是否未配对 + bool isPaired = (byte0 == 1); + + // 判断是否有新事件 + bool hasNewEvent = (byte1 == 1); + + // 返回是否未配对(原逻辑) + if (isPaired) { + return true; // 已配对返回false + } else { + return false; // 未配对返回true + } } // 已配对(01)不返回true,继续判断下一个uuid } @@ -644,7 +665,7 @@ class BlueManage { scanDevices.clear(); startScanSingle(deviceName, 15, (List scanDevices) { _connectDevice(scanDevices, deviceName, connectStateCallBack, - isAddEquipment: isAddEquipment, isReconnect: false); + isAddEquipment: isAddEquipment, isReconnect: true); }); } else { connectStateCallBack(BluetoothConnectionState.disconnected); diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 51b74482..dbbe4187 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -1,7 +1,9 @@ +import 'package:flustars/flustars.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart'; @@ -295,6 +297,132 @@ class _DoorLockLogPageState extends State with RouteAware { ); } + String formatTimestampToHHmm(int timestampMs) { + // 1. 将毫秒时间戳转换为秒(DateTime 需要秒级时间戳) + int timestampSec = timestampMs ~/ 1000; + + // 2. 创建 DateTime 对象 + DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestampMs); + + // 3. 使用 DateFormat 格式化为 "HH:mm" + DateFormat formatter = DateFormat('HH:mm'); + return formatter.format(dateTime); + } + + String _buildIDByType(DoorLockLogDataItem item) { + final recordType = item.recordType; + switch (recordType) { + case 10: + if (item.username != null && item.username != '') { + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '指纹'.tr + + '开锁'.tr + + '(ID:${item.username})'; + } else { + return item.recordStr ?? ''; + } + + case 20: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '密码'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 30: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '卡'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 40: + if (item.username != null && item.username != '') { + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '蓝牙'.tr + + '开锁'.tr + + '(' + + 'ID'.tr + + ':${item.username})'; + } else { + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '蓝牙'.tr + + '开锁'.tr + + '(' + + 'ID'.tr + + ':${item.userid})'; + } + + case 50: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '组合模式'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 60: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '添加指纹'.tr + + '(ID:${item.username})'; + case 70: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '添加密码'.tr + + '(ID:${item.username})'; + case 80: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '添加卡'.tr + + '(ID:${item.username})'; + case 90: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '删除'.tr + + '指纹'.tr + + '(ID:${item.username})'; + case 100: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '删除'.tr + + '密码'.tr + + '(ID:${item.username})'; + case 110: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '删除'.tr + + '卡'.tr + + '(ID:${item.username})'; + + case 160: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '人脸'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 190: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '胁迫指纹'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 200: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '胁迫密码'.tr + + '开锁'.tr + + '(ID:${item.username})'; + case 210: + return '${formatTimestampToHHmm(item.operateDate!)} ' + + '胁迫卡片'.tr + + '开锁'.tr + + '(ID:${item.username})'; + default: + return item.recordStr ?? ''; + } + } + + Color _buildTextColorByType(DoorLockLogDataItem item) { + final recordType = item.recordType; + switch (recordType) { + case 120: + case 150: + case 130: + case 190: + case 200: + case 210: + case 220: + return Colors.red; + default: + return Colors.black; + } + } + TimelineTileBuilder _timelineBuilderWidget() { return TimelineTileBuilder.fromStyle( contentsAlign: ContentsAlign.basic, @@ -309,18 +437,26 @@ class _DoorLockLogPageState extends State with RouteAware { ); }, child: Padding( - padding: EdgeInsets.only(left: 20.w, top: 20.h), + padding: EdgeInsets.only(left: 20.w, top: 20.h, right: 20.w), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - timelineData.recordStr ?? '', - textAlign: TextAlign.left, - style: TextStyle( - color: Colors.black, - fontSize: 24.sp, - fontWeight: FontWeight.w600, + // 使用 SingleChildScrollView 实现横向滚动 + SingleChildScrollView( + scrollDirection: Axis.horizontal, // 横向滚动 + child: Text( + _buildIDByType(timelineData), + textAlign: TextAlign.left, + style: TextStyle( + color: _buildTextColorByType(timelineData), + fontSize: 24.sp, + fontWeight: FontWeight.w600, + ), + // 关键:禁用换行,强制单行显示 + maxLines: 1, + // 可选:添加省略号(如果文本过长) + overflow: TextOverflow.ellipsis, ), ), SizedBox( diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart index ebf94158..b878d092 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart @@ -281,7 +281,6 @@ class AddFingerprintLogic extends BaseGetXController { privateKey: getPrivateKeyList, token: getTokenList, ).toString(); - showBlueConnetctToastTimer(action: () async { final String getMobile = (await Storage.getMobile())!; ApmHelper.instance.trackEvent('add_fingerprint', { @@ -460,14 +459,7 @@ class AddFingerprintLogic extends BaseGetXController { @override void onReady() { super.onReady(); - _initReplySubscription(); - } - - @override - void onInit() { - super.onInit(); - senderAddFingerprint(); } diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_page.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_page.dart index 5eb834b1..a330385d 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_page.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_page.dart @@ -122,26 +122,26 @@ class _AddFingerprintPageState extends State with RouteAware String getIconNumber(int number) { String iconPath = ''; switch (number) { - case 0: + case 1: iconPath = 'images/main/icon_addFingerprint_fingerprint_one.png'; break; - case 1: + case 2: iconPath = 'images/main/icon_addFingerprint_fingerprint_two.png'; break; - case 2: + case 3: iconPath = 'images/main/icon_addFingerprint_fingerprint_three.png'; break; - case 3: + case 4: iconPath = 'images/main/icon_addFingerprint_fingerprint_four.png'; break; - case 4: + case 5: iconPath = 'images/main/icon_addFingerprint_fingerprint_five.png'; break; - case 5: + case 6: iconPath = 'images/main/icon_addFingerprint_fingerprint_six.png'; break; default: - iconPath = 'images/main/icon_addFingerprint_fingerprint_six.png'; + iconPath = 'images/main/icon_addFingerprint_fingerprint_one.png'; break; } return iconPath; diff --git a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart index f2a1a7d9..ab32de1f 100755 --- a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart +++ b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart @@ -340,10 +340,10 @@ class FingerprintListLogic extends BaseGetXController { Future getFingerprintsListData( {required bool isRefresh}) async { // 如果是下拉刷新,清空已有数据 - if (isRefresh) { + // if (isRefresh) { state.fingerprintItemListData.clear(); pageNo = 1; - } + final FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData( lockId: state.lockId.value.toString(), diff --git a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart index ca5d7a9d..7178e4d5 100755 --- a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart +++ b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart @@ -442,10 +442,13 @@ class LockSetLogic extends BaseGetXController { } // 获取锁设置信息 - Future getLockSettingInfoData() async { + Future getLockSettingInfoData({ + bool isUnShowLoading = false, + }) async { final LockSetInfoEntity entity = await ApiRepository.to.getLockSettingInfoData( lockId: state.lockId.toString(), + isUnShowLoading: isUnShowLoading, ); if (entity.errorCode!.codeIsSuccessful) { state.lockSetInfoData.value = entity.data!; @@ -718,7 +721,7 @@ class LockSetLogic extends BaseGetXController { records: records, isUnShowLoading: true); if (entity.errorCode!.codeIsSuccessful) { - await getLockSettingInfoData(); + await getLockSettingInfoData(isUnShowLoading: true); update(); } } diff --git a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart index fde8ba46..17019e57 100644 --- a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart +++ b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart @@ -167,11 +167,9 @@ class LockVoiceSettingLogic extends BaseGetXController { BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); - // 延迟1秒后重试(避免频繁请求) - Future.delayed(const Duration(seconds: 2), () { - // 递归调用自身,重试次数+1 - sendFileToDevice(data, token); - }); + + // 断开后重发一下 + sendFileToDevice(data, token); // showBlueConnetctToast(); } @@ -294,31 +292,6 @@ class LockVoiceSettingLogic extends BaseGetXController { } } - // 发送获取型号蓝牙命令 - sendGetDeviceModelBleMessage() { - showEasyLoading(); - showBlueConnetctToastTimer(action: () { - dismissEasyLoading(); - }); - BlueManage().blueSendData( - BlueManage().connectDeviceName, - (BluetoothConnectionState deviceConnectionState) async { - if (deviceConnectionState == BluetoothConnectionState.connected) { - BlueManage().writeCharacteristicWithResponse( - GetDeviceModelCommand( - lockID: BlueManage().connectDeviceName, - ).packageData(), - ); - } else if (deviceConnectionState == - BluetoothConnectionState.disconnected) { - dismissEasyLoading(); - cancelBlueConnetctToastTimer(); - showBlueConnetctToast(); - } - }, - ); - } - void _startSendLanguageFile() { if (state.data == null) return; state.voiceSubcontractingIndex = 0; diff --git a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_page.dart b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_page.dart index e4fc66ff..ed5e0ec5 100644 --- a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_page.dart +++ b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_page.dart @@ -37,18 +37,29 @@ class _LockVoiceSettingState extends State { barTitle: '锁语音包设置'.tr, haveBack: false, haveOtherLeftWidget: true, - leftWidget: TextButton( - onPressed: () { - eventBus - .fire(RefreshLockListInfoDataEvent(isUnShowLoading: true)); - Get.offAllNamed(Routers.starLockMain); - }, - child: Text( - '跳过'.tr, - style: TextStyle( - color: Colors.white, - fontSize: 24.sp, - fontWeight: FontWeight.w500, + leftWidget: Container( + width: 60.w, // 手动扩大leading区域宽度,防止内容换行 + child: TextButton( + onPressed: () { + eventBus + .fire(RefreshLockListInfoDataEvent(isUnShowLoading: true)); + Get.offAllNamed(Routers.starLockMain); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.symmetric(horizontal: 4), // 减少两侧空白 + minimumSize: Size.zero, // 避免最小尺寸影响 + tapTargetSize: MaterialTapTargetSize.shrinkWrap, // 紧凑布局 + ), + child: FittedBox( + fit: BoxFit.scaleDown, + child: Text( + '跳过'.tr, + style: TextStyle( + color: Colors.white, + fontSize: 24.sp, // 减小字体,防止换行 + fontWeight: FontWeight.w500, + ), + ), ), ), ), @@ -67,111 +78,92 @@ class _LockVoiceSettingState extends State { ), ], ), - body: _buildBody(), - ), - ); - } - - Widget _buildBody() { - return Obx( - () => SingleChildScrollView( - child: Column( - children: [ - Container( - width: 1.sw, - decoration: BoxDecoration(color: Colors.white), - child: ListView.builder( - itemCount: state.soundTypeList.length, - itemBuilder: (BuildContext context, int index) { - // 判断是否是最后一个元素(索引等于 itemCount - 1) - final isLastItem = index == state.soundTypeList.length - 1; - - // 获取当前平台数据(假设 platFormSet 是 RxList) - final platform = state.soundTypeList.value[index]; - return CommonItem( - leftTitel: state.soundTypeList.value[index], - rightTitle: '', - isHaveLine: !isLastItem, - // 最后一个元素不显示分割线(取反) - isHaveDirection: false, - isHaveRightWidget: true, - rightWidget: Radio( - // Radio 的值:使用平台的唯一标识(如 id) - value: platform, - // 当前选中的值:与 selectPlatFormIndex 关联的 id - groupValue: state.soundTypeList - .value[state.selectSoundTypeIndex.value], - // 选中颜色(可选,默认主题色) - activeColor: AppColors.mainColor, - // 点击 Radio 时回调(更新选中索引) - onChanged: (value) { - if (value != null) { - setState(() { - // 找到当前选中平台的索引(根据 id 匹配) - final newIndex = state.soundTypeList.value - .indexWhere((p) => p == value); - if (newIndex != -1) { - state.selectSoundTypeIndex.value = newIndex; + body: Obx( + () => ListView( + padding: EdgeInsets.zero, + children: [ + // 语音类型选择区 + Container( + width: 1.sw, + color: Colors.white, + child: Column( + children: List.generate( + state.soundTypeList.length, + (index) { + final isLastItem = + index == state.soundTypeList.length - 1; + final soundType = state.soundTypeList.value[index]; + return CommonItem( + leftTitel: soundType, + rightTitle: '', + isHaveLine: !isLastItem, + isHaveDirection: false, + isHaveRightWidget: true, + rightWidget: Radio( + value: soundType, + groupValue: state.soundTypeList + .value[state.selectSoundTypeIndex.value], + activeColor: AppColors.mainColor, + onChanged: (value) { + if (value != null) { + final newIndex = state.soundTypeList.value + .indexWhere((p) => p == value); + if (newIndex != -1) { + state.selectSoundTypeIndex.value = newIndex; + } } - }); - } - }, - ), - action: () { - setState(() { - state.selectSoundTypeIndex.value = index; - }); + }, + ), + action: () { + state.selectSoundTypeIndex.value = index; + }, + ); }, - ); - }, - shrinkWrap: true, - physics: const AlwaysScrollableScrollPhysics(), + ), + ), ), - ), - SizedBox( - height: 8.h, - ), - Column( - children: _buildList(), - ), - ], + SizedBox( + height: 8.h, + ), + // 语言包列表区 + Container( + color: Colors.transparent, + child: Column( + children: List.generate( + state.languages.length, + (index) { + final item = state.languages[index]; + return CommonItem( + leftTitel: item.langText, + rightTitle: '', + isHaveLine: true, + isHaveDirection: false, + isHaveRightWidget: true, + rightWidget: + state.selectPassthroughListIndex.value == index + ? Image( + image: const AssetImage( + 'images/icon_item_checked.png'), + width: 30.w, + height: 30.w, + fit: BoxFit.contain, + ) + : Container(), + action: () { + state.selectPassthroughListIndex.value = index; + }, + ); + }, + ), + ), + ), + ], + ), ), ), ); } - List _buildList() { - final appLocalLanguages = state.languages; - return List.generate( - appLocalLanguages.length, - (index) => _buildItem( - appLocalLanguages[index], - index, - ), - ); - } - - _buildItem(PassthroughItem passthroughItem, index) { - return CommonItem( - leftTitel: passthroughItem.langText, - rightTitle: '', - isHaveLine: true, - isHaveDirection: false, - isHaveRightWidget: true, - rightWidget: state.selectPassthroughListIndex.value == index - ? Image( - image: const AssetImage('images/icon_item_checked.png'), - width: 30.w, - height: 30.w, - fit: BoxFit.contain, - ) - : Container(), - action: () { - state.selectPassthroughListIndex.value = index; - }, - ); - } - @override void dispose() { // TODO: implement dispose diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 0325b302..af23be71 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -428,11 +428,17 @@ class ApiProvider extends BaseProvider { isUnShowLoading: isUnShowLoading); // 获取所有锁设置信息 - Future getLockSettingInfoData(String lockId) => post( - getLockSettingURL.toUrl, - jsonEncode({ - 'lockId': lockId, - })); + Future getLockSettingInfoData( + String lockId, { + bool isUnShowLoading = true, + }) => + post( + getLockSettingURL.toUrl, + jsonEncode({ + 'lockId': lockId, + }), + isUnShowLoading: isUnShowLoading, + ); // 获取所有锁设置信息 Future getLockSettingInfoDataIsNotLoadingIcon(String lockId) => @@ -2824,9 +2830,9 @@ class ApiProvider extends BaseProvider { /// 设置语音包 Future reportBuyRequest( - int lockId, - String type, - ) => + int lockId, + String type, + ) => post( reportBuyRequestURL.toUrl, jsonEncode({ @@ -2836,8 +2842,6 @@ class ApiProvider extends BaseProvider { isShowNetworkErrorMsg: false, isShowErrMsg: false, isUnShowLoading: true); - - } extension ExtensionString on String { diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index f3e2587a..b9ecd53e 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -493,8 +493,11 @@ class ApiRepository { // 获取所有锁设置信息 Future getLockSettingInfoData( - {required String lockId}) async { - final res = await apiProvider.getLockSettingInfoData(lockId); + {required String lockId, bool isUnShowLoading = false}) async { + final res = await apiProvider.getLockSettingInfoData( + lockId, + isUnShowLoading: isUnShowLoading, + ); return LockSetInfoEntity.fromJson(res.body); }