Files
rog_app/lib/pages/destination/destination_controller.dart

1125 lines
37 KiB
Dart
Raw Normal View History

2022-10-12 21:46:17 +05:30
import 'dart:io';
2023-12-06 11:16:17 +05:30
import 'dart:typed_data';
2022-10-12 21:46:17 +05:30
import 'package:camera_camera/camera_camera.dart';
2022-05-12 02:17:08 +05:30
import 'package:flutter/material.dart';
2022-12-27 18:52:37 +05:30
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';
2023-12-06 11:16:17 +05:30
import 'package:geojson_vi/geojson_vi.dart';
2022-06-04 20:16:29 +05:30
import 'package:geolocator/geolocator.dart';
2022-05-12 02:17:08 +05:30
import 'package:get/get.dart';
2022-11-05 22:02:21 +05:30
import 'package:intl/intl.dart';
2022-06-14 14:37:59 +05:30
import 'package:latlong2/latlong.dart';
2023-09-11 00:45:54 +05:30
import 'package:rogapp/main.dart';
2022-07-09 22:51:34 +05:30
import 'package:rogapp/model/destination.dart';
2023-10-31 14:12:48 +05:30
import 'package:rogapp/model/gps_data.dart';
2022-10-30 21:43:29 +05:30
import 'package:rogapp/pages/camera/camera_page.dart';
2022-05-12 02:17:08 +05:30
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
2024-02-04 19:14:41 +05:30
import 'package:rogapp/services/DatabaseService.dart';
2022-05-12 02:17:08 +05:30
import 'package:rogapp/services/destination_service.dart';
2022-10-19 08:53:17 +05:30
import 'package:rogapp/services/external_service.dart';
2022-12-27 18:52:37 +05:30
import 'package:rogapp/services/location_service.dart';
2022-05-18 19:09:26 +05:30
import 'package:rogapp/services/maxtrix_service.dart';
2022-12-27 18:52:37 +05:30
import 'package:rogapp/services/perfecture_service.dart';
2023-10-31 14:12:48 +05:30
import 'package:rogapp/utils/database_gps.dart';
2022-07-09 22:51:34 +05:30
import 'package:rogapp/utils/database_helper.dart';
2023-12-07 10:20:44 +05:30
import 'package:rogapp/utils/location_controller.dart';
2022-10-30 21:43:29 +05:30
import 'package:rogapp/widgets/bottom_sheet_new.dart';
2022-06-04 20:16:29 +05:30
import 'dart:async';
2022-05-12 02:17:08 +05:30
2022-11-05 22:02:21 +05:30
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
2023-11-29 10:20:19 +05:30
import 'package:rogapp/widgets/debug_widget.dart';
2023-09-04 22:46:53 +05:30
import 'package:shared_preferences/shared_preferences.dart';
2023-12-06 11:16:17 +05:30
import 'package:image_gallery_saver/image_gallery_saver.dart';
2022-06-14 14:37:59 +05:30
2022-05-12 02:17:08 +05:30
class DestinationController extends GetxController {
2022-06-04 20:16:29 +05:30
late LocationSettings locationSettings;
2022-05-12 02:17:08 +05:30
2023-10-08 19:13:14 +05:30
Timer? _GPStimer;
2022-06-29 18:25:19 +05:30
var destinationCount = 0.obs;
2022-07-09 22:51:34 +05:30
List<Destination> destinations = <Destination>[].obs;
2023-10-06 16:25:21 +05:30
double currentLat = 0.0;
double currentLon = 0.0;
DateTime lastGPSCollectedTime = DateTime.now();
2022-05-25 21:00:10 +05:30
2023-12-18 09:22:18 +05:30
bool shouldShowBottomSheet = true;
2023-11-27 14:57:25 +05:30
static bool gps_push_started = false;
static bool game_started = false;
static bool ready_for_goal = false;
2023-11-27 13:22:18 +05:30
2023-01-26 23:30:48 +05:30
bool skip_10s = false;
2023-09-04 22:46:53 +05:30
List<Destination> currentSelectedDestinations = <Destination>[].obs;
2022-07-10 23:50:43 +05:30
2023-10-06 16:25:21 +05:30
var isInCheckin = false.obs;
var isInRog = false.obs;
var isAtStart = false.obs;
var isAtGoal = false.obs;
var isPhotoShoot = false.obs;
DateTime lastGoalAt = DateTime.now().subtract(const Duration(days: 1));
2022-10-30 21:43:29 +05:30
//List<Rogaining> rogainings = <Rogaining>[].obs;
2022-10-12 21:46:17 +05:30
2023-10-06 16:25:21 +05:30
bool checkingIn = false;
var isGpsSelected = true.obs;
2022-06-14 14:37:59 +05:30
BuildContext? context;
2022-07-20 15:57:40 +05:30
List<String> gps = <String>["-- stating --"].obs;
List<String> locationPermission = <String>[" -- starting -- "].obs;
2022-09-22 20:36:56 +05:30
var travelMode = 0.obs;
2023-10-06 16:25:21 +05:30
bool skipGps = false;
2022-10-30 21:43:29 +05:30
2022-05-18 19:09:26 +05:30
Map<String, dynamic> matrix = {};
2022-05-12 02:17:08 +05:30
2022-10-12 21:46:17 +05:30
final photos = <File>[].obs;
2022-05-12 02:17:08 +05:30
final IndexController indexController = Get.find<IndexController>();
2023-12-07 10:20:44 +05:30
final LocationController locationController = Get.put(LocationController());
2024-02-04 19:14:41 +05:30
final DatabaseService dbService = DatabaseService();
2022-05-12 02:17:08 +05:30
2022-10-30 21:43:29 +05:30
int _start = 0;
2022-11-01 23:47:35 +05:30
int chekcs = 0;
2023-10-06 16:25:21 +05:30
var rogainingCounted = false.obs;
2022-10-12 21:46:17 +05:30
2023-09-04 22:46:53 +05:30
String getFormatedTime(DateTime datetime) {
return DateFormat('yyyy-MM-dd HH:mm:ss').format(datetime);
2022-11-14 22:22:41 +05:30
}
2023-12-06 11:16:17 +05:30
Destination festuretoDestination(GeoJSONFeature fs) {
GeoJSONMultiPoint mp = fs.geometry as GeoJSONMultiPoint;
LatLng pt = LatLng(mp.coordinates[0][1], mp.coordinates[0][0]);
2023-09-04 22:46:53 +05:30
//print("----- ${indexController.currentFeature[0].properties} -----");
return Destination(
name: fs.properties!["location_name"],
2023-09-15 12:05:05 +05:30
sub_loc_id: fs.properties!["sub_loc_id"],
2023-09-04 22:46:53 +05:30
address: fs.properties!["address"],
phone: fs.properties!["phone"],
email: fs.properties!["email"],
webcontents: fs.properties!["webcontents"],
videos: fs.properties!["videos"],
category: fs.properties!["category"],
series: 1,
lat: pt.latitude,
lon: pt.longitude,
location_id: fs.properties!["location_id"],
list_order: 1,
photos: fs.properties!["photos"],
checkin_radious: fs.properties!["checkin_radius"],
auto_checkin: fs.properties!["auto_checkin"] == true ? 1 : 0,
cp: fs.properties!["cp"],
checkin_point: fs.properties!["checkin_point"],
buy_point: fs.properties!["buy_point"],
selected: false,
checkedin: false,
2023-11-20 14:01:28 +05:30
hidden_location: fs.properties!["hidden_location"] == true ? 1 : 0,
tags: fs.properties!["tags"]);
2022-10-30 21:43:29 +05:30
}
2023-12-06 11:16:17 +05:30
Future<void> startTimerLocation(GeoJSONFeature fs, double distance) async {
2023-10-08 19:13:14 +05:30
//print("---- in startTimer ----");
2023-10-06 16:25:21 +05:30
// print("---- is in rog is $is_in_rog ----");
2023-08-16 14:53:32 +05:30
double checkinRadious = fs.properties!['checkin_radius'] ?? double.infinity;
2023-09-12 12:57:45 +05:30
if (checkinRadious >= distance) {
2022-11-01 23:47:35 +05:30
indexController.currentFeature.clear();
2022-10-30 21:43:29 +05:30
Destination d = festuretoDestination(fs);
2023-10-06 16:25:21 +05:30
// print("----- destination lenght is ${destinations.length} -----");
2022-11-01 23:47:35 +05:30
indexController.currentFeature.add(fs);
2023-10-06 16:25:21 +05:30
//print("---- before calling startTimer ----");
2023-09-14 00:08:53 +05:30
await startTimer(d, distance);
2023-09-12 12:57:45 +05:30
return;
}
2022-10-30 21:43:29 +05:30
}
2023-09-14 00:08:53 +05:30
Future<void> startTimer(Destination d, double distance) async {
2023-11-27 14:57:25 +05:30
//print("=== passed dest is ${d.location_id} ${d.checkedin} ====");
2023-10-06 16:25:21 +05:30
skipGps = true;
//print("---- in startTimer ----");
2023-09-08 21:19:12 +05:30
DatabaseHelper db = DatabaseHelper.instance;
List<Destination> ds = await db.getDestinationByLatLon(d.lat!, d.lon!);
2023-09-14 00:08:53 +05:30
Destination? dss;
2023-09-14 22:53:51 +05:30
if (ds.isNotEmpty) {
2023-09-14 00:08:53 +05:30
dss = ds.first;
}
2023-09-08 21:19:12 +05:30
2023-08-16 14:53:32 +05:30
double checkinRadious = d.checkin_radious ?? double.infinity;
bool autoCheckin = d.auto_checkin == 0 ? false : true;
2023-09-14 22:53:51 +05:30
bool buyPoint = dss != null && dss.buy_point != null && dss.buy_point! > 0
? true
: false;
bool buyPointImageAdded =
dss != null && dss.buypoint_image != null ? true : false;
2023-10-06 16:25:21 +05:30
bool buyPointCanceled =
dss != null && dss.buy_point != null && dss.buy_point == 0
? true
: false;
2023-09-12 12:57:45 +05:30
bool locationAlreadyCheckedIn =
2023-10-06 16:25:21 +05:30
ds.isNotEmpty && ds[0].checkedin == true ? true : false;
2023-08-16 14:53:32 +05:30
bool isuserLoggedIn = indexController.currentUser.isNotEmpty ? true : false;
2022-10-30 21:43:29 +05:30
//make current destination
2023-10-06 16:25:21 +05:30
// print("---- checkin_radious $checkinRadious ----");
// print("---- distance $distance ----");
2024-01-14 23:01:09 +05:30
if (checkinRadious >= distance || checkinRadious == -1) {
2022-10-30 21:43:29 +05:30
//currentSelectedDestinations.add(d);
indexController.currentDestinationFeature.clear();
indexController.currentDestinationFeature.add(d);
2023-10-06 16:25:21 +05:30
// print(
// "---- checked in as ${indexController.currentDestinationFeature[0].checkedin.toString()} ----");
2023-09-04 22:46:53 +05:30
} else {
2023-10-06 16:25:21 +05:30
skipGps = false;
2022-10-30 21:43:29 +05:30
return;
}
2023-10-06 16:25:21 +05:30
if (isPhotoShoot.value == true) {
2023-01-25 10:27:49 +05:30
photos.clear();
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(destination: d)))
.whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
chekcs = 0;
isInCheckin.value = false;
});
}
2022-11-05 22:02:21 +05:30
return;
}
2023-09-04 22:46:53 +05:30
if (ds.isEmpty) {
2023-10-06 16:25:21 +05:30
// print("----- in location popup cp - ${d.cp}----");
if (d.cp == -1 && DateTime.now().difference(lastGoalAt).inHours >= 24) {
2022-11-01 23:47:35 +05:30
chekcs = 1;
2022-10-30 21:43:29 +05:30
//start
2023-10-06 16:25:21 +05:30
// print("~~~~ calling start ~~~~");
// print("---- in start -----");
2023-09-04 22:46:53 +05:30
chekcs = 1;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
isAtStart.value = true;
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.85)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => BottomSheetNew(
destination: d,
))).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
chekcs = 0;
isAtStart.value = false;
isInCheckin.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2024-03-08 15:31:49 +05:30
} else if (isInRog.value == true &&
indexController.rogMode.value == 1 &&
d.cp != -1) {
2023-10-06 16:25:21 +05:30
// print("----- in location popup checkin cp - ${d.cp}----");
2022-11-02 22:47:49 +05:30
chekcs = 2;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => BottomSheetNew(
destination: d,
))).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
chekcs = 0;
isInCheckin.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2022-10-30 21:43:29 +05:30
}
}
2023-10-06 16:25:21 +05:30
// print("---- location checkin radious ${d.checkin_radious} ----");
// print("---- already checked in $locationAlreadyCheckedIn ----");
2024-01-14 23:01:09 +05:30
if ((checkinRadious >= distance || checkinRadious == -1) &&
2023-09-04 22:46:53 +05:30
locationAlreadyCheckedIn == false &&
2023-10-06 16:25:21 +05:30
isInRog.value == true) {
2023-09-04 22:46:53 +05:30
if (autoCheckin) {
2023-10-06 16:25:21 +05:30
if (!checkingIn) {
//print(
// "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ make checkin ${d.sub_loc_id}@@@@@@@@@@@");
2023-09-04 22:46:53 +05:30
makeCheckin(d, true, "");
if (d.cp != -1) {
2023-10-06 16:25:21 +05:30
rogainingCounted.value = true;
2022-10-30 21:43:29 +05:30
}
2023-10-06 16:25:21 +05:30
skipGps = false;
2022-10-30 21:43:29 +05:30
}
2023-09-14 00:08:53 +05:30
return;
2023-09-04 22:46:53 +05:30
} else {
2023-10-06 16:25:21 +05:30
// print("--- hidden loc ${d.hidden_location} ----");
2023-09-04 22:46:53 +05:30
// ask for checkin
if (d.hidden_location != null &&
d.hidden_location == 0 &&
2023-10-06 16:25:21 +05:30
isInRog.value == true &&
2023-09-04 22:46:53 +05:30
d.cp != -1) {
chekcs = 3;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
2023-09-04 22:46:53 +05:30
photos.clear();
2023-10-06 16:25:21 +05:30
// print("--- calling checkin ---");
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(
destination: d,
))).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
rogainingCounted.value = true;
chekcs = 0;
isInCheckin.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2023-10-06 16:25:21 +05:30
} else if (isInRog.value == true && d.cp != -1) {
2023-09-04 22:46:53 +05:30
chekcs = 4;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showMaterialModalBottomSheet(
expand: true,
context: Get.context!,
backgroundColor: Colors.transparent,
builder: (context) => BottomSheetNew(
destination: d,
)).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
chekcs = 0;
isInCheckin.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2023-09-04 22:46:53 +05:30
}
}
2024-01-14 23:01:09 +05:30
} else if ((checkinRadious >= distance || checkinRadious == -1) &&
2023-09-14 00:08:53 +05:30
locationAlreadyCheckedIn == true &&
buyPointImageAdded == false &&
ds.isNotEmpty &&
buyPoint == true &&
2023-09-15 17:19:26 +05:30
buyPointCanceled == false &&
2023-10-06 16:25:21 +05:30
isInRog.value == true) {
2023-09-14 00:08:53 +05:30
chekcs = 5;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
2023-09-14 00:08:53 +05:30
photos.clear();
2023-10-06 16:25:21 +05:30
//print("--- open buy point $buyPointImageAdded ${d.buypoint_image} ----");
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(
buyPointPhoto: true,
destination: d,
dbDest: ds.first,
))).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
rogainingCounted.value = true;
chekcs = 0;
isInCheckin.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2023-09-04 22:46:53 +05:30
}
2023-10-06 16:25:21 +05:30
// print("---- cp --- ${d.cp} -----");
// print("--- at goal $is_at_goal ---");
// print("--- rog counted $rogaining_counted ---");
// print("--- loc already checked in $locationAlreadyCheckedIn ---");
// print(
// "==== date diff is ${DateTime.now().difference(last_goal_at).inHours} ====");
2023-09-04 22:46:53 +05:30
if (isuserLoggedIn &&
d.cp == -1 &&
locationAlreadyCheckedIn &&
skip_10s == false) {
//check for rogaining
2023-10-06 16:25:21 +05:30
if (isAtGoal.value == false && rogainingCounted.value) {
2023-09-04 22:46:53 +05:30
//goal
2023-10-06 16:25:21 +05:30
//print("---- in goal -----");
2023-09-04 22:46:53 +05:30
chekcs = 5;
2023-10-06 16:25:21 +05:30
isAtGoal.value = true;
2023-09-04 22:46:53 +05:30
photos.clear();
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(
destination: d,
))).whenComplete(() {
shouldShowBottomSheet = true;
skipGps = false;
chekcs = 0;
isAtGoal.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2023-10-06 16:25:21 +05:30
} else if (isInRog.value == false &&
indexController.rogMode.value == 1 &&
DateTime.now().difference(lastGoalAt).inHours >= 24) {
2023-09-04 22:46:53 +05:30
//start
2023-10-06 16:25:21 +05:30
//print("---- in start -----");
2023-09-04 22:46:53 +05:30
chekcs = 6;
2023-10-06 16:25:21 +05:30
isAtStart.value = true;
2023-12-18 09:22:18 +05:30
if (shouldShowBottomSheet) {
shouldShowBottomSheet = false;
if (d.cp == -1) return;
2023-12-18 09:22:18 +05:30
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => BottomSheetNew(
destination: d,
))).whenComplete(() {
shouldShowBottomSheet = true;
//print("----- finished start -------");
skipGps = false;
chekcs = 0;
isAtStart.value = false;
});
}
2023-09-14 00:08:53 +05:30
return;
2023-09-04 22:46:53 +05:30
}
}
2023-10-06 16:25:21 +05:30
//print("==== _chekcs $chekcs ====");
2023-09-04 22:46:53 +05:30
if (chekcs == 0) {
2023-10-06 16:25:21 +05:30
skipGps = false;
2023-09-04 22:46:53 +05:30
}
2023-09-12 12:57:45 +05:30
return;
2022-10-30 21:43:29 +05:30
}
2024-03-08 18:19:18 +05:30
Future<void> resetRogaining({bool isgoal = false}) async {
2023-10-06 16:25:21 +05:30
//print("----- resetting --------");
2022-11-08 15:29:42 +05:30
2023-10-06 16:25:21 +05:30
isInCheckin.value = false;
isInRog.value = false;
isAtStart.value = false;
isAtGoal.value = false;
isGpsSelected.value = true;
skipGps = false;
ready_for_goal = false;
2022-10-30 21:43:29 +05:30
_start = 0;
2022-11-01 23:47:35 +05:30
chekcs = 0;
2023-10-06 16:25:21 +05:30
rogainingCounted.value = false;
2023-01-26 20:09:33 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2024-03-08 18:19:18 +05:30
if (isgoal == false) {
await db.deleteAllDestinations();
await db.deleteAllRogaining();
}
2023-10-06 16:25:21 +05:30
int? latgoal = await db.latestGoal();
if (latgoal != null) {
lastGoalAt = DateTime.fromMicrosecondsSinceEpoch(latgoal);
//print("===== last goal : $last_goal_at =====");
2023-01-31 10:14:23 +05:30
}
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2023-09-12 22:08:03 +05:30
}
void deleteAllDestinations() {
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.deleteAllDestinations().then((value) {
2023-10-06 16:25:21 +05:30
populateDestinations();
2023-01-26 20:09:33 +05:30
});
2022-10-30 21:43:29 +05:30
}
2023-09-14 22:53:51 +05:30
void openCamera(BuildContext context, Destination? destination) {
2022-10-12 21:46:17 +05:30
photos.clear();
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CameraCamera(
2023-09-12 12:57:45 +05:30
resolutionPreset: ResolutionPreset.medium,
2023-09-04 22:46:53 +05:30
onFile: (file) {
photos.add(file);
Navigator.pop(context);
2023-10-06 16:25:21 +05:30
//print("----image file is : $file----");
2022-10-12 21:46:17 +05:30
//setState(() {});
},
2023-09-12 12:57:45 +05:30
)));
2022-10-12 21:46:17 +05:30
}
2022-09-22 20:36:56 +05:30
void getRoutePoints() {
indexController.routePoints = [];
indexController.routePointLenght.value = 0;
2023-09-04 22:46:53 +05:30
DestinationService.getDestinationLine(destinations, matrix)?.then((value) {
2022-09-22 20:36:56 +05:30
indexController.routePoints = value;
2023-09-04 22:46:53 +05:30
indexController.routePointLenght.value =
indexController.routePoints.length;
2022-09-22 20:36:56 +05:30
});
}
2022-06-14 14:37:59 +05:30
2023-09-04 22:46:53 +05:30
Future<Destination?> getDestinationForLatLong(double lat, double long) async {
for (final d in destinations) {
if (lat == d.lat && long == d.lon) {
return d;
}
}
return null;
2022-06-14 14:37:59 +05:30
}
2023-10-06 16:25:21 +05:30
Future<void> callforCheckin(Destination d) async {
2023-09-04 22:46:53 +05:30
bool autoCheckin = d.auto_checkin == 0 ? false : true;
2023-10-06 16:25:21 +05:30
//print("---- f- checkin ${d.sub_loc_id} ----");
2023-09-04 22:46:53 +05:30
if (autoCheckin) {
2023-10-06 16:25:21 +05:30
if (!checkingIn) {
2023-09-04 22:46:53 +05:30
makeCheckin(d, true, "");
if (d.cp != -1) {
2023-10-06 16:25:21 +05:30
rogainingCounted.value = true;
2023-09-04 22:46:53 +05:30
}
}
} else {
2023-10-06 16:25:21 +05:30
//print("--- hidden loc ${d.hidden_location} ----");
2023-09-04 22:46:53 +05:30
// ask for checkin
2023-10-06 16:25:21 +05:30
//print("is rog ---- ${is_in_rog.value} ----");
2023-09-04 22:46:53 +05:30
if (d.hidden_location != null &&
d.hidden_location == 0 &&
2023-10-06 16:25:21 +05:30
isInRog.value == true &&
2023-09-04 22:46:53 +05:30
d.cp != -1) {
chekcs = 3;
2023-10-06 16:25:21 +05:30
isInCheckin.value = true;
2023-09-04 22:46:53 +05:30
photos.clear();
2023-09-14 22:53:51 +05:30
await showModalBottomSheet(
2023-09-12 12:57:45 +05:30
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
2023-09-04 22:46:53 +05:30
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(
2023-10-06 16:25:21 +05:30
manulaCheckin: true,
2023-09-04 22:46:53 +05:30
destination: d,
2023-09-14 22:53:51 +05:30
))).whenComplete(() async {
if (d.buy_point != null && d.buy_point! > 0) {
2023-10-06 16:25:21 +05:30
skipGps = true;
2023-09-14 22:53:51 +05:30
photos.clear();
DatabaseHelper db = DatabaseHelper.instance;
List<Destination> ds =
await db.getDestinationByLatLon(d.lat!, d.lon!);
Destination? dss;
if (ds.isNotEmpty) {
dss = ds.first;
}
await showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
context: Get.context!,
isScrollControlled: true,
builder: ((context) => CameraPage(
buyPointPhoto: true,
destination: d,
dbDest: dss,
))).whenComplete(() {
2023-10-06 16:25:21 +05:30
skipGps = false;
rogainingCounted.value = true;
2023-09-14 22:53:51 +05:30
chekcs = 0;
2023-10-06 16:25:21 +05:30
isInCheckin.value = false;
2023-11-22 12:58:29 +05:30
Get.back();
2023-09-14 22:53:51 +05:30
});
} else {
2023-10-06 16:25:21 +05:30
skipGps = false;
2023-09-14 22:53:51 +05:30
chekcs = 0;
2023-10-06 16:25:21 +05:30
isInCheckin.value = false;
2023-09-14 22:53:51 +05:30
}
2023-09-04 22:46:53 +05:30
});
} else {
Get.snackbar("始まっていない", "ロゲイニングを始める必要があります");
}
}
}
2022-10-12 21:46:17 +05:30
2023-11-22 23:06:38 +05:30
Future<void> addGPStoDB(double la, double ln, {isCheckin = 0}) async {
//print("in addGPStoDB ${indexController.currentUser}");
try {
GpsDatabaseHelper db = GpsDatabaseHelper.instance;
final team_name = indexController.currentUser[0]["user"]['team_name'];
final event_code = indexController.currentUser[0]["user"]["event_code"];
GpsData gps_data = GpsData(
id: 0,
team_name: team_name,
event_code: event_code,
lat: la,
lon: ln,
is_checkin: isCheckin,
created_at: DateTime.now().millisecondsSinceEpoch);
var res = await db.insertGps(gps_data);
} catch (err) {
print("errr ready gps ${err}");
return;
}
2023-11-22 23:06:38 +05:30
}
2023-09-14 00:08:53 +05:30
Future<void> checkForCheckin() async {
2023-11-27 14:57:25 +05:30
//print("--- Start of checkForCheckin function ---");
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2023-12-07 10:20:44 +05:30
await Future.delayed(const Duration(milliseconds: 3000));
2023-11-27 14:57:25 +05:30
game_started = true;
2023-09-12 12:57:45 +05:30
try {
2023-12-06 11:16:17 +05:30
indexController.locations[0].features.forEach((fs) async {
GeoJSONMultiPoint mp = fs!.geometry as GeoJSONMultiPoint;
LatLng pt = LatLng(mp.coordinates[0][1], mp.coordinates[0][0]);
2023-09-12 12:57:45 +05:30
double latFs = pt.latitude;
double lonFs = pt.longitude;
var distanceFs = const Distance();
2023-12-07 10:20:44 +05:30
double distFs = distanceFs.as(LengthUnit.Meter, LatLng(latFs, lonFs),
LatLng(currentLat, currentLon));
2023-09-14 00:08:53 +05:30
Destination des = festuretoDestination(fs);
2023-09-12 12:57:45 +05:30
2023-10-06 16:25:21 +05:30
if (distFs <= des.checkin_radious! && skipGps == false) {
2023-09-14 00:08:53 +05:30
await startTimerLocation(fs, distFs);
2023-12-06 11:16:17 +05:30
// Note: You cannot break out of forEach. If you need to stop processing, you might have to reconsider using forEach.
2023-09-12 12:57:45 +05:30
}
2023-12-06 11:16:17 +05:30
});
2023-11-27 13:22:18 +05:30
if (gps_push_started == false) {
pushGPStoServer();
}
2023-10-06 16:25:21 +05:30
//print("--- 123 ---- $skip_gps----");
2023-09-12 12:57:45 +05:30
} catch (e) {
2023-10-06 16:25:21 +05:30
//print("An error occurred: $e");
2023-09-14 00:08:53 +05:30
await checkForCheckin();
2023-09-12 12:57:45 +05:30
} finally {
2023-10-06 16:25:21 +05:30
//print("--- End of checkForCheckin function, calling recursively ---");
2023-09-14 00:08:53 +05:30
await checkForCheckin();
2022-06-14 14:37:59 +05:30
}
}
2023-11-24 11:58:17 +05:30
Future<void> pushGPStoServer() async {
2023-11-27 14:57:25 +05:30
// print(
// "^^^^^^^^ ${DateFormat('kk:mm:ss \n EEE d MMM').format(DateTime.now())}");
2023-11-24 11:58:17 +05:30
try {
2023-11-27 13:22:18 +05:30
gps_push_started = true;
2023-11-24 11:58:17 +05:30
ExternalService().pushGPS();
} catch (e) {
//print("An error occurred: $e");
2023-11-27 14:57:25 +05:30
//await pushGPStoServer();
2023-11-24 11:58:17 +05:30
} finally {
//print("--- End of pushGPStoServer function, calling recursively ---");
2023-11-27 14:57:25 +05:30
await Future.delayed(const Duration(seconds: 5 * 60));
2023-11-24 11:58:17 +05:30
await pushGPStoServer();
}
}
2023-08-16 14:53:32 +05:30
void addToRogaining(double lat, double lon, int destinationId) async {
2022-10-30 21:43:29 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-08-16 14:53:32 +05:30
List<Destination> d = await db.getDestinationById(destinationId);
2023-09-04 22:46:53 +05:30
if (d.isEmpty) {
2022-11-01 23:47:35 +05:30
Destination df = festuretoDestination(indexController.currentFeature[0]);
2023-10-06 16:25:21 +05:30
//print("--- made checkin ${df.location_id} ----");
2022-11-05 22:02:21 +05:30
makeCheckin(df, true, "");
2022-10-30 21:43:29 +05:30
}
2023-10-06 16:25:21 +05:30
isInRog.value = true;
2023-09-11 00:45:54 +05:30
saveGameState();
2022-10-12 21:46:17 +05:30
}
2023-09-15 17:19:26 +05:30
Future<void> cancelBuyPoint(Destination destination) async {
2023-09-14 00:08:53 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-15 17:19:26 +05:30
await db.updateCancelBuyPoint(destination);
2023-10-06 16:25:21 +05:30
populateDestinations();
2023-09-15 17:19:26 +05:30
}
2023-09-14 00:08:53 +05:30
2023-12-06 11:16:17 +05:30
_saveImageFromPath(String imagePath) async {
// Read the image file from the given path
File imageFile = File(imagePath);
Uint8List imageBytes = await imageFile.readAsBytes();
// Save the image to the gallery
final result = await ImageGallerySaver.saveImage(imageBytes);
2024-03-02 11:11:46 +05:30
//print("--- save result --- ${result}");
2023-12-06 11:16:17 +05:30
}
2023-09-15 17:19:26 +05:30
Future<void> makeBuyPoint(Destination destination, String imageurl) async {
DatabaseHelper db = DatabaseHelper.instance;
2023-09-14 00:08:53 +05:30
await db.updateBuyPoint(destination, imageurl);
2023-10-06 16:25:21 +05:30
populateDestinations();
2023-12-06 11:16:17 +05:30
await _saveImageFromPath(imageurl);
2023-09-15 18:11:13 +05:30
if (indexController.currentUser.isNotEmpty) {
double cpNum = destination.cp!;
int userId = indexController.currentUser[0]["user"]["id"];
//print("--- Pressed -----");
2023-10-06 16:25:21 +05:30
String team = indexController.currentUser[0]["user"]['team_name'];
2023-09-15 18:11:13 +05:30
//print("--- _team : ${_team}-----");
2023-10-06 16:25:21 +05:30
String eventCode = indexController.currentUser[0]["user"]["event_code"];
2023-09-15 18:11:13 +05:30
//print("--- _event_code : ${_event_code}-----");
2023-10-06 16:25:21 +05:30
String token = indexController.currentUser[0]["token"];
2023-09-15 18:11:13 +05:30
//print("--- _token : ${_token}-----");
DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now);
2023-10-06 16:25:21 +05:30
//print("------ checkin event $eventCode ------");
2023-09-15 18:11:13 +05:30
ExternalService()
2023-10-06 16:25:21 +05:30
.makeCheckpoint(userId, token, formattedDate, team, cpNum.round(),
eventCode, imageurl)
2023-09-15 18:11:13 +05:30
.then((value) {
2023-10-06 16:25:21 +05:30
//print("------Ext service check point $value ------");
2023-09-15 18:11:13 +05:30
});
}
2023-09-14 00:08:53 +05:30
}
Future<void> makeCheckin(
2023-09-04 22:46:53 +05:30
Destination destination, bool action, String imageurl) async {
2023-10-06 16:25:21 +05:30
// print("~~~~ calling checkin function ~~~~");
// print(
// "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ressssss ${destination.sub_loc_id}@@@@@@@@@@@");
2023-09-04 22:46:53 +05:30
DatabaseHelper db = DatabaseHelper.instance;
List<Destination> ddd =
await db.getDestinationByLatLon(destination.lat!, destination.lon!);
2022-10-12 21:46:17 +05:30
2023-09-04 22:46:53 +05:30
if (ddd.isEmpty) {
destination.checkedin = true;
2023-09-12 16:00:58 +05:30
destination.checkin_image = imageurl;
2023-09-04 22:46:53 +05:30
await db.insertDestination(destination);
2023-10-06 16:25:21 +05:30
// print("~~~~ inserted into db ~~~~");
2023-09-04 22:46:53 +05:30
}
2022-11-05 22:02:21 +05:30
2023-12-06 11:16:17 +05:30
await _saveImageFromPath(imageurl);
2023-09-06 21:04:44 +05:30
2023-10-06 16:25:21 +05:30
populateDestinations();
2022-11-05 22:02:21 +05:30
2023-09-04 22:46:53 +05:30
/// post to NATNAT
if (indexController.currentUser.isNotEmpty) {
double cpNum = destination.cp!;
int userId = indexController.currentUser[0]["user"]["id"];
//print("--- Pressed -----");
2023-10-06 16:25:21 +05:30
String team = indexController.currentUser[0]["user"]['team_name'];
2023-09-04 22:46:53 +05:30
//print("--- _team : ${_team}-----");
2023-10-06 16:25:21 +05:30
String eventCode = indexController.currentUser[0]["user"]["event_code"];
2023-09-04 22:46:53 +05:30
//print("--- _event_code : ${_event_code}-----");
2023-10-06 16:25:21 +05:30
String token = indexController.currentUser[0]["token"];
2023-09-04 22:46:53 +05:30
//print("--- _token : ${_token}-----");
DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now);
2023-11-24 11:58:17 +05:30
await addGPStoDB(currentLat, currentLon, isCheckin: 1);
2023-11-22 23:06:38 +05:30
2023-10-06 16:25:21 +05:30
// print("------ checkin event $eventCode ------");
2023-09-04 22:46:53 +05:30
ExternalService()
2023-10-06 16:25:21 +05:30
.makeCheckpoint(userId, token, formattedDate, team, cpNum.round(),
eventCode, imageurl)
2023-09-04 22:46:53 +05:30
.then((value) {
2023-10-06 16:25:21 +05:30
// print("------Ext service check point $value ------");
2023-09-04 22:46:53 +05:30
});
}
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2022-07-14 23:10:24 +05:30
}
2023-11-22 23:06:38 +05:30
Future<void> removeCheckin(int cp) {
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2023-11-22 23:06:38 +05:30
return ExternalService().removeCheckin(cp);
}
2023-09-14 00:08:53 +05:30
Future<void> startGame() async {
2023-10-08 19:13:14 +05:30
//print("------ starting game ------");
2023-11-27 14:57:25 +05:30
if (game_started == false) {
await checkForCheckin();
}
2023-09-12 12:57:45 +05:30
}
2023-09-06 00:22:02 +05:30
@override
void onInit() async {
2022-09-22 20:36:56 +05:30
super.onInit();
locationController.locationMarkerPositionStream.listen(
(locationMarkerPosition) {
if (locationMarkerPosition != null) {
handleLocationUpdate(locationMarkerPosition);
}
}, onError: (err) {
print("Error: $err");
});
startGame();
}
2023-12-07 10:20:44 +05:30
@override
void onClose() {
locationController.stopPositionStream();
}
void handleLocationUpdate(LocationMarkerPosition? position) async {
try {
if (position != null) {
2024-03-09 11:59:42 +05:30
if (distanceToStart() >= 150) {
ready_for_goal = true;
}
var distance = const Distance();
double distanceToDest = distance.as(
LengthUnit.Meter,
LatLng(position.latitude, position.longitude),
LatLng(currentLat, currentLon));
Duration difference =
lastGPSCollectedTime.difference(DateTime.now()).abs();
if (difference.inSeconds >= 10 || distanceToDest >= 10) {
// print(
// "^^^^^^^^ GPS data collected ${DateFormat('kk:mm:ss \n EEE d MMM').format(DateTime.now())}, ^^^ ${position.latitude}, ${position.longitude}");
LogManager().addLog(
"GPS : $currentLat, $currentLon - ${DateTime.now().hour}:${DateTime.now().minute}:${DateTime.now().second}:${DateTime.now().microsecond}");
if (isInRog.value) {
await addGPStoDB(position.latitude, position.longitude);
lastGPSCollectedTime = DateTime.now();
}
2023-12-12 16:16:17 +05:30
}
2023-12-07 10:20:44 +05:30
}
} finally {
if (position != null &&
(position.latitude != 0 && position.longitude != 0)) {
currentLat = position.latitude;
currentLon = position.longitude;
}
2023-12-07 10:20:44 +05:30
}
}
2023-11-20 22:49:54 +05:30
double distanceToStart() {
2024-02-04 19:14:41 +05:30
if (indexController.locations.isEmpty) {
return 1000000000;
}
2023-11-21 15:45:03 +05:30
//print("=== gfs len == ${indexController.locations[0].collection.length}");
2023-12-06 11:16:17 +05:30
double distanceToDest = double.infinity;
if (indexController.locations[0].features.isEmpty) {
return distanceToDest;
}
GeoJSONFeature? gfs = indexController.locations[0].features.firstWhere(
(element) => festuretoDestination(element!).cp == -1,
orElse: () => null, // Provide a null value if no element is found
);
//print("gfs : ${gfs}");
2023-12-06 11:16:17 +05:30
if (gfs == null) {
return distanceToDest;
}
2023-11-21 15:45:03 +05:30
Destination des = festuretoDestination(gfs);
2023-11-27 14:57:25 +05:30
//print("=== gfs == ${des.toMap()}");
2023-11-20 22:49:54 +05:30
2023-11-21 15:45:03 +05:30
var distance = const Distance();
distanceToDest = distance.as(LengthUnit.Meter,
LatLng(currentLat, currentLon), LatLng(des.lat!, des.lon!));
2023-11-27 14:57:25 +05:30
//print("==== dist==${distanceToDest}");
2023-11-20 22:49:54 +05:30
return distanceToDest;
}
int getForcedChckinDistance(Destination dest) {
2024-01-17 16:08:41 +05:30
if (dest.checkin_radious == -1) {
return 10000000000000000;
}
int _retValue = 100;
if (dest.cp == -1) {
return 500;
}
Destination? ds;
2023-12-06 11:16:17 +05:30
GeoJSONFeature? gfs = indexController.locations[0].features.firstWhere(
(element) => festuretoDestination(element!).cp == -1,
orElse: () => null, // Provide a null value if no element is found
);
if (gfs == null) {
return _retValue;
}
2023-11-21 15:45:03 +05:30
ds = festuretoDestination(gfs);
var distance = const Distance();
double distanceToDest = distance.as(LengthUnit.Meter,
LatLng(dest.lat!, dest.lon!), LatLng(ds.lat!, ds.lon!));
if (distanceToDest <= 500) {
return 500;
}
2023-11-27 14:57:25 +05:30
//print("==== forced dist ==${distanceToDest}");
return _retValue;
2023-09-04 22:46:53 +05:30
}
2022-06-04 20:16:29 +05:30
2023-09-12 12:57:45 +05:30
readUserToken() async {
2023-09-04 22:46:53 +05:30
final SharedPreferences prefs = await SharedPreferences.getInstance();
indexController.userToken = prefs.getString("user_token");
2022-05-12 02:17:08 +05:30
}
2022-12-27 18:52:37 +05:30
@override
2023-09-04 22:46:53 +05:30
void onReady() async {
await readUserToken();
final token = indexController.userToken;
2023-09-12 12:57:45 +05:30
if (token != null && token.isNotEmpty) {
2023-09-04 22:46:53 +05:30
await indexController.loadUserDetailsForToken(token);
fixMapBound(token);
return;
}
Get.toNamed(AppPages.LOGIN)!.then((value) {
if (indexController.currentUser.isNotEmpty) {
final tk = indexController.currentUser[0]["token"];
fixMapBound(tk);
} else {
2023-07-18 22:10:30 +05:30
Get.toNamed(AppPages.TRAVEL);
2023-09-04 22:46:53 +05:30
PerfectureService.getSubExt("9").then((value) {
if (value != null) {
LatLngBounds bnds = LatLngBounds(
LatLng(value[1], value[0]), LatLng(value[3], value[2]));
indexController.mapController
.fitBounds(bnds); //.centerZoomFitBounds(bnds);
2023-07-18 22:10:30 +05:30
}
});
}
});
super.onReady();
}
2023-09-04 22:46:53 +05:30
void fixMapBound(String token) {
//String _token = indexController.currentUser[0]["token"];
2023-10-08 19:13:14 +05:30
indexController.switchPage(AppPages.INDEX);
2023-09-04 22:46:53 +05:30
LocationService.getLocationsExt(token).then((value) {
if (value != null) {
2023-10-06 16:25:21 +05:30
//print("--- loc ext is - $value ----");
2023-09-04 22:46:53 +05:30
LatLngBounds bnds = LatLngBounds(
LatLng(value[1], value[0]), LatLng(value[3], value[2]));
2023-10-06 16:25:21 +05:30
//print("--- bnds is - $bnds ----");
2023-09-04 22:46:53 +05:30
indexController.mapController.fitBounds(
bnds,
);
indexController.currentBound.clear();
indexController.currentBound.add(bnds);
indexController.loadLocationsBound();
centerMapToCurrentLocation();
2023-09-04 22:46:53 +05:30
}
});
}
void centerMapToCurrentLocation() {
print("center is ${currentLon}, ${currentLon}");
if (currentLat != 0 || currentLon != 0) {
indexController.mapController.move(LatLng(currentLat, currentLon), 17.0);
}
2022-12-27 18:52:37 +05:30
}
2022-11-14 22:22:41 +05:30
void connectionChanged(String val) {
2023-10-06 16:25:21 +05:30
//print('----- %%%%%%%%%%%%%%%%%%%%% ----- $val');
Map<String, dynamic> res = {};
2023-09-04 22:46:53 +05:30
if (val == "wifi" || val == "mobile") {
2023-10-06 16:25:21 +05:30
String token = indexController.currentUser[0]["token"];
2022-11-14 22:22:41 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.allRogianing().then((value) {
2022-11-14 22:27:52 +05:30
value.forEach((e) async {
2023-09-04 22:46:53 +05:30
if (e.rog_action_type == 0) {
2023-10-06 16:25:21 +05:30
res = await ExternalService().startRogaining();
2023-09-04 22:46:53 +05:30
} else if (e.rog_action_type == 1) {
2023-08-16 14:53:32 +05:30
var datetime = DateTime.fromMicrosecondsSinceEpoch(e.checkintime!);
2023-10-06 16:25:21 +05:30
res = await ExternalService().makeCheckpoint(
2023-09-04 22:46:53 +05:30
e.user_id!,
2023-10-06 16:25:21 +05:30
token,
2023-09-04 22:46:53 +05:30
getFormatedTime(datetime),
e.team_name!,
e.cp_number!,
e.event_code!,
e.image!);
} else if (e.rog_action_type == 2) {
2023-08-16 14:53:32 +05:30
var datetime = DateTime.fromMicrosecondsSinceEpoch(e.checkintime!);
2023-10-06 16:25:21 +05:30
res = await ExternalService().makeGoal(
2023-09-04 22:46:53 +05:30
e.user_id!,
2023-10-06 16:25:21 +05:30
token,
2023-09-04 22:46:53 +05:30
e.team_name!,
e.image!,
getFormatedTime(datetime),
e.event_code!);
2022-11-14 22:22:41 +05:30
}
2022-11-14 22:27:52 +05:30
2023-10-06 16:25:21 +05:30
if (res.isNotEmpty) {
2022-11-14 22:27:52 +05:30
db.deleteRogaining(e.id!);
}
2022-11-14 22:22:41 +05:30
});
});
}
}
2022-07-14 23:10:24 +05:30
void checkPermission() async {
2022-12-25 19:26:07 +05:30
LocationPermission permission = await Geolocator.checkPermission();
2022-07-14 23:10:24 +05:30
if (permission != LocationPermission.whileInUse ||
permission != LocationPermission.always) {
2023-09-04 22:46:53 +05:30
locationPermission.clear();
locationPermission.add(permission.name);
2022-07-14 23:10:24 +05:30
permission = await Geolocator.requestPermission();
}
}
2023-09-04 22:46:53 +05:30
Destination? destinationById(int id) {
2023-08-16 14:53:32 +05:30
Destination? d;
2023-10-06 16:25:21 +05:30
//print("--- target des - $id ----");
2023-09-04 22:46:53 +05:30
for (Destination ss in destinations) {
2023-10-06 16:25:21 +05:30
//print("--- des - ${ss.location_id} ----");
2023-09-04 22:46:53 +05:30
if (ss.location_id == id) {
2022-10-12 21:46:17 +05:30
d = ss;
break;
}
}
return d;
}
2023-09-04 22:46:53 +05:30
void deleteDestination(Destination d) {
2022-07-10 23:50:43 +05:30
//int id = destinations[index].location_id!;
2022-07-09 22:51:34 +05:30
//print("---- index ${destinations[index].location_id!}-----");
2023-09-04 22:46:53 +05:30
for (Destination ss in destinations) {
if (ss.location_id == d.location_id) {
2022-10-30 21:43:29 +05:30
destinations.remove(ss);
2022-07-10 23:50:43 +05:30
break;
}
}
2022-07-09 22:51:34 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.deleteDestination(d.location_id!).then((value) {
2023-10-06 16:25:21 +05:30
populateDestinations();
2022-05-25 21:00:10 +05:30
});
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2022-07-09 22:51:34 +05:30
}
2023-09-12 22:08:03 +05:30
void deleteDBDestinations() {
2022-09-23 18:40:17 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.deleteAllDestinations().then((value) {
2023-10-06 16:25:21 +05:30
populateDestinations();
2022-09-23 18:40:17 +05:30
});
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2022-09-23 18:40:17 +05:30
}
2023-09-04 22:46:53 +05:30
// ---------- database ------------------///
2022-07-09 22:51:34 +05:30
2023-09-04 22:46:53 +05:30
void addDestinations(Destination dest) {
2022-07-09 22:51:34 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.getDestinationByLatLon(dest.lat!, dest.lon!).then((value) {
if (value.isNotEmpty) {
db.deleteDestination(value[0].location_id!).then((value) {
db.insertDestination(dest).then((value) {
2023-10-06 16:25:21 +05:30
//print(
// "----- destination controller deleted and inserted destination id $value ---- :::::");
populateDestinations();
2022-07-09 22:51:34 +05:30
});
});
2023-09-04 22:46:53 +05:30
} else {
db.insertDestination(dest).then((value) {
2023-10-06 16:25:21 +05:30
//print("----- destination controller added as new $value--- :::::");
populateDestinations();
2023-09-04 22:46:53 +05:30
});
2022-07-09 22:51:34 +05:30
}
});
2024-02-04 19:14:41 +05:30
dbService.updateDatabase();
2022-05-25 21:00:10 +05:30
}
void toggleSelection(Destination dest) async {
DatabaseHelper db = DatabaseHelper.instance;
await db.toggleSelecttion(dest);
destinations.clear();
2023-09-04 22:46:53 +05:30
db.getDestinations().then((value) {
destinationCount.value = 0;
currentSelectedDestinations.clear();
2023-09-04 22:46:53 +05:30
for (Destination d in value) {
//print("------ destination controller populating destination-------- ${d.checkedin}-------- :::::");
//print("-----populated----- ${d.toMap()}");
2023-09-04 22:46:53 +05:30
if (d.selected!) {
currentSelectedDestinations.add(d);
}
destinations.add(d);
}
destinationCount.value = destinations.length;
});
}
2023-02-16 19:36:39 +05:30
buildShowDialog(BuildContext context) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
2023-08-16 14:53:32 +05:30
return const Center(
2023-02-16 19:36:39 +05:30
child: CircularProgressIndicator(),
);
});
}
2023-09-04 22:46:53 +05:30
void destinationMatrixFromCurrentPoint(List<Destination> points) {
2024-03-07 12:27:30 +05:30
//buildShowDialog(Get.context!);
2023-09-04 22:46:53 +05:30
MatrixService.getDestinations(points).then((mat) {
2023-10-06 16:25:21 +05:30
//print(" matrix is ------- $mat");
2023-02-16 19:36:39 +05:30
matrix = mat;
2023-09-04 22:46:53 +05:30
try {
2023-02-16 19:36:39 +05:30
indexController.routePoints = [];
indexController.routePointLenght.value = 0;
2023-09-04 22:46:53 +05:30
DestinationService.getDestinationLine(points, matrix)?.then((value) {
2023-02-16 19:36:39 +05:30
indexController.routePoints = value;
2023-09-04 22:46:53 +05:30
indexController.routePointLenght.value =
indexController.routePoints.length;
2023-06-11 21:03:30 +05:30
//Get.toNamed(AppPages.TRAVEL);
2023-02-16 19:36:39 +05:30
});
destinationCount.value = destinations.length;
2023-09-04 22:46:53 +05:30
} catch (_) {
2023-10-06 16:25:21 +05:30
skipGps = false;
2023-02-16 19:36:39 +05:30
return;
2023-09-04 22:46:53 +05:30
} finally {
2024-03-07 12:27:30 +05:30
//Get.back();
2023-02-16 19:36:39 +05:30
}
});
}
2023-10-06 16:25:21 +05:30
void populateDestinations() {
2022-07-09 22:51:34 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2022-09-29 15:32:33 +05:30
destinations.clear();
2023-09-04 22:46:53 +05:30
db.getDestinations().then((value) {
2022-09-22 20:36:56 +05:30
destinationCount.value = 0;
2023-09-04 22:46:53 +05:30
for (Destination d in value) {
2022-07-10 23:50:43 +05:30
destinations.add(d);
}
2023-11-21 22:43:28 +05:30
if (destinations.isEmpty) {
rogainingCounted.value = false;
}
2022-07-09 22:51:34 +05:30
});
2022-05-12 02:17:08 +05:30
}
2023-09-04 22:46:53 +05:30
void makeOrder(Destination d, int dir) {
2022-09-23 18:40:17 +05:30
DatabaseHelper db = DatabaseHelper.instance;
2023-09-04 22:46:53 +05:30
db.updateOrder(d, dir).then((value) {
2023-10-06 16:25:21 +05:30
populateDestinations();
2022-09-23 18:40:17 +05:30
});
2022-07-09 22:51:34 +05:30
}
2023-09-04 22:46:53 +05:30
}