Files
MobilApp/lib/pages/ntrip_settings/presentation/controllers/ntrip_settings_controller.dart
T

158 lines
4.5 KiB
Dart
Raw Normal View History

2026-05-27 15:04:46 +02:00
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get/get.dart';
import 'package:terepi_seged/services/ntrip_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
class NtripSettingsController extends GetxController {
final formKey = GlobalKey<FormState>();
final hostController = TextEditingController();
final portController = TextEditingController();
final mountPointController = TextEditingController();
final usernameController = TextEditingController();
final passwordController = TextEditingController();
final isPasswordVisible = false.obs;
final autoConnect = false.obs;
final isBusy = false.obs;
NtripService get _service => NtripService.to;
2026-05-27 15:04:46 +02:00
@override
void onInit() {
super.onInit();
loadSettings();
}
Future<void> loadSettings() async {
hostController.text = _service.host.value;
portController.text = _service.port.value.toString();
mountPointController.text = _service.mountpoint.value;
usernameController.text = _service.username.value;
autoConnect.value = _service.autoConnect.value;
passwordController.text = _service.password.value;
}
2026-05-27 15:04:46 +02:00
Future<bool> _validateAndSave() async {
if (!(formKey.currentState?.validate() ?? false)) return false;
2026-05-27 15:04:46 +02:00
await _service.updateSettings(
host: hostController.text,
port: int.parse(portController.text.trim()),
mountpoint: mountPointController.text,
username: usernameController.text,
password: passwordController.text,
autoConnect: autoConnect.value);
return true;
2026-05-27 15:04:46 +02:00
}
Future<void> saveSettings() async {
if (!await _validateAndSave()) return;
2026-05-27 15:04:46 +02:00
Get.back();
Get.snackbar('NTRIP', 'Beállítások elmentve.',
snackPosition: SnackPosition.BOTTOM);
2026-05-27 15:04:46 +02:00
}
Future<void> saveAndConnect() async {
try {
isBusy.value = true;
if (!await _validateAndSave()) return;
2026-05-27 15:04:46 +02:00
// Ha már kapcsolódva vagyunk, előbb bontunk, hogy az új
// beállításokkal épüljön újra a kapcsolat.
if (_service.isConnected.value) {
await _service.disconnect();
}
await _service.connect();
2026-05-27 15:04:46 +02:00
Get.back();
Get.snackbar(
'NTRIP',
'Kapcsolódva: ${_service.mountpoint.value}',
2026-05-27 15:04:46 +02:00
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFF2E7D32),
colorText: const Color(0xFFFFFFFF),
);
} on NtripException catch (e) {
Get.snackbar(
'NTRIP hiba',
e.message,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFFB71C1C),
colorText: const Color(0xFFFFFFFF),
2026-05-27 15:04:46 +02:00
);
} catch (e) {
Get.snackbar(
'NTRIP hiba',
e.toString(),
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFFB71C1C),
colorText: const Color(0xFFFFFFFF),
2026-05-27 15:04:46 +02:00
);
} finally {
isBusy.value = false;
}
}
Future<void> disconnect() async {
try {
isBusy.value = true;
await _service.disconnect();
2026-05-27 15:04:46 +02:00
} finally {
isBusy.value = false;
}
}
@override
void onClose() {
hostController.dispose();
portController.dispose();
mountPointController.dispose();
usernameController.dispose();
passwordController.dispose();
super.onClose();
}
/// „Kapcsolat tesztelése" — vevő nélkül is fut: mentés után csatlakozik,
/// validálja a caster válaszát, majd azonnal bont.
Future<void> testConnection() async {
try {
isBusy.value = true;
if (!await _validateAndSave()) return;
final message = await _service.testConnection();
Get.snackbar(
'NTRIP teszt sikeres',
message,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFF2E7D32),
colorText: const Color(0xFFFFFFFF),
duration: const Duration(seconds: 4),
);
} on NtripException catch (e) {
Get.snackbar(
'NTRIP teszt sikertelen',
e.message,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFFB71C1C),
colorText: const Color(0xFFFFFFFF),
duration: const Duration(seconds: 4),
);
} catch (e) {
Get.snackbar(
'NTRIP teszt sikertelen',
e.toString(),
snackPosition: SnackPosition.BOTTOM,
backgroundColor: const Color(0xFFB71C1C),
colorText: const Color(0xFFFFFFFF),
);
} finally {
isBusy.value = false;
}
}
2026-05-27 15:04:46 +02:00
}