Navigációs fejlesztések, kitűzési fejlesztések
This commit is contained in:
parent
a46674844c
commit
6c7ceac1a6
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
"java.configuration.updateBuildConfiguration": "interactive",
|
"java.configuration.updateBuildConfiguration": "interactive",
|
||||||
"cmake.sourceDirectory": "${workspaceFolder}/linux/flutter"
|
"cmake.sourceDirectory": "${workspaceFolder}/linux/flutter",
|
||||||
|
"editor.wordBasedSuggestions": "off",
|
||||||
|
"editor.tabCompletion": "onlySnippets",
|
||||||
|
"editor.selectionHighlight": false
|
||||||
}
|
}
|
||||||
@ -38,7 +38,7 @@ android {
|
|||||||
versionCode flutter.versionCode
|
versionCode flutter.versionCode
|
||||||
versionName flutter.versionName
|
versionName flutter.versionName
|
||||||
|
|
||||||
archivesBaseName = "terepi_seged-${versionName}-${new Date().format('yyyyMMdd-HHmm')}"
|
// archivesBaseName = "terepi_seged-${versionName}-${new Date().format('yyyyMMdd-HHmm')}"
|
||||||
// multiDexEnabled true
|
// multiDexEnabled true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
devtools_options.yaml
Normal file
3
devtools_options.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
description: This file stores settings for Dart & Flutter DevTools.
|
||||||
|
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||||
|
extensions:
|
||||||
@ -11,7 +11,7 @@ Future<void> main() async {
|
|||||||
await Supabase.initialize(
|
await Supabase.initialize(
|
||||||
url: 'https://supa.app-dev.hu',
|
url: 'https://supa.app-dev.hu',
|
||||||
anonKey:
|
anonKey:
|
||||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzExMDYyMDAwLAogICJleHAiOiAxODY4ODI4NDAwCn0.XWtP3eEysZDxXjaHHUZyyhw0n4YZo_xWUMWS5ajBcbI');
|
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzQwMjY1MjAwLAogICJleHAiOiAxODk4MDMxNjAwCn0.4cMVfAnBLxne1lq0fm94rgtXLBJdRx-0f-E4Jd_jFwI');
|
||||||
|
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import 'package:nmea/nmea.dart';
|
|||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart'
|
import 'package:permission_handler/permission_handler.dart'
|
||||||
as permission_handler;
|
as permission_handler;
|
||||||
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||||
import 'package:terepi_seged/eov/convert_coordinate.dart';
|
import 'package:terepi_seged/eov/convert_coordinate.dart';
|
||||||
import 'package:terepi_seged/eov/eov.dart';
|
import 'package:terepi_seged/eov/eov.dart';
|
||||||
import 'package:terepi_seged/gnss_sentences/gngga.dart';
|
import 'package:terepi_seged/gnss_sentences/gngga.dart';
|
||||||
@ -27,12 +28,13 @@ import 'package:terepi_seged/gnss_sentences/gnrmc.dart';
|
|||||||
import 'package:terepi_seged/models/point_to_measure.dart';
|
import 'package:terepi_seged/models/point_to_measure.dart';
|
||||||
import 'package:terepi_seged/models/point_with_description_model.dart';
|
import 'package:terepi_seged/models/point_with_description_model.dart';
|
||||||
import 'package:proj4dart/proj4dart.dart' as proj4;
|
import 'package:proj4dart/proj4dart.dart' as proj4;
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class MapViewController extends GetxController {
|
class MapViewController extends GetxController {
|
||||||
// String gpsAddress = "E8:31:CD:14:8B:B2";
|
// String gpsAddress = "E8:31:CD:14:8B:B2";
|
||||||
// String gpsAddress = "98:CD:AC:62:FF:4E";
|
// String gpsAddress = "98:CD:AC:62:FF:4E";
|
||||||
RxString gpsAddress = "98:CD:AC:62:FF:36".obs;
|
RxString gpsAddress = "98:CD:AC:62:FF:36".obs;
|
||||||
String gpsName = "TiGNSS Rover-FF4E";
|
RxString gpsName = "TiGNSS Rover-FF4E".obs;
|
||||||
// String gpsName = "TiGNSS Rover-8BB2";
|
// String gpsName = "TiGNSS Rover-8BB2";
|
||||||
static const double maxZoomValue = 25.0;
|
static const double maxZoomValue = 25.0;
|
||||||
Rx<bool> gpsIsConnected = false.obs;
|
Rx<bool> gpsIsConnected = false.obs;
|
||||||
@ -65,6 +67,7 @@ class MapViewController extends GetxController {
|
|||||||
RxDouble gpsLongitude = 0.0.obs;
|
RxDouble gpsLongitude = 0.0.obs;
|
||||||
RxString gpsLongitudeDirection = "".obs;
|
RxString gpsLongitudeDirection = "".obs;
|
||||||
RxDouble gpsAltitude = 0.0.obs;
|
RxDouble gpsAltitude = 0.0.obs;
|
||||||
|
RxDouble gpsGeoidSeparation = 0.0.obs;
|
||||||
RxInt gpsQuality = 0.obs;
|
RxInt gpsQuality = 0.obs;
|
||||||
RxDouble gpsLatitudeError = 0.0.obs;
|
RxDouble gpsLatitudeError = 0.0.obs;
|
||||||
RxDouble gpsLongitudeError = 0.0.obs;
|
RxDouble gpsLongitudeError = 0.0.obs;
|
||||||
@ -103,8 +106,8 @@ class MapViewController extends GetxController {
|
|||||||
int pointId = 1;
|
int pointId = 1;
|
||||||
String pointIdPrefix = "";
|
String pointIdPrefix = "";
|
||||||
String pointIdPostfix = "";
|
String pointIdPostfix = "";
|
||||||
String ntripUserName = "";
|
RxString ntripUserName = "".obs;
|
||||||
String ntripPassword = "";
|
RxString ntripPassword = "".obs;
|
||||||
|
|
||||||
Rx<bool> pointMeasuringDirectionForward = true.obs;
|
Rx<bool> pointMeasuringDirectionForward = true.obs;
|
||||||
|
|
||||||
@ -115,7 +118,8 @@ class MapViewController extends GetxController {
|
|||||||
late proj4.Projection eovProj, wgsProj;
|
late proj4.Projection eovProj, wgsProj;
|
||||||
RxBool mapIsInitialized = false.obs;
|
RxBool mapIsInitialized = false.obs;
|
||||||
|
|
||||||
GeoJsonParser parser = GeoJsonParser(defaultMarkerColor: Colors.yellow);
|
GeoJsonParser parser =
|
||||||
|
GeoJsonParser(defaultMarkerColor: const Color.fromARGB(255, 85, 34, 49));
|
||||||
|
|
||||||
final CollectionReference _measuredPoints =
|
final CollectionReference _measuredPoints =
|
||||||
FirebaseFirestore.instance.collection('measuredPoints');
|
FirebaseFirestore.instance.collection('measuredPoints');
|
||||||
@ -123,6 +127,12 @@ class MapViewController extends GetxController {
|
|||||||
// late SMIBool gpsTrigger;
|
// late SMIBool gpsTrigger;
|
||||||
// late StateMachineController riveGpsIconController;
|
// late StateMachineController riveGpsIconController;
|
||||||
|
|
||||||
|
late SharedPreferences prefs;
|
||||||
|
|
||||||
|
late AuthResponse authResponse;
|
||||||
|
late Session? session;
|
||||||
|
late User? user;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() async {
|
void onInit() async {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
@ -144,6 +154,26 @@ class MapViewController extends GetxController {
|
|||||||
..registerTalkerSentence("RMC", (line) => Gnrmc(raw: line))
|
..registerTalkerSentence("RMC", (line) => Gnrmc(raw: line))
|
||||||
..registerTalkerSentence("GST", (line) => Gngst(raw: line));
|
..registerTalkerSentence("GST", (line) => Gngst(raw: line));
|
||||||
|
|
||||||
|
prefs = await SharedPreferences.getInstance();
|
||||||
|
|
||||||
|
authResponse = await Supabase.instance.client.auth
|
||||||
|
.signInWithPassword(email: 'test.elek.1@email.hu', password: 'demo');
|
||||||
|
session = authResponse.session;
|
||||||
|
user = authResponse.user;
|
||||||
|
|
||||||
|
Supabase.instance.client
|
||||||
|
.channel('public:TerepiSeged_Receiver')
|
||||||
|
.onPostgresChanges(
|
||||||
|
event: PostgresChangeEvent.update,
|
||||||
|
schema: 'public',
|
||||||
|
table: 'TerepiSeged_Receiver',
|
||||||
|
callback: (playload) {
|
||||||
|
var id = playload.newRecord['pointNumber'] as int;
|
||||||
|
print('Change received: ${id}');
|
||||||
|
updatePointStatus(id);
|
||||||
|
})
|
||||||
|
.subscribe();
|
||||||
|
|
||||||
mapController = MapController();
|
mapController = MapController();
|
||||||
|
|
||||||
// riveGpsIconController = RiveUtils.getRiveController(Artboard(),
|
// riveGpsIconController = RiveUtils.getRiveController(Artboard(),
|
||||||
@ -154,7 +184,7 @@ class MapViewController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() async {
|
||||||
super.onClose();
|
super.onClose();
|
||||||
FlutterBluetoothSerial.instance.setPairingRequestHandler(null);
|
FlutterBluetoothSerial.instance.setPairingRequestHandler(null);
|
||||||
if (gpsIsConnected.value) {
|
if (gpsIsConnected.value) {
|
||||||
@ -169,6 +199,10 @@ class MapViewController extends GetxController {
|
|||||||
pointPostfixController.dispose();
|
pointPostfixController.dispose();
|
||||||
ntripUsernameController.dispose();
|
ntripUsernameController.dispose();
|
||||||
ntripPasswordController.dispose();
|
ntripPasswordController.dispose();
|
||||||
|
|
||||||
|
await Supabase.instance.client
|
||||||
|
.channel('public:TerepiSeged_Receiver')
|
||||||
|
.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -200,6 +234,30 @@ class MapViewController extends GetxController {
|
|||||||
} else {
|
} else {
|
||||||
print("No external storage permission");
|
print("No external storage permission");
|
||||||
}
|
}
|
||||||
|
if (prefs.containsKey('gpsAddress')) {
|
||||||
|
var address = prefs.getString('gpsAddress');
|
||||||
|
if (address != null) {
|
||||||
|
gpsAddress.value = address;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('gpsName')) {
|
||||||
|
var name = prefs.getString('gpsName');
|
||||||
|
if (name != null) {
|
||||||
|
gpsName.value = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('ntripUserName')) {
|
||||||
|
var userName = prefs.getString('ntripUserName');
|
||||||
|
if (userName != null) {
|
||||||
|
ntripUserName.value = userName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('ntripPassword')) {
|
||||||
|
var password = prefs.getString('ntripPassword');
|
||||||
|
if (password != null) {
|
||||||
|
ntripPassword.value = password;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
directory = await getExternalStorageDirectory();
|
directory = await getExternalStorageDirectory();
|
||||||
@ -228,7 +286,7 @@ class MapViewController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gpsHeightController.text = '1.7';
|
gpsHeightController.text = '1.8';
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getInitialLocation() async {
|
void _getInitialLocation() async {
|
||||||
@ -302,7 +360,9 @@ class MapViewController extends GetxController {
|
|||||||
header += "User-Agent: SharpGps iter.dk\r\n";
|
header += "User-Agent: SharpGps iter.dk\r\n";
|
||||||
header += "Accept: */*\r\nConnection: close\r\n";
|
header += "Accept: */*\r\nConnection: close\r\n";
|
||||||
// header += "Authorization: Basic ${_toBase64("info@mail.app-dev.hu:")}\r\n";
|
// header += "Authorization: Basic ${_toBase64("info@mail.app-dev.hu:")}\r\n";
|
||||||
header += "Authorization: Basic ${_toBase64("elgi08:Laszl0stef1")}\r\n";
|
//header += "Authorization: Basic ${_toBase64("elgi08:Laszl0stef1")}\r\n";
|
||||||
|
header +=
|
||||||
|
"Authorization: Basic ${_toBase64("${ntripUserName.value}:${ntripPassword.value}")}\r\n";
|
||||||
// header += "Host:rtk2go.com:2101\r\n";
|
// header += "Host:rtk2go.com:2101\r\n";
|
||||||
header += "Host:gnssnet.hu:2101\r\n";
|
header += "Host:gnssnet.hu:2101\r\n";
|
||||||
header += "Ntrip-Vesrsion:Ntrip/2.0\r\n";
|
header += "Ntrip-Vesrsion:Ntrip/2.0\r\n";
|
||||||
@ -412,6 +472,7 @@ class MapViewController extends GetxController {
|
|||||||
gpsLongitude.value = sentence.longitude;
|
gpsLongitude.value = sentence.longitude;
|
||||||
gpsLongitudeDirection.value = sentence.longitudeDirection;
|
gpsLongitudeDirection.value = sentence.longitudeDirection;
|
||||||
gpsAltitude.value = sentence.altitudeAboveMeanSeaLevel;
|
gpsAltitude.value = sentence.altitudeAboveMeanSeaLevel;
|
||||||
|
gpsGeoidSeparation.value = sentence.geoidSeparation;
|
||||||
gpsQuality.value = sentence.gpsQualityIndicator;
|
gpsQuality.value = sentence.gpsQualityIndicator;
|
||||||
eov.value = ConvertCoordinate.ConvertWgsToEov(
|
eov.value = ConvertCoordinate.ConvertWgsToEov(
|
||||||
gpsLatitude.value, gpsLongitude.value);
|
gpsLatitude.value, gpsLongitude.value);
|
||||||
@ -441,7 +502,7 @@ class MapViewController extends GetxController {
|
|||||||
(DateTime.now()
|
(DateTime.now()
|
||||||
.difference(lastSendTimeGgaMessage)
|
.difference(lastSendTimeGgaMessage)
|
||||||
.inSeconds >=
|
.inSeconds >=
|
||||||
30)) {
|
5)) {
|
||||||
sendGgaMessage(lastGgaMessage);
|
sendGgaMessage(lastGgaMessage);
|
||||||
print("Send GGA message: $lastGgaMessage");
|
print("Send GGA message: $lastGgaMessage");
|
||||||
ggaSenDataPacketNumber.value++;
|
ggaSenDataPacketNumber.value++;
|
||||||
@ -723,6 +784,29 @@ class MapViewController extends GetxController {
|
|||||||
"gpsHeight": gpsHeightController.text
|
"gpsHeight": gpsHeightController.text
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await Supabase.instance.client
|
||||||
|
.from('TerepiSeged_MeasuredPoints')
|
||||||
|
.insert({
|
||||||
|
'pointNumber': pointId,
|
||||||
|
'gnssNumber': gpsName.value,
|
||||||
|
'latitude': gpsLatitude.value,
|
||||||
|
'longitude': gpsLongitude.value,
|
||||||
|
'altitude': gpsAltitude.value,
|
||||||
|
'heightOfGeoid': gpsGeoidSeparation.value,
|
||||||
|
'eovX': eov.value.X,
|
||||||
|
'eovY': eov.value.Y,
|
||||||
|
'poleHeight': double.tryParse(gpsHeightController.text),
|
||||||
|
'horizontalError':
|
||||||
|
max(gpsLatitudeError.value, gpsLongitudeError.value),
|
||||||
|
'verticalError': gpsAltitudeError.value,
|
||||||
|
'description': pointDescriptionController.text
|
||||||
|
});
|
||||||
|
|
||||||
|
await Supabase.instance.client
|
||||||
|
.from('TerepiSeged_Receiver')
|
||||||
|
.update({'isMeasured': true}).eq(
|
||||||
|
'pointNumber', pointId);
|
||||||
|
|
||||||
if (pointMeasuringDirectionForward.isTrue) {
|
if (pointMeasuringDirectionForward.isTrue) {
|
||||||
if (pointsToMeasureSelectedValue.value <
|
if (pointsToMeasureSelectedValue.value <
|
||||||
pointsToMeasure.length - 1) {
|
pointsToMeasure.length - 1) {
|
||||||
@ -853,6 +937,79 @@ class MapViewController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void readPointsFromSupa() async {
|
||||||
|
// final AuthResponse res = await Supabase.instance.client.auth
|
||||||
|
// .signInWithPassword(email: 'test.elek.1@email.hu', password: 'demo');
|
||||||
|
// final Session? session = res.session;
|
||||||
|
// final User? user = res.user;
|
||||||
|
|
||||||
|
final data =
|
||||||
|
await Supabase.instance.client.from('TerepiSeged_Receiver').select();
|
||||||
|
print('supa count ->${data.length}');
|
||||||
|
|
||||||
|
for (int i = 0; i < data.length; i++) {
|
||||||
|
var items = data[i];
|
||||||
|
if (items.length >= 3) {
|
||||||
|
var id = items['pointNumber'];
|
||||||
|
num numEovX = items['eovX'];
|
||||||
|
var coordX = numEovX.toDouble();
|
||||||
|
num numEovY = items['eovY'];
|
||||||
|
var coordY = numEovY.toDouble();
|
||||||
|
|
||||||
|
if (id != null && coordX != null && coordY != null) {
|
||||||
|
pointsToMeasure
|
||||||
|
.add(PointToMeasure(id: id, coordX: coordX, coordY: coordY));
|
||||||
|
|
||||||
|
var eovCoord = proj4.Point(x: coordX, y: coordY);
|
||||||
|
var wgsCoord = eovProj.transform(wgsProj, eovCoord);
|
||||||
|
|
||||||
|
print("Lat -> ${wgsCoord.x}, Long -> ${wgsCoord.y}");
|
||||||
|
|
||||||
|
pointsToMeasureMarker.add(Marker(
|
||||||
|
point: LatLng(wgsCoord.y, wgsCoord.x),
|
||||||
|
width: 15.0,
|
||||||
|
height: 15.0,
|
||||||
|
child: Container(
|
||||||
|
width: 15.0,
|
||||||
|
height: 15.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.purple,
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
border: Border.all(width: 1.0, color: Colors.black)),
|
||||||
|
)));
|
||||||
|
|
||||||
|
pointsToMeasureLabel.add(PolyWidget(
|
||||||
|
center: LatLng(wgsCoord.y + 0.0000075, wgsCoord.x + 0.0000075),
|
||||||
|
widthInMeters: 3,
|
||||||
|
heightInMeters: 3,
|
||||||
|
// constraints: const BoxConstraints(
|
||||||
|
// minWidth: 250,
|
||||||
|
// maxWidth: 350,
|
||||||
|
// ),
|
||||||
|
child: FittedBox(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(4.0),
|
||||||
|
child: Text(
|
||||||
|
' $id ',
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.yellow,
|
||||||
|
fontSize: 12.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)));
|
||||||
|
|
||||||
|
pointsToMeasureDropDownMenuItem.add(DropdownMenuItem<int>(
|
||||||
|
value: i,
|
||||||
|
child: Text('$id'),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pointsToMeasureSelectedValue.value = 0;
|
||||||
|
print('Converted points number -> ${pointsToMeasure.length}');
|
||||||
|
}
|
||||||
|
|
||||||
void pointsToMeasureSelectedValueChanged(int value) {
|
void pointsToMeasureSelectedValueChanged(int value) {
|
||||||
pointsToMeasureSelectedValue.value = value;
|
pointsToMeasureSelectedValue.value = value;
|
||||||
print('Selected point -> ${pointsToMeasureSelectedValue.value}');
|
print('Selected point -> ${pointsToMeasureSelectedValue.value}');
|
||||||
@ -887,4 +1044,22 @@ class MapViewController extends GetxController {
|
|||||||
void showAddPointDialog() {
|
void showAddPointDialog() {
|
||||||
onBottomNavigationBarTap(0);
|
onBottomNavigationBarTap(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void saveGpsAddress(String address) {
|
||||||
|
prefs.setString('gpsAddress', address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveGpsName(String name) {
|
||||||
|
prefs.setString('gpsName', name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveNtripUserName(String username) {
|
||||||
|
prefs.setString('ntripUserName', username);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveNtripPassword(String password) {
|
||||||
|
prefs.setString('ntripPassword', password);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updatePointStatus(int pointId) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class MapView extends GetView<MapViewController> {
|
|||||||
children: [
|
children: [
|
||||||
Text('Térkép'),
|
Text('Térkép'),
|
||||||
Text(
|
Text(
|
||||||
"Budapest",
|
"Zalaegerszeg",
|
||||||
style: TextStyle(fontSize: 12.0),
|
style: TextStyle(fontSize: 12.0),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@ -89,8 +89,27 @@ class MapView extends GetView<MapViewController> {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 20.0),
|
padding: const EdgeInsets.only(right: 20.0),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () => Get.to(() => SettingsDialog(),
|
onTap: () {
|
||||||
transition: Transition.downToUp),
|
controller.readPointsFromSupa();
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.cloud_download,
|
||||||
|
size: 26.0, color: Colors.blue),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 20.0),
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
if (controller.ntripUserName.value.isNotEmpty) {
|
||||||
|
controller.ntripUsernameController.text =
|
||||||
|
controller.ntripUserName.value;
|
||||||
|
}
|
||||||
|
if (controller.ntripPassword.value.isNotEmpty) {
|
||||||
|
controller.ntripPasswordController.text =
|
||||||
|
controller.ntripPassword.value;
|
||||||
|
}
|
||||||
|
Get.to(() => SettingsDialog(), transition: Transition.downToUp);
|
||||||
|
},
|
||||||
child: const Icon(
|
child: const Icon(
|
||||||
Icons.more_vert,
|
Icons.more_vert,
|
||||||
size: 26.0,
|
size: 26.0,
|
||||||
|
|||||||
@ -6,7 +6,6 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
final controller = Get.find<MapViewController>();
|
final controller = Get.find<MapViewController>();
|
||||||
SettingsDialog({super.key});
|
SettingsDialog({super.key});
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: ListView(
|
body: ListView(
|
||||||
@ -18,6 +17,19 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
if (controller.ntripUsernameController.text.isNotEmpty) {
|
||||||
|
controller.ntripUserName.value =
|
||||||
|
controller.ntripUsernameController.text;
|
||||||
|
controller.saveNtripUserName(
|
||||||
|
controller.ntripUsernameController.text);
|
||||||
|
if (controller
|
||||||
|
.ntripPasswordController.text.isNotEmpty) {
|
||||||
|
controller.ntripPassword.value =
|
||||||
|
controller.ntripPasswordController.text;
|
||||||
|
controller.saveNtripPassword(
|
||||||
|
controller.ntripPasswordController.text);
|
||||||
|
}
|
||||||
|
}
|
||||||
Get.back();
|
Get.back();
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.close)),
|
icon: const Icon(Icons.close)),
|
||||||
@ -25,7 +37,22 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
overlayColor:
|
overlayColor:
|
||||||
MaterialStateProperty.all(Colors.transparent)),
|
MaterialStateProperty.all(Colors.transparent)),
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
if (controller.ntripUsernameController.text.isNotEmpty) {
|
||||||
|
controller.ntripUserName.value =
|
||||||
|
controller.ntripUsernameController.text;
|
||||||
|
controller.saveNtripUserName(
|
||||||
|
controller.ntripUsernameController.text);
|
||||||
|
if (controller
|
||||||
|
.ntripPasswordController.text.isNotEmpty) {
|
||||||
|
controller.ntripPassword.value =
|
||||||
|
controller.ntripPasswordController.text;
|
||||||
|
controller.saveNtripPassword(
|
||||||
|
controller.ntripPasswordController.text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
'Bezár',
|
'Bezár',
|
||||||
style: TextStyle(color: Colors.blue, fontSize: 14.0),
|
style: TextStyle(color: Colors.blue, fontSize: 14.0),
|
||||||
@ -48,12 +75,95 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Obx(() => Column(children: [
|
Obx(() => Column(children: [
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-BE6A'),
|
||||||
|
value: '10:06:1C:97:BE:6A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-BE6A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-BE6A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-1DC6'),
|
||||||
|
value: 'E8:31:CD:16:1D:C6',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-1DC6';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-1DC6');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-9C3A'),
|
||||||
|
value: '08:3A:8D:14:9C:3A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-9C3A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-9C3A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-72C2'),
|
||||||
|
value: '10:06:1C:97:72:C2',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-72C2';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-72C2');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-FE16'),
|
||||||
|
value: '10:06:1C:9F:FE:16',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FE16';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FE16');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-3B0A'),
|
||||||
|
value: '10:C6:1C:9E:3B:0A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-3B0A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-3B0A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-7FEA'),
|
||||||
|
value: '10:06:1C:9C:7F:EA',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-7FEA';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-7FEA');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-A39E'),
|
||||||
|
value: '10:06:1C:97:A3:9E',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-A39E';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-A39E');
|
||||||
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-FF4E'),
|
title: Text('TiGNSS Rover-FF4E'),
|
||||||
value: '98:CD:AC:62:FF:4E',
|
value: '98:CD:AC:62:FF:4E',
|
||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FF4E';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FF4E');
|
||||||
}),
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-8BB2'),
|
title: Text('TiGNSS Rover-8BB2'),
|
||||||
@ -61,7 +171,9 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
;
|
controller.gpsName.value = 'TiGNSS Rover-8BB2';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-8BB2');
|
||||||
}),
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-FF36'),
|
title: Text('TiGNSS Rover-FF36'),
|
||||||
@ -69,6 +181,9 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FF36';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FF36');
|
||||||
})
|
})
|
||||||
])),
|
])),
|
||||||
const Padding(
|
const Padding(
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import 'package:flutter_map/flutter_map.dart';
|
|||||||
import 'package:flutter_map_geojson/flutter_map_geojson.dart';
|
import 'package:flutter_map_geojson/flutter_map_geojson.dart';
|
||||||
import 'package:flutter_map_polywidget/flutter_map_polywidget.dart';
|
import 'package:flutter_map_polywidget/flutter_map_polywidget.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:get/get_connect/http/src/utils/utils.dart';
|
||||||
import 'package:intl/date_time_patterns.dart';
|
import 'package:intl/date_time_patterns.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:location/location.dart';
|
import 'package:location/location.dart';
|
||||||
@ -20,6 +21,7 @@ import 'package:nmea/nmea.dart';
|
|||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart'
|
import 'package:permission_handler/permission_handler.dart'
|
||||||
as permission_handler;
|
as permission_handler;
|
||||||
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||||
import 'package:terepi_seged/eov/convert_coordinate.dart';
|
import 'package:terepi_seged/eov/convert_coordinate.dart';
|
||||||
import 'package:terepi_seged/eov/eov.dart';
|
import 'package:terepi_seged/eov/eov.dart';
|
||||||
import 'package:terepi_seged/gnss_sentences/gngga.dart';
|
import 'package:terepi_seged/gnss_sentences/gngga.dart';
|
||||||
@ -28,12 +30,13 @@ import 'package:terepi_seged/gnss_sentences/gnrmc.dart';
|
|||||||
import 'package:terepi_seged/models/point_to_measure.dart';
|
import 'package:terepi_seged/models/point_to_measure.dart';
|
||||||
import 'package:terepi_seged/models/point_with_description_model.dart';
|
import 'package:terepi_seged/models/point_with_description_model.dart';
|
||||||
import 'package:proj4dart/proj4dart.dart' as proj4;
|
import 'package:proj4dart/proj4dart.dart' as proj4;
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class NavigationViewController extends GetxController {
|
class NavigationViewController extends GetxController {
|
||||||
// String gpsAddress = "E8:31:CD:14:8B:B2";
|
// String gpsAddress = "E8:31:CD:14:8B:B2";
|
||||||
// String gpsAddress = "98:CD:AC:62:FF:4E";
|
// String gpsAddress = "98:CD:AC:62:FF:4E";
|
||||||
RxString gpsAddress = "98:CD:AC:62:FF:36".obs;
|
RxString gpsAddress = "98:CD:AC:62:FF:36".obs;
|
||||||
String gpsName = "TiGNSS Rover-FF4E";
|
RxString gpsName = "TiGNSS Rover-FF4E".obs;
|
||||||
// String gpsName = "TiGNSS Rover-8BB2";
|
// String gpsName = "TiGNSS Rover-8BB2";
|
||||||
static const double maxZoomValue = 25.0;
|
static const double maxZoomValue = 25.0;
|
||||||
Rx<bool> gpsIsConnected = false.obs;
|
Rx<bool> gpsIsConnected = false.obs;
|
||||||
@ -118,11 +121,21 @@ class NavigationViewController extends GetxController {
|
|||||||
final CollectionReference _vibratorTracker =
|
final CollectionReference _vibratorTracker =
|
||||||
FirebaseFirestore.instance.collection('vibratorTracker');
|
FirebaseFirestore.instance.collection('vibratorTracker');
|
||||||
DateTime lastGpsDataSaveTime = DateTime(2000, 1, 1, 0, 0, 0);
|
DateTime lastGpsDataSaveTime = DateTime(2000, 1, 1, 0, 0, 0);
|
||||||
int vehicleNumber = 2;
|
RxInt vehicleNumber = 5.obs;
|
||||||
late Location internalGpsLogger;
|
late Location internalGpsLogger;
|
||||||
Location internalGpsLocation = Location();
|
Location internalGpsLocation = Location();
|
||||||
late StreamSubscription<LocationData> internalGpsLocationSubscription;
|
late StreamSubscription<LocationData> internalGpsLocationSubscription;
|
||||||
|
|
||||||
|
late List<Polyline<Object>> pathLayer = [];
|
||||||
|
|
||||||
|
RxString ntripUserName = "".obs;
|
||||||
|
RxString ntripPassword = "".obs;
|
||||||
|
late SharedPreferences prefs;
|
||||||
|
|
||||||
|
late AuthResponse authResponse;
|
||||||
|
late Session? session;
|
||||||
|
late User? user;
|
||||||
|
|
||||||
// late SMIBool gpsTrigger;
|
// late SMIBool gpsTrigger;
|
||||||
// late StateMachineController riveGpsIconController;
|
// late StateMachineController riveGpsIconController;
|
||||||
|
|
||||||
@ -146,13 +159,18 @@ class NavigationViewController extends GetxController {
|
|||||||
..registerTalkerSentence("GST", (line) => Gngst(raw: line));
|
..registerTalkerSentence("GST", (line) => Gngst(raw: line));
|
||||||
|
|
||||||
mapController = MapController();
|
mapController = MapController();
|
||||||
|
prefs = await SharedPreferences.getInstance();
|
||||||
|
|
||||||
|
authResponse = await Supabase.instance.client.auth
|
||||||
|
.signInWithPassword(email: 'test.elek.1@email.hu', password: 'demo');
|
||||||
|
session = authResponse.session;
|
||||||
|
user = authResponse.user;
|
||||||
|
|
||||||
// riveGpsIconController = RiveUtils.getRiveController(Artboard(),
|
// riveGpsIconController = RiveUtils.getRiveController(Artboard(),
|
||||||
// stateMachineName: "gps_Interactivity");
|
// stateMachineName: "gps_Interactivity");
|
||||||
// gpsTrigger = riveGpsIconController.findSMI("active");
|
// gpsTrigger = riveGpsIconController.findSMI("active");
|
||||||
|
|
||||||
mapIsInitialized.value = true;
|
mapIsInitialized.value = true;
|
||||||
vehicleNumberController.text = vehicleNumber.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -207,6 +225,37 @@ class NavigationViewController extends GetxController {
|
|||||||
} else {
|
} else {
|
||||||
print("No external storage permission");
|
print("No external storage permission");
|
||||||
}
|
}
|
||||||
|
if (prefs.containsKey('gpsAddress')) {
|
||||||
|
var address = prefs.getString('gpsAddress');
|
||||||
|
if (address != null) {
|
||||||
|
gpsAddress.value = address;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('gpsName')) {
|
||||||
|
var name = prefs.getString('gpsName');
|
||||||
|
if (name != null) {
|
||||||
|
gpsName.value = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('ntripUserName')) {
|
||||||
|
var userName = prefs.getString('ntripUserName');
|
||||||
|
if (userName != null) {
|
||||||
|
ntripUserName.value = userName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('ntripPassword')) {
|
||||||
|
var password = prefs.getString('ntripPassword');
|
||||||
|
if (password != null) {
|
||||||
|
ntripPassword.value = password;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.containsKey('vehicleNumber')) {
|
||||||
|
var vehicleNum = prefs.getInt('vehicleNumber');
|
||||||
|
if (vehicleNum != null) {
|
||||||
|
vehicleNumber.value = vehicleNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vehicleNumberController.text = vehicleNumber.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
directory = await getExternalStorageDirectory();
|
directory = await getExternalStorageDirectory();
|
||||||
@ -276,16 +325,27 @@ class NavigationViewController extends GetxController {
|
|||||||
internalGpsFile.writeAsString(
|
internalGpsFile.writeAsString(
|
||||||
"$vehicleNumber;$time;$latitude;$longitude;$altitude;$accuracy\r\n");
|
"$vehicleNumber;$time;$latitude;$longitude;$altitude;$accuracy\r\n");
|
||||||
|
|
||||||
_vibratorTracker.add({
|
// _vibratorTracker.add({
|
||||||
"gpsType": 0,
|
// "gpsType": 0,
|
||||||
"vibratorNumber": vehicleNumber,
|
// "vibratorNumber": vehicleNumber.value,
|
||||||
"gpsDateTime": time,
|
// "gpsDateTime": time,
|
||||||
"latitude": latitude,
|
// "latitude": latitude,
|
||||||
"longitude": longitude,
|
// "longitude": longitude,
|
||||||
"altitude": altitude,
|
// "altitude": altitude,
|
||||||
"horizontalError": accuracy,
|
// "horizontalError": accuracy,
|
||||||
"speed": speed,
|
// "speed": speed,
|
||||||
"createdAt": DateTime.timestamp()
|
// "createdAt": DateTime.timestamp()
|
||||||
|
// });
|
||||||
|
|
||||||
|
Supabase.instance.client.from('TerepiSeged_VibratorTracker').insert({
|
||||||
|
'gpsType': 0,
|
||||||
|
'vibratorNumber': vehicleNumber.value,
|
||||||
|
'gpsDateTime': time.toIso8601String(),
|
||||||
|
'latitude': gpsLatitude.value,
|
||||||
|
'longitude': gpsLongitude.value,
|
||||||
|
'altitude': gpsAltitude.value,
|
||||||
|
'horizontalError': accuracy,
|
||||||
|
'speed': speed
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -588,7 +648,7 @@ class NavigationViewController extends GetxController {
|
|||||||
void _savePositionToDatabase() {
|
void _savePositionToDatabase() {
|
||||||
_vibratorTracker.add({
|
_vibratorTracker.add({
|
||||||
"gpsType": 1,
|
"gpsType": 1,
|
||||||
"vibratorNumber": vehicleNumber,
|
"vibratorNumber": vehicleNumber.value,
|
||||||
"gpsQuality": gpsQuality.value,
|
"gpsQuality": gpsQuality.value,
|
||||||
"gpsDateTime": gpsDateTime.value,
|
"gpsDateTime": gpsDateTime.value,
|
||||||
"latitude": gpsLatitude.value,
|
"latitude": gpsLatitude.value,
|
||||||
@ -601,6 +661,24 @@ class NavigationViewController extends GetxController {
|
|||||||
"antennaHeight": double.parse(gpsHeightController.text),
|
"antennaHeight": double.parse(gpsHeightController.text),
|
||||||
"createdAt": DateTime.timestamp()
|
"createdAt": DateTime.timestamp()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final res =
|
||||||
|
Supabase.instance.client.from('TerepiSeged_VibratorTracker').insert({
|
||||||
|
"gpsType": 1,
|
||||||
|
"vibratorNumber": vehicleNumber.value,
|
||||||
|
"gpsQuality": gpsQuality.value,
|
||||||
|
"gpsDateTime": gpsDateTime.value.toIso8601String(),
|
||||||
|
"latitude": gpsLatitude.value,
|
||||||
|
"longitude": gpsLongitude.value,
|
||||||
|
"altitude": gpsAltitude.value,
|
||||||
|
"eovY": eov.value.Y,
|
||||||
|
"eovX": eov.value.X,
|
||||||
|
"horizontalError": max(gpsLatitudeError.value, gpsLongitudeError.value),
|
||||||
|
"verticalError": gpsAltitudeError.value,
|
||||||
|
"poleHeight": double.parse(gpsHeightController.text)
|
||||||
|
}).select();
|
||||||
|
print(res);
|
||||||
|
|
||||||
lastGpsDataSaveTime = DateTime.now();
|
lastGpsDataSaveTime = DateTime.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -896,15 +974,15 @@ class NavigationViewController extends GetxController {
|
|||||||
width: 15.0,
|
width: 15.0,
|
||||||
height: 15.0,
|
height: 15.0,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Colors.purple,
|
color: Colors.yellow,
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
border: Border.all(width: 1.0, color: Colors.black)),
|
border: Border.all(width: 1.0, color: Colors.black)),
|
||||||
)));
|
)));
|
||||||
|
|
||||||
pointsToMeasureLabel.add(PolyWidget(
|
pointsToMeasureLabel.add(PolyWidget(
|
||||||
center: LatLng(wgsCoord.y + 0.0000075, wgsCoord.x + 0.0000075),
|
center: LatLng(wgsCoord.y + 0.0000275, wgsCoord.x + 0.0000275),
|
||||||
widthInMeters: 3,
|
widthInMeters: 28,
|
||||||
heightInMeters: 3,
|
heightInMeters: 28,
|
||||||
// constraints: const BoxConstraints(
|
// constraints: const BoxConstraints(
|
||||||
// minWidth: 250,
|
// minWidth: 250,
|
||||||
// maxWidth: 350,
|
// maxWidth: 350,
|
||||||
@ -934,6 +1012,24 @@ class NavigationViewController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ReadPathFromFile() async {
|
||||||
|
File? file;
|
||||||
|
FilePickerResult? result = await FilePicker.platform.pickFiles();
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
file = File(result.files.single.path!);
|
||||||
|
} else {
|
||||||
|
print("No file selected");
|
||||||
|
}
|
||||||
|
if (await file!.exists()) {
|
||||||
|
String data = await file.readAsString();
|
||||||
|
parser.defaultPolylineColor = Colors.orangeAccent;
|
||||||
|
parser.defaultPolylineStroke = 5.0;
|
||||||
|
parser.parseGeoJsonAsString(data);
|
||||||
|
pathLayer = parser.polylines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void pointsToMeasureSelectedValueChanged(int value) {
|
void pointsToMeasureSelectedValueChanged(int value) {
|
||||||
pointsToMeasureSelectedValue.value = value;
|
pointsToMeasureSelectedValue.value = value;
|
||||||
print('Selected point -> ${pointsToMeasureSelectedValue.value}');
|
print('Selected point -> ${pointsToMeasureSelectedValue.value}');
|
||||||
@ -964,4 +1060,23 @@ class NavigationViewController extends GetxController {
|
|||||||
void addMeasuredPoint() {
|
void addMeasuredPoint() {
|
||||||
// _measuredPoints.add({"id": 4001, "latitude": 46.3455, "longitude": 19.652});
|
// _measuredPoints.add({"id": 4001, "latitude": 46.3455, "longitude": 19.652});
|
||||||
}
|
}
|
||||||
|
void saveGpsAddress(String address) {
|
||||||
|
prefs.setString('gpsAddress', address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveGpsName(String name) {
|
||||||
|
prefs.setString('gpsName', name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveNtripUserName(String username) {
|
||||||
|
prefs.setString('ntripUserName', username);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveNtripPassword(String password) {
|
||||||
|
prefs.setString('ntripPassword', password);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveVehicleNumber(int vehicleNumber) {
|
||||||
|
prefs.setInt('vehicleNumber', vehicleNumber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,7 @@ class NavigationView extends GetView<NavigationViewController> {
|
|||||||
children: [
|
children: [
|
||||||
Text('Navigáció'),
|
Text('Navigáció'),
|
||||||
Text(
|
Text(
|
||||||
"Mérés: Budapest-4",
|
"Mérés: Zalaegerszeg",
|
||||||
style: TextStyle(fontSize: 12.0),
|
style: TextStyle(fontSize: 12.0),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@ -84,6 +84,16 @@ class NavigationView extends GetView<NavigationViewController> {
|
|||||||
const Icon(Icons.file_open, size: 26.0, color: Colors.blue),
|
const Icon(Icons.file_open, size: 26.0, color: Colors.blue),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 20.0),
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
controller.ReadPathFromFile();
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.line_weight_rounded,
|
||||||
|
size: 26.0, color: Colors.blue),
|
||||||
|
),
|
||||||
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 20.0),
|
padding: const EdgeInsets.only(right: 20.0),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
@ -243,12 +253,13 @@ class NavigationView extends GetView<NavigationViewController> {
|
|||||||
MarkerLayer(
|
MarkerLayer(
|
||||||
markers: controller.currentLocationMarker),
|
markers: controller.currentLocationMarker),
|
||||||
MarkerLayer(markers: controller.parser.markers),
|
MarkerLayer(markers: controller.parser.markers),
|
||||||
|
PolylineLayer(polylines: controller.pathLayer),
|
||||||
MarkerLayer(
|
MarkerLayer(
|
||||||
markers: controller.pointsToMeasureMarker),
|
markers: controller.pointsToMeasureMarker),
|
||||||
// PolylineLayer(
|
// PolylineLayer(
|
||||||
// polylines: controller.parser.polylines),
|
// polylines: controller.parser.polylines),
|
||||||
PolyWidgetLayer(
|
PolyWidgetLayer(
|
||||||
polyWidgets: controller.pointsToMeasureLabel)
|
polyWidgets: controller.pointsToMeasureLabel),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
: const Center(child: CircularProgressIndicator()),
|
: const Center(child: CircularProgressIndicator()),
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:terepi_seged/pages/map/presentation/controllers/map_controller.dart';
|
||||||
import 'package:terepi_seged/pages/navigation/presentation/controllers/navigation_controller.dart';
|
import 'package:terepi_seged/pages/navigation/presentation/controllers/navigation_controller.dart';
|
||||||
|
|
||||||
class SettingsDialog extends StatelessWidget {
|
class SettingsDialog extends StatelessWidget {
|
||||||
final controller = Get.find<NavigationViewController>();
|
final controller = Get.find<NavigationViewController>();
|
||||||
SettingsDialog({super.key});
|
SettingsDialog({super.key});
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: ListView(
|
body: ListView(
|
||||||
@ -19,8 +19,26 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
controller.vehicleNumber =
|
if (controller.ntripUsernameController.text.isNotEmpty) {
|
||||||
int.parse(controller.vehicleNumberController.text);
|
controller.ntripUserName.value =
|
||||||
|
controller.ntripUsernameController.text;
|
||||||
|
controller.saveNtripUserName(
|
||||||
|
controller.ntripUsernameController.text);
|
||||||
|
if (controller
|
||||||
|
.ntripPasswordController.text.isNotEmpty) {
|
||||||
|
controller.ntripPassword.value =
|
||||||
|
controller.ntripPasswordController.text;
|
||||||
|
controller.saveNtripPassword(
|
||||||
|
controller.ntripPasswordController.text);
|
||||||
|
}
|
||||||
|
if (controller
|
||||||
|
.vehicleNumberController.text.isNotEmpty) {
|
||||||
|
controller.vehicleNumber.value = int.parse(
|
||||||
|
controller.vehicleNumberController.text);
|
||||||
|
controller.saveVehicleNumber(int.parse(
|
||||||
|
controller.vehicleNumberController.text));
|
||||||
|
}
|
||||||
|
}
|
||||||
Get.back();
|
Get.back();
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.close)),
|
icon: const Icon(Icons.close)),
|
||||||
@ -28,7 +46,29 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
overlayColor:
|
overlayColor:
|
||||||
MaterialStateProperty.all(Colors.transparent)),
|
MaterialStateProperty.all(Colors.transparent)),
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
if (controller.ntripUsernameController.text.isNotEmpty) {
|
||||||
|
controller.ntripUserName.value =
|
||||||
|
controller.ntripUsernameController.text;
|
||||||
|
controller.saveNtripUserName(
|
||||||
|
controller.ntripUsernameController.text);
|
||||||
|
if (controller
|
||||||
|
.ntripPasswordController.text.isNotEmpty) {
|
||||||
|
controller.ntripPassword.value =
|
||||||
|
controller.ntripPasswordController.text;
|
||||||
|
controller.saveNtripPassword(
|
||||||
|
controller.ntripPasswordController.text);
|
||||||
|
}
|
||||||
|
if (controller
|
||||||
|
.vehicleNumberController.text.isNotEmpty) {
|
||||||
|
controller.vehicleNumber.value = int.parse(
|
||||||
|
controller.vehicleNumberController.text);
|
||||||
|
controller.saveVehicleNumber(int.parse(
|
||||||
|
controller.vehicleNumberController.text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
'Bezár',
|
'Bezár',
|
||||||
style: TextStyle(color: Colors.blue, fontSize: 14.0),
|
style: TextStyle(color: Colors.blue, fontSize: 14.0),
|
||||||
@ -51,12 +91,95 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Obx(() => Column(children: [
|
Obx(() => Column(children: [
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-BE6A'),
|
||||||
|
value: '10:06:1C:97:BE:6A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-BE6A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-BE6A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-1DC6'),
|
||||||
|
value: 'E8:31:CD:16:1D:C6',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-1DC6';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-1DC6');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-9C3A'),
|
||||||
|
value: '08:3A:8D:14:9C:3A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-9C3A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-9C3A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-72C2'),
|
||||||
|
value: '10:06:1C:97:72:C2',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-72C2';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-72C2');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-FE16'),
|
||||||
|
value: '10:06:1C:9F:FE:16',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FE16';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FE16');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-3B0A'),
|
||||||
|
value: '10:C6:1C:9E:3B:0A',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-3B0A';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-3B0A');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-7FEA'),
|
||||||
|
value: '10:06:1C:9C:7F:EA',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-7FEA';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-7FEA');
|
||||||
|
}),
|
||||||
|
RadioListTile(
|
||||||
|
title: Text('TiGNSS Rover-A39E'),
|
||||||
|
value: '10:06:1C:97:A3:9E',
|
||||||
|
groupValue: controller.gpsAddress.value,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-A39E';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-A39E');
|
||||||
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-FF4E'),
|
title: Text('TiGNSS Rover-FF4E'),
|
||||||
value: '98:CD:AC:62:FF:4E',
|
value: '98:CD:AC:62:FF:4E',
|
||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FF4E';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FF4E');
|
||||||
}),
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-8BB2'),
|
title: Text('TiGNSS Rover-8BB2'),
|
||||||
@ -64,7 +187,9 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
;
|
controller.gpsName.value = 'TiGNSS Rover-8BB2';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-8BB2');
|
||||||
}),
|
}),
|
||||||
RadioListTile(
|
RadioListTile(
|
||||||
title: Text('TiGNSS Rover-FF36'),
|
title: Text('TiGNSS Rover-FF36'),
|
||||||
@ -72,6 +197,9 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
groupValue: controller.gpsAddress.value,
|
groupValue: controller.gpsAddress.value,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
controller.gpsAddress.value = value!;
|
controller.gpsAddress.value = value!;
|
||||||
|
controller.gpsName.value = 'TiGNSS Rover-FF36';
|
||||||
|
controller.saveGpsAddress(value);
|
||||||
|
controller.saveGpsName('TiGNSS Rover-FF36');
|
||||||
})
|
})
|
||||||
])),
|
])),
|
||||||
const Padding(
|
const Padding(
|
||||||
@ -173,15 +301,7 @@ class SettingsDialog extends StatelessWidget {
|
|||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
const SizedBox(height: 5),
|
const SizedBox(height: 5),
|
||||||
const Padding(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 20),
|
|
||||||
child: Divider(
|
|
||||||
height: 5,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
const Padding(
|
const Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 20.0),
|
padding: EdgeInsets.symmetric(horizontal: 20.0),
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|||||||
@ -63,7 +63,8 @@ dependencies:
|
|||||||
connectivity_plus: ^6.1.3
|
connectivity_plus: ^6.1.3
|
||||||
photo_view: ^0.15.0
|
photo_view: ^0.15.0
|
||||||
widget_zoom: ^0.0.4
|
widget_zoom: ^0.0.4
|
||||||
supabase_flutter: ^2.8.3
|
supabase_flutter: ^2.8.4
|
||||||
|
appwrite: ^14.0.0
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
@ -80,6 +81,9 @@ dev_dependencies:
|
|||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
|
dependency_overrides:
|
||||||
|
flutter_web_auth_2: 4.1.0
|
||||||
|
|
||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
android: true
|
android: true
|
||||||
ios: true
|
ios: true
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user