Update dependencies and improve code consistency across multiple files

This commit is contained in:
zjs81
2026-02-14 02:22:45 -07:00
parent f87d4896ab
commit 72f0aa7208
12 changed files with 98 additions and 103 deletions
+1 -1
View File
@@ -83,5 +83,5 @@ flutter {
} }
dependencies { dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
} }
+1 -1
View File
@@ -55,7 +55,7 @@ class AppDebugLogScreen extends StatelessWidget {
child: hasEntries child: hasEntries
? ListView.separated( ? ListView.separated(
itemCount: entries.length, itemCount: entries.length,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final entry = entries[index]; final entry = entries[index];
return ListTile( return ListTile(
+1 -1
View File
@@ -100,7 +100,7 @@ class _BleDebugLogScreenState extends State<BleDebugLogScreen> {
itemCount: showingFrames itemCount: showingFrames
? entries.length ? entries.length
: rawEntries.length, : rawEntries.length,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (showingFrames) { if (showingFrames) {
final entry = entries[index]; final entry = entries[index];
+1 -1
View File
@@ -594,7 +594,7 @@ class _ChannelMessagePathMapScreenState
: ListView.separated( : ListView.separated(
padding: const EdgeInsets.symmetric(vertical: 4), padding: const EdgeInsets.symmetric(vertical: 4),
itemCount: hops.length, itemCount: hops.length,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final hop = hops[index]; final hop = hops[index];
return ListTile( return ListTile(
+1 -1
View File
@@ -530,7 +530,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
child: ListView.separated( child: ListView.separated(
padding: const EdgeInsets.symmetric(vertical: 4), padding: const EdgeInsets.symmetric(vertical: 4),
itemCount: pathTraceData.pathData.length + 1, itemCount: pathTraceData.pathData.length + 1,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Column( return Column(
children: [ children: [
+2 -2
View File
@@ -742,7 +742,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
); );
} }
_gpxExport( Future<void> _gpxExport(
GpxExport exporter, GpxExport exporter,
String name, String name,
String description, String description,
@@ -782,7 +782,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
} }
} }
_buildExportCard(MeshCoreConnector connector) { Widget _buildExportCard(MeshCoreConnector connector) {
final l10n = context.l10n; final l10n = context.l10n;
return Card( return Card(
child: Column( child: Column(
+5 -11
View File
@@ -1,4 +1,3 @@
import 'dart:isolate';
import 'dart:io'; import 'dart:io';
import 'package:flutter_foreground_task/flutter_foreground_task.dart'; import 'package:flutter_foreground_task/flutter_foreground_task.dart';
@@ -15,18 +14,13 @@ class BackgroundService {
channelDescription: 'Keeps MeshCore running in the background.', channelDescription: 'Keeps MeshCore running in the background.',
channelImportance: NotificationChannelImportance.LOW, channelImportance: NotificationChannelImportance.LOW,
priority: NotificationPriority.LOW, priority: NotificationPriority.LOW,
iconData: const NotificationIconData(
resType: ResourceType.mipmap,
resPrefix: ResourcePrefix.ic,
name: 'launcher',
),
), ),
iosNotificationOptions: const IOSNotificationOptions( iosNotificationOptions: const IOSNotificationOptions(
showNotification: false, showNotification: false,
playSound: false, playSound: false,
), ),
foregroundTaskOptions: const ForegroundTaskOptions( foregroundTaskOptions: ForegroundTaskOptions(
interval: 5000, eventAction: ForegroundTaskEventAction.repeat(5000),
autoRunOnBoot: false, autoRunOnBoot: false,
allowWifiLock: false, allowWifiLock: false,
), ),
@@ -63,13 +57,13 @@ void startCallback() {
class _MeshCoreTaskHandler extends TaskHandler { class _MeshCoreTaskHandler extends TaskHandler {
@override @override
void onStart(DateTime timestamp, SendPort? sendPort) {} Future<void> onStart(DateTime timestamp, TaskStarter starter) async {}
@override @override
void onRepeatEvent(DateTime timestamp, SendPort? sendPort) {} void onRepeatEvent(DateTime timestamp) {}
@override @override
void onDestroy(DateTime timestamp, SendPort? sendPort) {} Future<void> onDestroy(DateTime timestamp, bool isTimeout) async {}
@override @override
void onNotificationButtonPressed(String id) {} void onNotificationButtonPressed(String id) {}
+18 -18
View File
@@ -67,7 +67,7 @@ class NotificationService {
try { try {
await _notifications.initialize( await _notifications.initialize(
initSettings, settings: initSettings,
onDidReceiveNotificationResponse: _onNotificationTapped, onDidReceiveNotificationResponse: _onNotificationTapped,
); );
_isInitialized = true; _isInitialized = true;
@@ -149,10 +149,10 @@ class NotificationService {
); );
await _notifications.show( await _notifications.show(
contactId?.hashCode ?? 0, id: contactId?.hashCode ?? 0,
contactName, title: contactName,
message, body: message,
notificationDetails, notificationDetails: notificationDetails,
payload: 'message:$contactId', payload: 'message:$contactId',
); );
} }
@@ -194,10 +194,10 @@ class NotificationService {
); );
await _notifications.show( await _notifications.show(
contactId?.hashCode ?? DateTime.now().millisecondsSinceEpoch, id: contactId?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
_l10n.notification_newTypeDiscovered(contactType), title: _l10n.notification_newTypeDiscovered(contactType),
contactName, body: contactName,
notificationDetails, notificationDetails: notificationDetails,
payload: 'advert:$contactId', payload: 'advert:$contactId',
); );
} }
@@ -248,10 +248,10 @@ class NotificationService {
: preview; : preview;
await _notifications.show( await _notifications.show(
channelIndex?.hashCode ?? DateTime.now().millisecondsSinceEpoch, id: channelIndex?.hashCode ?? DateTime.now().millisecondsSinceEpoch,
channelName, title: channelName,
body, body: body,
notificationDetails, notificationDetails: notificationDetails,
payload: 'channel:$channelIndex', payload: 'channel:$channelIndex',
); );
} }
@@ -285,7 +285,7 @@ class NotificationService {
} }
Future<void> cancel(int id) async { Future<void> cancel(int id) async {
await _notifications.cancel(id); await _notifications.cancel(id: id);
} }
// ───────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────
@@ -469,10 +469,10 @@ class NotificationService {
const notificationDetails = NotificationDetails(android: androidDetails); const notificationDetails = NotificationDetails(android: androidDetails);
await _notifications.show( await _notifications.show(
'batch_summary'.hashCode, id: 'batch_summary'.hashCode,
_l10n.notification_activityTitle, title: _l10n.notification_activityTitle,
parts.join(', '), body: parts.join(', '),
notificationDetails, notificationDetails: notificationDetails,
payload: 'batch', payload: 'batch',
); );
} }
+1 -1
View File
@@ -156,7 +156,7 @@ class _QrScannerWidgetState extends State<QrScannerWidget>
MobileScanner( MobileScanner(
controller: _controller, controller: _controller,
onDetect: _handleDetection, onDetect: _handleDetection,
errorBuilder: (context, error, child) { errorBuilder: (context, error) {
return _buildErrorWidget(context, error); return _buildErrorWidget(context, error);
}, },
), ),
+58 -58
View File
@@ -153,14 +153,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
dart_polylabel2:
dependency: transitive
description:
name: dart_polylabel2
sha256: "7eeab15ce72894e4bdba6a8765712231fc81be0bd95247de4ad9966abc57adc6"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
dbus: dbus:
dependency: transitive dependency: transitive
description: description:
name: dbus name: dbus
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.11" version: "0.7.12"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@@ -173,10 +181,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: d07d37192dbf97461359c1518788f203b0c9102cfd2c35a716b823741219542c sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.2.0"
file: file:
dependency: transitive dependency: transitive
description: description:
@@ -202,10 +210,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_blue_plus name: flutter_blue_plus
sha256: "399b3dbc15562ef59749f04e43a99ccbb91540022380d5f269aff3c2787534e4" sha256: "88a65ead7dea67ddcc03e6ca846163c6b6cc09a2dcebdb8bb601fcd654ea9382"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
flutter_blue_plus_android: flutter_blue_plus_android:
dependency: transitive dependency: transitive
description: description:
@@ -218,10 +226,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_blue_plus_darwin name: flutter_blue_plus_darwin
sha256: d160a8128e3a016fa58dd65ab6dac05cbc73e0fa799a1f24211d041641ed63ba sha256: "52b155d868e17c1c8ad85520a0912d447d92aedccb5a5e234d3edc98ebd1307a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.1.0" version: "8.1.1"
flutter_blue_plus_linux: flutter_blue_plus_linux:
dependency: transitive dependency: transitive
description: description:
@@ -250,10 +258,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_blue_plus_winrt name: flutter_blue_plus_winrt
sha256: "34be2d8e23d5881b46accebb0e71025f7d52869d72ea98b5082c20764e06aa80" sha256: ed894f0ab341f4cece8fa33edc381d46424a7c5bfd0e841d933d0f8c34c86521
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.0.16" version: "0.0.18"
flutter_cache_manager: flutter_cache_manager:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -266,18 +274,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_foreground_task name: flutter_foreground_task
sha256: "6cf10a27f5e344cd2ecad0752d3a5f4ec32846d82fda8753b3fe2480ebb832a3" sha256: "48ea45056155a99fb30b15f14f4039a044d925bc85f381ed0b2d3b00a60b99de"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.5.0" version: "9.2.0"
flutter_launcher_icons: flutter_launcher_icons:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: flutter_launcher_icons name: flutter_launcher_icons
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.13.1" version: "0.14.4"
flutter_linkify: flutter_linkify:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -290,34 +298,42 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: flutter_lints name: flutter_lints
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "6.0.0"
flutter_local_notifications: flutter_local_notifications:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_local_notifications name: flutter_local_notifications
sha256: ef41ae901e7529e52934feba19ed82827b11baa67336829564aeab3129460610 sha256: "2b50e938a275e1ad77352d6a25e25770f4130baa61eaf02de7a9a884680954ad"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "18.0.1" version: "20.1.0"
flutter_local_notifications_linux: flutter_local_notifications_linux:
dependency: transitive dependency: transitive
description: description:
name: flutter_local_notifications_linux name: flutter_local_notifications_linux
sha256: "8f685642876742c941b29c32030f6f4f6dacd0e4eaecb3efbb187d6a3812ca01" sha256: dce0116868cedd2cdf768af0365fc37ff1cbef7c02c4f51d0587482e625868d0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "7.0.0"
flutter_local_notifications_platform_interface: flutter_local_notifications_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: flutter_local_notifications_platform_interface name: flutter_local_notifications_platform_interface
sha256: "6c5b83c86bf819cdb177a9247a3722067dd8cc6313827ce7c77a4b238a26fd52" sha256: "23de31678a48c084169d7ae95866df9de5c9d2a44be3e5915a2ff067aeeba899"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.0.0" version: "10.0.0"
flutter_local_notifications_windows:
dependency: transitive
description:
name: flutter_local_notifications_windows
sha256: e97a1a3016512437d9c0b12fae7d1491c3c7b9aa7f03a69b974308840656b02a
url: "https://pub.dev"
source: hosted
version: "2.0.1"
flutter_localizations: flutter_localizations:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -327,10 +343,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_map name: flutter_map
sha256: "2ecb34619a4be19df6f40c2f8dce1591675b4eff7a6857bd8f533706977385da" sha256: "391e7dc95cc3f5190748210a69d4cfeb5d8f84dcdfa9c3235d0a9d7742ccb3f8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.2" version: "8.2.2"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@@ -361,10 +377,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: hooks name: hooks
sha256: "5d309c86e7ce34cd8e37aa71cb30cb652d3829b900ab145e4d9da564b31d59f7" sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.0.1"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -397,14 +413,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.20.2" version: "0.20.2"
js:
dependency: transitive
description:
name: js
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
url: "https://pub.dev"
source: hosted
version: "0.7.2"
json_annotation: json_annotation:
dependency: transitive dependency: transitive
description: description:
@@ -457,10 +465,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: lints name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.1" version: "6.1.0"
lists: lists:
dependency: transitive dependency: transitive
description: description:
@@ -529,10 +537,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: mobile_scanner name: mobile_scanner
sha256: "0b466a0a8a211b366c2e87f3345715faef9b6011c7147556ad22f37de6ba3173" sha256: c6184bf2913dd66be244108c9c27ca04b01caf726321c44b0e7a7a1e32d41044
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.11" version: "7.1.4"
native_toolchain_c: native_toolchain_c:
dependency: transitive dependency: transitive
description: description:
@@ -553,10 +561,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: objective_c name: objective_c
sha256: "983c7fa1501f6dcc0cb7af4e42072e9993cb28d73604d25ebf4dab08165d997e" sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.2.5" version: "9.3.0"
octo_image: octo_image:
dependency: transitive dependency: transitive
description: description:
@@ -569,10 +577,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: package_info_plus name: package_info_plus
sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968" sha256: f69da0d3189a4b4ceaeb1a3defb0f329b3b352517f52bed4290f83d4f06bc08d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.3.1" version: "9.0.0"
package_info_plus_platform_interface: package_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -665,18 +673,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: pointycastle name: pointycastle
sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.9.1" version: "4.0.0"
polylabel:
dependency: transitive
description:
name: polylabel
sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
posix: posix:
dependency: transitive dependency: transitive
description: description:
@@ -822,10 +822,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.1" version: "1.10.2"
sqflite: sqflite:
dependency: transitive dependency: transitive
description: description:
@@ -958,10 +958,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.6" version: "6.4.1"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@@ -1030,10 +1030,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: wakelock_plus name: wakelock_plus
sha256: "61713aa82b7f85c21c9f4cd0a148abd75f38a74ec645fcb1e446f882c82fd09b" sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.3" version: "1.4.0"
wakelock_plus_platform_interface: wakelock_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
+8 -8
View File
@@ -41,19 +41,19 @@ dependencies:
provider: ^6.1.5+1 provider: ^6.1.5+1
shared_preferences: ^2.2.2 shared_preferences: ^2.2.2
uuid: ^4.3.3 uuid: ^4.3.3
flutter_map: ^7.0.2 flutter_map: ^8.2.2
latlong2: ^0.9.1 latlong2: ^0.9.1
flutter_local_notifications: ^18.0.1 flutter_local_notifications: ^20.1.0
crypto: ^3.0.3 crypto: ^3.0.3
pointycastle: ^3.7.4 pointycastle: ^4.0.0
http: ^1.2.0 http: ^1.2.0
cached_network_image: ^3.4.1 cached_network_image: ^3.4.1
flutter_cache_manager: ^3.4.1 flutter_cache_manager: ^3.4.1
flutter_foreground_task: ^6.1.2 flutter_foreground_task: ^9.2.0
wakelock_plus: ^1.2.8 wakelock_plus: ^1.2.8
characters: ^1.4.0 characters: ^1.4.0
package_info_plus: ^8.0.0 package_info_plus: ^9.0.0
mobile_scanner: ^6.0.0 # QR/barcode scanning mobile_scanner: ^7.1.4 # QR/barcode scanning
qr_flutter: ^4.1.0 # QR code generation qr_flutter: ^4.1.0 # QR code generation
url_launcher: ^6.3.0 # Launch URLs in system browser url_launcher: ^6.3.0 # Launch URLs in system browser
flutter_linkify: ^6.0.0 # Auto-detect and linkify URLs in text flutter_linkify: ^6.0.0 # Auto-detect and linkify URLs in text
@@ -70,8 +70,8 @@ dev_dependencies:
# activated in the `analysis_options.yaml` file located at the root of your # activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint # package. See that file for information about deactivating specific lint
# rules and activating additional ones. # rules and activating additional ones.
flutter_lints: ^5.0.0 flutter_lints: ^6.0.0
flutter_launcher_icons: ^0.13.1 flutter_launcher_icons: ^0.14.4
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec
+1
View File
@@ -9,6 +9,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
flutter_local_notifications_windows
) )
set(PLUGIN_BUNDLED_LIBRARIES) set(PLUGIN_BUNDLED_LIBRARIES)