1033 lines
46 KiB
Dart
1033 lines
46 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:geojson/geojson.dart';
|
|
import 'package:geolocator/geolocator.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:image_picker/image_picker.dart';
|
|
import 'package:latlong2/latlong.dart';
|
|
import 'package:rogapp/main.dart';
|
|
import 'package:rogapp/model/destination.dart';
|
|
import 'package:rogapp/pages/destination/destination_controller.dart';
|
|
import 'package:rogapp/pages/index/index_controller.dart';
|
|
import 'package:rogapp/routes/app_pages.dart';
|
|
import 'package:rogapp/services/external_service.dart';
|
|
import 'package:rogapp/utils/const.dart';
|
|
import 'package:rogapp/utils/database_helper.dart';
|
|
import 'package:rogapp/utils/text_util.dart';
|
|
import 'package:rogapp/widgets/bottom_sheet_controller.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
class BottomSheetNew extends GetView<BottomSheetController> {
|
|
BottomSheetNew({Key? key, required this.destination}) : super(key: key);
|
|
|
|
final IndexController indexController = Get.find<IndexController>();
|
|
final DestinationController destinationController =
|
|
Get.find<DestinationController>();
|
|
Destination destination;
|
|
|
|
Image getImage() {
|
|
String serverUrl = ConstValues.currentServer();
|
|
if (indexController.rog_mode == 1) {
|
|
//print("----- rogaining mode 1");
|
|
if (indexController.currentDestinationFeature.isEmpty ||
|
|
indexController.currentDestinationFeature[0].photos! == "") {
|
|
return const Image(image: AssetImage('assets/images/empty_image.png'));
|
|
} else {
|
|
//print("@@@@@@@@@@@@@ rog mode -------------------- ${indexController.currentDestinationFeature[0].photos} @@@@@@@@@@@");
|
|
String _photo = indexController.currentDestinationFeature[0].photos!;
|
|
if (_photo.contains('http')) {
|
|
return Image(
|
|
image: NetworkImage(
|
|
indexController.currentDestinationFeature[0].photos!,
|
|
),
|
|
errorBuilder: (BuildContext context, Object exception,
|
|
StackTrace? stackTrace) {
|
|
return Image.asset("assets/images/empty_image.png");
|
|
},
|
|
);
|
|
} else {
|
|
return Image(
|
|
image: NetworkImage(
|
|
'$serverUrl/media/compressed/' +
|
|
indexController.currentDestinationFeature[0].photos!,
|
|
),
|
|
errorBuilder: (BuildContext context, Object exception,
|
|
StackTrace? stackTrace) {
|
|
return Image.asset("assets/images/empty_image.png");
|
|
},
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
GeoJsonFeature<dynamic> gf = indexController.currentFeature[0];
|
|
if (gf.properties!["photos"] == null || gf.properties!["photos"] == "") {
|
|
return const Image(image: AssetImage('assets/images/empty_image.png'));
|
|
} else {
|
|
String _photo = gf.properties!["photos"];
|
|
if (_photo.contains('http')) {
|
|
return Image(
|
|
image: NetworkImage(
|
|
gf.properties!["photos"],
|
|
),
|
|
errorBuilder: (BuildContext context, Object exception,
|
|
StackTrace? stackTrace) {
|
|
return Image.asset("assets/images/empty_image.png");
|
|
},
|
|
);
|
|
} else {
|
|
return Image(
|
|
image: NetworkImage(
|
|
'$serverUrl/media/compressed/' + gf.properties!["photos"],
|
|
),
|
|
errorBuilder: (BuildContext context, Object exception,
|
|
StackTrace? stackTrace) {
|
|
return Image.asset("assets/images/empty_image.png");
|
|
},
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void _launchURL(url) async {
|
|
if (!await launch(url)) throw 'Could not launch $url';
|
|
}
|
|
|
|
bool isInDestination(String locationid) {
|
|
int lid = int.parse(locationid);
|
|
if (destinationController.destinations
|
|
.where((element) => element.location_id == lid)
|
|
.isNotEmpty) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
destinationController.skip_gps = true;
|
|
print('---- rog_mode ----- ${indexController.rog_mode} -----');
|
|
return indexController.rog_mode == 0
|
|
? detailsSheet(context)
|
|
: destinationSheet(context);
|
|
}
|
|
|
|
// Show destination detais
|
|
SingleChildScrollView destinationSheet(BuildContext context) {
|
|
print(
|
|
'---- currentDestinationFeature ----- ${indexController.currentDestinationFeature[0].name} -----');
|
|
|
|
return SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Container(
|
|
child: Row(
|
|
children: [
|
|
MaterialButton(
|
|
onPressed: () {
|
|
Get.back();
|
|
//destinationController.makePrevious(indexController.currentDestinationFeature[0]);
|
|
},
|
|
color: Colors.blue,
|
|
textColor: Colors.white,
|
|
child: const Icon(
|
|
Icons.arrow_back_ios,
|
|
size: 14,
|
|
),
|
|
padding: const EdgeInsets.all(16),
|
|
shape: const CircleBorder(),
|
|
),
|
|
Expanded(
|
|
child: Container(
|
|
alignment: Alignment.center,
|
|
child: Obx(() => indexController.currentUser.isNotEmpty
|
|
? Text(
|
|
"${TextUtils.getDisplayText(indexController.currentDestinationFeature[0])} : ${TextUtils.getDisplayText(indexController.currentDestinationFeature[0])} : ${indexController.currentDestinationFeature[0].name!}",
|
|
style: const TextStyle(
|
|
fontSize: 15.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
)
|
|
: Text(
|
|
indexController
|
|
.currentDestinationFeature[0].name!,
|
|
style: const TextStyle(
|
|
fontSize: 15.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
)),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: SizedBox(
|
|
height: 260.0,
|
|
child: Obx(() => getImage()),
|
|
)),
|
|
],
|
|
),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
Obx(
|
|
() => indexController.currentDestinationFeature.isNotEmpty &&
|
|
destinationController.is_in_checkin.value == true &&
|
|
destinationController.is_at_start.value == false
|
|
? Row(
|
|
children: [
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
if (indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
null ||
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
false) {
|
|
if (indexController
|
|
.currentDestinationFeature[0]
|
|
.hidden_location ==
|
|
0) {
|
|
destinationController.skip_gps = false;
|
|
destinationController.is_photo_shoot.value =
|
|
true;
|
|
Get.back();
|
|
} else {
|
|
destinationController.makeCheckin(
|
|
indexController
|
|
.currentDestinationFeature[0],
|
|
true,
|
|
"");
|
|
if (indexController
|
|
.currentDestinationFeature[0].cp !=
|
|
-1) {
|
|
destinationController
|
|
.rogaining_counted.value = true;
|
|
}
|
|
}
|
|
} else {
|
|
destinationController.makeCheckin(
|
|
indexController
|
|
.currentDestinationFeature[0],
|
|
false,
|
|
"");
|
|
}
|
|
//Get.back();
|
|
},
|
|
child: Text(
|
|
//Checkin
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
null ||
|
|
indexController
|
|
.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
false
|
|
? "チェックイン"
|
|
: "チェックアウト")),
|
|
],
|
|
)
|
|
: Container(),
|
|
),
|
|
Obx(
|
|
() => destinationController.is_at_start.value == true
|
|
? ElevatedButton(
|
|
onPressed: () {
|
|
destinationController.is_in_rog.value = true;
|
|
destinationController.addToRogaining(
|
|
destinationController.current_lat,
|
|
destinationController.current_lon,
|
|
indexController
|
|
.currentDestinationFeature[0].location_id!);
|
|
saveGameState();
|
|
ExternalService()
|
|
.StartRogaining()
|
|
.then((value) => Get.back());
|
|
},
|
|
child: Text(
|
|
// start
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin !=
|
|
null ||
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
true
|
|
? "ロゲイニングを開始"
|
|
: "間違った目的地..."))
|
|
: Container(),
|
|
),
|
|
Obx(
|
|
() => destinationController.is_at_goal.value == true &&
|
|
destinationController.rogaining_counted == true
|
|
? ElevatedButton(
|
|
onPressed: () {
|
|
Get.toNamed(AppPages.CAMERA_PAGE);
|
|
Get.back();
|
|
},
|
|
child: Text(
|
|
//goal
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin !=
|
|
null ||
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
true
|
|
? "ロゲイニングを終える"
|
|
: "間違った目的地 ..."))
|
|
: Container(),
|
|
),
|
|
],
|
|
),
|
|
Obx(
|
|
() => indexController.currentDestinationFeature[0].address !=
|
|
null &&
|
|
indexController
|
|
.currentDestinationFeature[0].address!.isNotEmpty
|
|
? getDetails(context, "address".tr,
|
|
indexController.currentDestinationFeature[0].address! ?? '')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
),
|
|
Obx(
|
|
() => indexController.currentDestinationFeature[0].phone != null &&
|
|
indexController
|
|
.currentDestinationFeature[0].phone!.isNotEmpty
|
|
? getDetails(context, "telephone".tr,
|
|
indexController.currentDestinationFeature[0].phone! ?? '')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
),
|
|
Obx(
|
|
() => indexController.currentDestinationFeature[0].email != null &&
|
|
indexController
|
|
.currentDestinationFeature[0].email!.isNotEmpty
|
|
? getDetails(context, "email".tr,
|
|
indexController.currentDestinationFeature[0].email! ?? '')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
),
|
|
Obx(
|
|
() => indexController.currentDestinationFeature[0].webcontents !=
|
|
null &&
|
|
indexController
|
|
.currentDestinationFeature[0].webcontents!.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"web".tr,
|
|
indexController.currentDestinationFeature[0].webcontents! ??
|
|
'',
|
|
isurl: true)
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
),
|
|
Obx(
|
|
() => indexController.currentDestinationFeature[0].videos != null &&
|
|
indexController
|
|
.currentDestinationFeature[0].videos!.isNotEmpty
|
|
? getDetails(context, "video".tr,
|
|
indexController.currentDestinationFeature[0].videos! ?? '',
|
|
isurl: true)
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
),
|
|
const SizedBox(
|
|
height: 20.0,
|
|
),
|
|
// Obx(() =>
|
|
// //wantToGo(context),
|
|
|
|
// FutureBuilder<Widget>(
|
|
// future: wantToGo(context),
|
|
// builder: (context, snapshot) {
|
|
// return Container(
|
|
// child: snapshot.data,
|
|
// );
|
|
// },
|
|
// ),
|
|
|
|
// ),
|
|
const SizedBox(
|
|
height: 60.0,
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
// show add location details
|
|
SingleChildScrollView detailsSheet(BuildContext context) {
|
|
|
|
Destination _cdest = destinationController.festuretoDestination(
|
|
indexController.currentFeature[0]);
|
|
var distance = const Distance();
|
|
double _distance_to_dest = distance.as(LengthUnit.Meter, LatLng(destinationController.current_lat, destinationController.current_lon), LatLng(_cdest.lat!, _cdest.lon!));
|
|
|
|
|
|
return SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Container(
|
|
child: Row(
|
|
children: [
|
|
MaterialButton(
|
|
onPressed: () {
|
|
Get.back();
|
|
//indexController.makePrevious(indexController.currentFeature[0]);
|
|
},
|
|
color: Colors.blue,
|
|
textColor: Colors.white,
|
|
child: const Icon(
|
|
Icons.arrow_back_ios,
|
|
//Icons.arrow_back_ios,
|
|
size: 14,
|
|
),
|
|
padding: const EdgeInsets.all(16),
|
|
shape: const CircleBorder(),
|
|
),
|
|
Expanded(
|
|
child: Container(
|
|
alignment: Alignment.center,
|
|
child: Obx(() => Text(
|
|
indexController
|
|
.currentFeature[0].properties!["location_name"],
|
|
style: const TextStyle(
|
|
fontSize: 15.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
)),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: SizedBox(
|
|
height: 260.0,
|
|
child: Obx(() => getImage()),
|
|
)),
|
|
],
|
|
),
|
|
Obx(() => Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Column(
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
Obx(
|
|
() => indexController
|
|
.currentDestinationFeature.isNotEmpty &&
|
|
indexController
|
|
.currentDestinationFeature[0].cp ==
|
|
-1 &&
|
|
indexController.currentDestinationFeature[0]
|
|
.checkedin ==
|
|
false &&
|
|
destinationController.is_at_start.value ==
|
|
true
|
|
? ElevatedButton(
|
|
onPressed: () async {
|
|
await destinationController.resetRogaining();
|
|
print("~~~~ start button ~~~~");
|
|
destinationController.is_in_rog.value =
|
|
true;
|
|
destinationController.addToRogaining(
|
|
destinationController.current_lat,
|
|
destinationController.current_lon,
|
|
indexController
|
|
.currentDestinationFeature[0]
|
|
.location_id!);
|
|
saveGameState();
|
|
ExternalService()
|
|
.StartRogaining()
|
|
.then((value){
|
|
Get.back();
|
|
});
|
|
},
|
|
child: Text(
|
|
// start
|
|
indexController
|
|
.currentDestinationFeature[
|
|
0]
|
|
.checkedin !=
|
|
null ||
|
|
indexController
|
|
.currentDestinationFeature[
|
|
0]
|
|
.checkedin ==
|
|
true
|
|
? "ロゲイニングを開始"
|
|
: "間違った目的地..."))
|
|
: Container(),
|
|
),
|
|
Obx(
|
|
() => destinationController.is_at_goal.value ==
|
|
true &&
|
|
destinationController.rogaining_counted ==
|
|
true
|
|
? ElevatedButton(
|
|
onPressed: () {
|
|
Get.toNamed(AppPages.CAMERA_PAGE);
|
|
Get.back();
|
|
},
|
|
child: Text(
|
|
//goal
|
|
indexController
|
|
.currentDestinationFeature[
|
|
0]
|
|
.checkedin !=
|
|
null ||
|
|
indexController
|
|
.currentDestinationFeature[
|
|
0]
|
|
.checkedin ==
|
|
true
|
|
? "ロゲイニングを終える"
|
|
: "間違った目的地 ..."))
|
|
: Container(),
|
|
),
|
|
],
|
|
),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
children: [
|
|
ElevatedButton(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Theme.of(context)
|
|
.colorScheme
|
|
.onPrimaryContainer),
|
|
onPressed: () async {
|
|
Get.back();
|
|
print("---- go to ----");
|
|
GeoJsonFeature<GeoJsonMultiPoint> mp =
|
|
indexController.currentFeature[0]
|
|
as GeoJsonFeature<GeoJsonMultiPoint>;
|
|
Position position =
|
|
await Geolocator.getCurrentPosition(
|
|
desiredAccuracy:
|
|
LocationAccuracy.bestForNavigation,
|
|
forceAndroidLocationManager: true);
|
|
print("------- position -------- $position");
|
|
Destination ds = Destination(
|
|
lat: position.latitude,
|
|
lon: position.longitude);
|
|
|
|
Destination tp = Destination(
|
|
lat: mp.geometry!.geoSerie!.geoPoints[0]
|
|
.latitude,
|
|
lon: mp.geometry!.geoSerie!.geoPoints[0]
|
|
.longitude);
|
|
|
|
destinationController
|
|
.destinationMatrixFromCurrentPoint([ds, tp]);
|
|
},
|
|
child: Text(
|
|
"ここへ行く",
|
|
style: TextStyle(
|
|
color:
|
|
Theme.of(context).colorScheme.onPrimary),
|
|
)),
|
|
SizedBox(
|
|
width: 10,
|
|
),
|
|
|
|
|
|
// forced start / checkin
|
|
_distance_to_dest <= 100 ?
|
|
ElevatedButton(
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor:
|
|
Theme.of(context).colorScheme.secondary),
|
|
onPressed: () async {
|
|
print("~~~~ manual checkin button ~~~~");
|
|
if (destination.cp == -1) {
|
|
destinationController.is_in_rog.value = true;
|
|
destinationController.addToRogaining(
|
|
destinationController.current_lat,
|
|
destinationController.current_lon,
|
|
destination.location_id!);
|
|
saveGameState();
|
|
ExternalService()
|
|
.StartRogaining()
|
|
.then((value) => Get.back());
|
|
} else {
|
|
await destinationController.CallforCheckin(destination);
|
|
}
|
|
},
|
|
child: Text(
|
|
destinationController
|
|
.festuretoDestination(
|
|
indexController
|
|
.currentFeature[0])
|
|
.cp ==
|
|
-1
|
|
? "ロゲ開始"
|
|
: "チェックイン",
|
|
style: TextStyle(
|
|
color: Theme.of(context)
|
|
.colorScheme
|
|
.onSecondary))):
|
|
|
|
Container()
|
|
,
|
|
],
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
indexController.currentDestinationFeature
|
|
.isNotEmpty &&
|
|
destinationController
|
|
.is_in_checkin.value ==
|
|
true
|
|
? Container()
|
|
: FutureBuilder<Widget>(
|
|
future: wantToGo(context),
|
|
builder: (context, snapshot) {
|
|
return Container(
|
|
child: snapshot.data,
|
|
);
|
|
},
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["location_name"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["location_name"]
|
|
as String)
|
|
.isNotEmpty
|
|
? Flexible(
|
|
child: Text(indexController
|
|
.currentFeature[0]
|
|
.properties!["location_name"]))
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(
|
|
height: 8.0,
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
const Icon(Icons.roundabout_left),
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["address"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["address"] as String)
|
|
.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"address".tr,
|
|
indexController.currentFeature[0]
|
|
.properties!["address"] ??
|
|
'')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
const Icon(Icons.phone),
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["phone"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["phone"] as String)
|
|
.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"telephone".tr,
|
|
indexController.currentFeature[0]
|
|
.properties!["phone"] ??
|
|
'')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
const Icon(Icons.email),
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["email"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["email"] as String)
|
|
.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"email".tr,
|
|
indexController.currentFeature[0]
|
|
.properties!["email"] ??
|
|
'')
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
const Icon(Icons.language),
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["webcontents"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["webcontents"] as String)
|
|
.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"web".tr,
|
|
indexController.currentFeature[0]
|
|
.properties!["webcontents"] ??
|
|
'',
|
|
isurl: true)
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
indexController.currentFeature[0]
|
|
.properties!["remark"] !=
|
|
null &&
|
|
(indexController.currentFeature[0]
|
|
.properties!["remark"] as String)
|
|
.isNotEmpty
|
|
? getDetails(
|
|
context,
|
|
"remarks".tr,
|
|
indexController.currentFeature[0]
|
|
.properties!["remark"] ??
|
|
'',
|
|
isurl: false)
|
|
: const SizedBox(
|
|
width: 0.0,
|
|
height: 0,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
// Text('${TextUtils.getDisplayText(indexController.currentFeature[0].properties!["cp"].toString())} - id: ${TextUtils.getDisplayText(indexController.currentFeature[0].properties!["checkin_point"].toString())}'),
|
|
],
|
|
),
|
|
)),
|
|
const SizedBox(
|
|
height: 60.0,
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<Widget> wantToGo(BuildContext context) async {
|
|
bool _selected = false;
|
|
print(
|
|
'---target-- ${indexController.currentFeature[0].properties!["location_id"]}----');
|
|
for (Destination d in destinationController.destinations) {
|
|
print('---- ${d.location_id.toString()} ----');
|
|
if (d.location_id ==
|
|
indexController.currentFeature[0].properties!["location_id"]) {
|
|
_selected = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
DatabaseHelper db = DatabaseHelper.instance;
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
// indexController.rog_mode == 0 ?
|
|
// // IconButton(
|
|
// // icon: Icon(Icons.pin_drop_sharp, size: 32, color: _selected == true ? Colors.amber : Colors.blue,),
|
|
// // onPressed: (){
|
|
// // if(_selected){
|
|
// // // show remove from destination
|
|
// // Get.defaultDialog(
|
|
// // title: "本当にこのポイントを通過順から外しますか?",
|
|
// // middleText: "場所は目的地リストから削除されます",
|
|
// // backgroundColor: Colors.blue.shade300,
|
|
// // titleStyle: TextStyle(color: Colors.white),
|
|
// // middleTextStyle: TextStyle(color: Colors.white),
|
|
// // textConfirm: "はい",
|
|
// // textCancel: "いいえ",
|
|
// // cancelTextColor: Colors.white,
|
|
// // confirmTextColor: Colors.blue,
|
|
// // buttonColor: Colors.white,
|
|
// // barrierDismissible: false,
|
|
// // radius: 10,
|
|
// // content: Column(
|
|
// // children: [
|
|
// // ],
|
|
// // ),
|
|
// // onConfirm: (){
|
|
// // int _id = indexController.currentFeature[0].properties!["location_id"];
|
|
// // Destination? d = destinationController.destinationById(_id);
|
|
// // print('--- des id is : ${d} -----');
|
|
// // if(d != null) {
|
|
// // //print('--- des id is : ${d.location_id} -----');
|
|
// // destinationController.deleteDestination(d);
|
|
// // Get.back();
|
|
// // Get.back();
|
|
// // Get.snackbar("追加した", "場所が削除されました");
|
|
// // }
|
|
// // }
|
|
// // );
|
|
// // return;
|
|
// // }
|
|
// // // show add to destination
|
|
// // Get.defaultDialog(
|
|
// // title: "この場所を登録してもよろしいですか",
|
|
// // middleText: "ロケーションがロガニング リストに追加されます",
|
|
// // backgroundColor: Colors.blue.shade300,
|
|
// // titleStyle: TextStyle(color: Colors.white),
|
|
// // middleTextStyle: TextStyle(color: Colors.white),
|
|
// // textConfirm: "はい",
|
|
// // textCancel: "いいえ",
|
|
// // cancelTextColor: Colors.white,
|
|
// // confirmTextColor: Colors.blue,
|
|
// // buttonColor: Colors.white,
|
|
// // barrierDismissible: false,
|
|
// // radius: 10,
|
|
// // content: Column(
|
|
// // children: [
|
|
// // ],
|
|
// // ),
|
|
// // onConfirm: (){
|
|
// // GeoJsonMultiPoint mp = indexController.currentFeature[0].geometry as GeoJsonMultiPoint;
|
|
// // LatLng pt = LatLng(mp.geoSerie!.geoPoints[0].latitude, mp.geoSerie!.geoPoints[0].longitude);
|
|
|
|
// // print("----- want to go sub location is ---- ${indexController.currentFeature[0].properties!["sub_loc_id"]} -----");
|
|
|
|
// // Destination dest = Destination(
|
|
// // name: indexController.currentFeature[0].properties!["location_name"],
|
|
// // address: indexController.currentFeature[0].properties!["address"],
|
|
// // phone: indexController.currentFeature[0].properties!["phone"],
|
|
// // email: indexController.currentFeature[0].properties!["email"],
|
|
// // webcontents: indexController.currentFeature[0].properties!["webcontents"],
|
|
// // videos: indexController.currentFeature[0].properties!["videos"],
|
|
// // category: indexController.currentFeature[0].properties!["category"],
|
|
// // series: 1,
|
|
// // lat: pt.latitude,
|
|
// // lon: pt.longitude,
|
|
// // sub_loc_id: indexController.currentFeature[0].properties!["sub_loc_id"],
|
|
// // location_id: indexController.currentFeature[0].properties!["location_id"],
|
|
// // list_order: 1,
|
|
// // photos: indexController.currentFeature[0].properties!["photos"],
|
|
// // checkin_radious: indexController.currentFeature[0].properties!["checkin_radius"],
|
|
// // auto_checkin: indexController.currentFeature[0].properties!["auto_checkin"] == true ? 1 : 0,
|
|
// // cp: indexController.currentFeature[0].properties!["cp"],
|
|
// // checkin_point: indexController.currentFeature[0].properties!["checkin_point"],
|
|
// // buy_point: indexController.currentFeature[0].properties!["buy_point"],
|
|
// // selected: false,
|
|
// // checkedin: false,
|
|
// // hidden_location: indexController.currentFeature[0].properties!["hidden_location"] == true ?1 : 0
|
|
// // );
|
|
// // destinationController.addDestinations(dest);
|
|
// // Get.back();
|
|
// // Get.back();
|
|
// // Get.snackbar("追加した", "場所が追加されました");
|
|
// // }
|
|
// // );
|
|
|
|
// // },
|
|
// // ):
|
|
// // Container(),
|
|
const SizedBox(
|
|
width: 8.0,
|
|
),
|
|
Obx((() => indexController.rog_mode == 1
|
|
? ElevatedButton(
|
|
onPressed: () async {
|
|
Destination dest =
|
|
indexController.currentDestinationFeature[0];
|
|
print("~~~~ before checking button ~~~~");
|
|
//print("------ curent destination is ${dest!.checkedIn}-------");
|
|
destinationController.makeCheckin(
|
|
dest, !dest.checkedin!, "");
|
|
},
|
|
child: indexController
|
|
.currentDestinationFeature[0].checkedin ==
|
|
false
|
|
? const Text("チェックイン")
|
|
: const Text("チェックアウト"))
|
|
: Container())),
|
|
],
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget getCheckin(BuildContext context) {
|
|
//print("------ currentAction ----- ${indexController.currentAction}-----");
|
|
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
indexController.currentAction[0][0]["checkin"] == false
|
|
? Column(
|
|
children: [
|
|
Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
children: [
|
|
ElevatedButton(
|
|
child: const Text("Image"),
|
|
onPressed: () {
|
|
final ImagePicker _picker = ImagePicker();
|
|
_picker
|
|
.pickImage(source: ImageSource.camera)
|
|
.then((value) {
|
|
//print("----- image---- ${value!.path}");
|
|
});
|
|
},
|
|
)
|
|
],
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
if (indexController.currentAction.isNotEmpty) {
|
|
//print(indexController.currentAction[0]);
|
|
indexController.currentAction[0][0]["checkin"] =
|
|
true;
|
|
Map<String, dynamic> temp =
|
|
Map<String, dynamic>.from(
|
|
indexController.currentAction[0][0]);
|
|
indexController.currentAction.clear();
|
|
//print("---temp---${temp}");
|
|
indexController.currentAction.add([temp]);
|
|
}
|
|
indexController.makeAction(context);
|
|
},
|
|
child: Text("checkin".tr))
|
|
],
|
|
)
|
|
: ElevatedButton(
|
|
onPressed: () {
|
|
if (indexController.currentAction.isNotEmpty) {
|
|
//print(indexController.currentAction[0]);
|
|
indexController.currentAction[0][0]["checkin"] = false;
|
|
Map<String, dynamic> temp = Map<String, dynamic>.from(
|
|
indexController.currentAction[0][0]);
|
|
indexController.currentAction.clear();
|
|
//print("---temp---${temp}");
|
|
indexController.currentAction.add([temp]);
|
|
}
|
|
indexController.makeAction(context);
|
|
},
|
|
child: const Icon(Icons.favorite, color: Colors.red),
|
|
)
|
|
],
|
|
)
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget getDetails(BuildContext context, String label, String text,
|
|
{bool isurl = false}) {
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Text(label),
|
|
const SizedBox(
|
|
width: 10.0,
|
|
),
|
|
InkWell(
|
|
onTap: () {
|
|
if (isurl) {
|
|
if (indexController.rog_mode == 0) {
|
|
_launchURL(indexController
|
|
.currentFeature[0].properties!["webcontents"]);
|
|
} else {
|
|
indexController.currentDestinationFeature[0].webcontents;
|
|
}
|
|
}
|
|
},
|
|
child: SizedBox(
|
|
width: MediaQuery.of(context).size.width - (MediaQuery.of(context).size.width * 0.28),
|
|
child: Text(
|
|
text,
|
|
textDirection: TextDirection.ltr,
|
|
textAlign: TextAlign.justify,
|
|
style: TextStyle(
|
|
color: isurl ? Colors.blue : Colors.black,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|