From ad26d7bfd07463e4ef09c0cf3764c68dc01f9bae Mon Sep 17 00:00:00 2001 From: Dynesshely Date: Mon, 1 Apr 2024 23:09:34 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Fix:=20Try=20to=20fix=20dumplica?= =?UTF-8?q?te=20key=20error=20with=20`ValueKey`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kitx_mobile/lib/pages/devices_page.dart | 19 ++++++++++++------- .../lib/utils/extensions/device_info_ext.dart | 10 ++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 kitx_mobile/lib/utils/extensions/device_info_ext.dart diff --git a/kitx_mobile/lib/pages/devices_page.dart b/kitx_mobile/lib/pages/devices_page.dart index b001e7f..87caf12 100644 --- a/kitx_mobile/lib/pages/devices_page.dart +++ b/kitx_mobile/lib/pages/devices_page.dart @@ -7,6 +7,7 @@ import 'package:kitx_mobile/pages/controls/device_status_icon.dart'; import 'package:kitx_mobile/pages/controls/device_status_label.dart'; import 'package:kitx_mobile/pages/pages.dart'; import 'package:kitx_mobile/pages/sub_pages/device_chat_page.dart'; +import 'package:kitx_mobile/utils/extensions/device_info_ext.dart'; import 'package:kitx_mobile/utils/handlers/vibration_handler.dart'; import 'package:kitx_shared_dart/kitx_shared_dart.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; @@ -140,17 +141,24 @@ class _DevicesPage extends State { physics: NeverScrollableScrollPhysics(), itemCount: instances.devicesService.length + 1, itemBuilder: (_, index) { + if (index >= instances.devicesService.length) { + return const SizedBox( + key: ValueKey('PlacerEmptySizedBox'), + height: 300, + ); + } + var list = instances.devicesService.deviceInfoList; - var info = index >= instances.devicesService.length ? null : list[index]; + var info = list[index]; return DeviceCard( info, index, - key: Key('${info?.device.deviceName ?? ''}${info?.device.iPv4 ?? ''}'), + key: info.getValueKey(), shouldDelay: justEnteredPage, shouldScaleIn: instances.appInfo.animationEnabled.value, onTap: () { VibrationHandler.tryVibrate(); - if (info != null) selectedDeviceInfo.value = info; + selectedDeviceInfo.value = info; _paneController.open(); }, ); @@ -174,10 +182,7 @@ class _DevicesPage extends State { instances.devicesService.deviceInfoList[i], i, width: (MediaQuery.of(context).size.width - 20) * deviceCardHorizontalScale, - key: Key( - '${instances.devicesService.deviceInfoList[i].device.deviceName}' - '${instances.devicesService.deviceInfoList[i].device.iPv4}', - ), + key: instances.devicesService.deviceInfoList[i].getValueKey(), shouldDelay: justEnteredPage, shouldScaleIn: instances.appInfo.animationEnabled.value, onTap: () { diff --git a/kitx_mobile/lib/utils/extensions/device_info_ext.dart b/kitx_mobile/lib/utils/extensions/device_info_ext.dart new file mode 100644 index 0000000..e166575 --- /dev/null +++ b/kitx_mobile/lib/utils/extensions/device_info_ext.dart @@ -0,0 +1,10 @@ +import 'package:flutter/foundation.dart'; +import 'package:kitx_shared_dart/kitx_shared_dart.dart'; + +/// Device Info Extensions +extension DeviceInfoExtensions on DeviceInfo { + /// Get Value Key + ValueKey getValueKey() { + return ValueKey('${device.deviceName} (${device.macAddress})'); + } +}