Fix all features
This commit is contained in:
@ -1628,7 +1628,7 @@ class DestinationController extends GetxController {
|
|||||||
// 地図のイベントリスナーを設定
|
// 地図のイベントリスナーを設定
|
||||||
indexController.mapController.mapEventStream.listen((MapEvent mapEvent) {
|
indexController.mapController.mapEventStream.listen((MapEvent mapEvent) {
|
||||||
if (mapEvent is MapEventMoveEnd) {
|
if (mapEvent is MapEventMoveEnd) {
|
||||||
indexController.loadLocationsBound();
|
indexController.loadLocationsBound(indexController.currentUser[0]["user"]["event_code"]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1653,7 +1653,7 @@ class DestinationController extends GetxController {
|
|||||||
);
|
);
|
||||||
indexController.currentBound.clear();
|
indexController.currentBound.clear();
|
||||||
indexController.currentBound.add(bnds);
|
indexController.currentBound.add(bnds);
|
||||||
indexController.loadLocationsBound();
|
indexController.loadLocationsBound(indexController.currentUser[0]["user"]["event_code"]);
|
||||||
centerMapToCurrentLocation();
|
centerMapToCurrentLocation();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -170,7 +170,7 @@ class DestinationMapPage extends StatelessWidget {
|
|||||||
indexController.currentBound.clear();
|
indexController.currentBound.clear();
|
||||||
indexController.currentBound.add(bounds);
|
indexController.currentBound.add(bounds);
|
||||||
if (indexController.currentUser.isEmpty) {
|
if (indexController.currentUser.isEmpty) {
|
||||||
indexController.loadLocationsBound();
|
indexController.loadLocationsBound(indexController.currentUser[0]["user"]["event_code"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -79,6 +79,33 @@ class DrawerPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
ListTile(
|
||||||
|
leading: Icon(Icons.group),
|
||||||
|
title: Text('チーム管理'),
|
||||||
|
onTap: () {
|
||||||
|
Get.back();
|
||||||
|
Get.toNamed(AppPages.TEAM_LIST);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
leading: Icon(Icons.event),
|
||||||
|
title: Text('エントリー管理'),
|
||||||
|
onTap: () {
|
||||||
|
Get.back();
|
||||||
|
Get.toNamed(AppPages.ENTRY_LIST);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
leading: Icon(Icons.event),
|
||||||
|
title: Text('イベント参加'),
|
||||||
|
onTap: () {
|
||||||
|
Get.back(); // ドロワーを閉じる
|
||||||
|
Get.toNamed(AppPages.EVENT_ENTRY);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
Obx(() => indexController.currentUser.isEmpty
|
Obx(() => indexController.currentUser.isEmpty
|
||||||
? ListTile(
|
? ListTile(
|
||||||
leading: const Icon(Icons.login),
|
leading: const Icon(Icons.login),
|
||||||
@ -206,22 +233,7 @@ class DrawerPage extends StatelessWidget {
|
|||||||
width: 0,
|
width: 0,
|
||||||
height: 0,
|
height: 0,
|
||||||
),
|
),
|
||||||
ListTile(
|
|
||||||
leading: Icon(Icons.group),
|
|
||||||
title: Text('チーム管理'),
|
|
||||||
onTap: () {
|
|
||||||
Get.back();
|
|
||||||
Get.toNamed(AppPages.TEAM_LIST);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
ListTile(
|
|
||||||
leading: Icon(Icons.event),
|
|
||||||
title: Text('エントリー管理'),
|
|
||||||
onTap: () {
|
|
||||||
Get.back();
|
|
||||||
Get.toNamed(AppPages.ENTRY_LIST);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.privacy_tip),
|
leading: const Icon(Icons.privacy_tip),
|
||||||
title: Text("privacy".tr),
|
title: Text("privacy".tr),
|
||||||
|
|||||||
9
lib/pages/entry/event_entries_binding.dart
Normal file
9
lib/pages/entry/event_entries_binding.dart
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:rogapp/pages/entry/event_entries_controller.dart';
|
||||||
|
|
||||||
|
class EventEntriesBinding extends Bindings {
|
||||||
|
@override
|
||||||
|
void dependencies() {
|
||||||
|
Get.lazyPut<EventEntriesController>(() => EventEntriesController());
|
||||||
|
}
|
||||||
|
}
|
||||||
48
lib/pages/entry/event_entries_controller.dart
Normal file
48
lib/pages/entry/event_entries_controller.dart
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:rogapp/model/entry.dart';
|
||||||
|
import 'package:rogapp/pages/index/index_controller.dart';
|
||||||
|
import 'package:rogapp/services/api_service.dart';
|
||||||
|
|
||||||
|
class EventEntriesController extends GetxController {
|
||||||
|
final ApiService _apiService = Get.find<ApiService>();
|
||||||
|
final IndexController _indexController = Get.find<IndexController>();
|
||||||
|
|
||||||
|
final entries = <Entry>[].obs;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
fetchEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> fetchEntries() async {
|
||||||
|
try {
|
||||||
|
final fetchedEntries = await _apiService.getEntries();
|
||||||
|
entries.assignAll(fetchedEntries);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error fetching entries: $e');
|
||||||
|
// エラー処理を追加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> joinEvent(Entry entry) async {
|
||||||
|
try {
|
||||||
|
|
||||||
|
final userid = _indexController.currentUser[0]["user"]["id"];
|
||||||
|
|
||||||
|
await _apiService.updateUserInfo(userid,entry);
|
||||||
|
|
||||||
|
_indexController.currentUser[0]["user"]["event_code"] = entry.event.eventName;
|
||||||
|
_indexController.currentUser[0]["user"]["team_name"] = entry.team.teamName;
|
||||||
|
_indexController.currentUser[0]["user"]["group"] = entry.team.category.categoryName;
|
||||||
|
_indexController.currentUser[0]["user"]["zekken_number"] = entry.team.zekkenNumber;
|
||||||
|
|
||||||
|
Get.back(); // エントリー一覧ページを閉じる
|
||||||
|
//_indexController.isLoading.value = true;
|
||||||
|
_indexController.reloadMap(entry.event.eventName); // マップをリロード
|
||||||
|
} catch (e) {
|
||||||
|
print('Error joining event: $e');
|
||||||
|
// エラー処理を追加
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
lib/pages/entry/event_entries_page.dart
Normal file
23
lib/pages/entry/event_entries_page.dart
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:rogapp/pages/entry/event_entries_controller.dart';
|
||||||
|
|
||||||
|
class EventEntriesPage extends GetView<EventEntriesController> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(title: Text('イベント参加')),
|
||||||
|
body: Obx(() => ListView.builder(
|
||||||
|
itemCount: controller.entries.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final entry = controller.entries[index];
|
||||||
|
return ListTile(
|
||||||
|
title: Text(entry.event.eventName),
|
||||||
|
subtitle: Text('${entry.category.categoryName} - ${entry.date}'),
|
||||||
|
onTap: () => controller.joinEvent(entry),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ import 'package:geolocator/geolocator.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:latlong2/latlong.dart';
|
import 'package:latlong2/latlong.dart';
|
||||||
import 'package:rogapp/model/destination.dart';
|
import 'package:rogapp/model/destination.dart';
|
||||||
|
import 'package:rogapp/model/entry.dart';
|
||||||
import 'package:rogapp/pages/destination/destination_controller.dart';
|
import 'package:rogapp/pages/destination/destination_controller.dart';
|
||||||
import 'package:rogapp/routes/app_pages.dart';
|
import 'package:rogapp/routes/app_pages.dart';
|
||||||
import 'package:rogapp/services/auth_service.dart';
|
import 'package:rogapp/services/auth_service.dart';
|
||||||
@ -59,6 +60,9 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
|
|
||||||
String? userToken;
|
String? userToken;
|
||||||
|
|
||||||
|
//late final ApiService _apiService;
|
||||||
|
final ApiService _apiService = Get.find<ApiService>();
|
||||||
|
|
||||||
// mode = 0 is map mode, mode = 1 list mode
|
// mode = 0 is map mode, mode = 1 list mode
|
||||||
var mode = 0.obs;
|
var mode = 0.obs;
|
||||||
|
|
||||||
@ -79,6 +83,16 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
final Connectivity _connectivity = Connectivity();
|
final Connectivity _connectivity = Connectivity();
|
||||||
late StreamSubscription<ConnectivityResult> _connectivitySubscription;
|
late StreamSubscription<ConnectivityResult> _connectivitySubscription;
|
||||||
|
|
||||||
|
final Rx<DateTime> lastUserUpdateTime = DateTime.now().obs;
|
||||||
|
|
||||||
|
/*
|
||||||
|
void updateUserInfo(Map<String, dynamic> newUserInfo) {
|
||||||
|
currentUser.clear();
|
||||||
|
currentUser.add(newUserInfo);
|
||||||
|
lastUserUpdateTime.value = DateTime.now();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void toggleMode() {
|
void toggleMode() {
|
||||||
if (mode.value == 0) {
|
if (mode.value == 0) {
|
||||||
mode += 1;
|
mode += 1;
|
||||||
@ -202,6 +216,7 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
if (currentUser.isNotEmpty) {
|
if (currentUser.isNotEmpty) {
|
||||||
// 既にログインしている場合
|
// 既にログインしている場合
|
||||||
await Get.putAsync(() => ApiService().init());
|
await Get.putAsync(() => ApiService().init());
|
||||||
|
//await Get.putAsync(() => ApiService().init());
|
||||||
// 必要に応じて追加の初期化処理
|
// 必要に応じて追加の初期化処理
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,7 +507,7 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
saveToDevice(currentUser[0]["token"]);
|
saveToDevice(currentUser[0]["token"]);
|
||||||
}
|
}
|
||||||
isLoading.value = false;
|
isLoading.value = false;
|
||||||
loadLocationsBound();
|
loadLocationsBound( currentUser[0]["user"]["even_code"]);
|
||||||
if (currentUser.isNotEmpty) {
|
if (currentUser.isNotEmpty) {
|
||||||
rogMode.value = 0;
|
rogMode.value = 0;
|
||||||
restoreGame();
|
restoreGame();
|
||||||
@ -577,7 +592,7 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
// 要検討:Future.delayedを使用して非同期処理を待たずに先に進むようにしていますが、
|
// 要検討:Future.delayedを使用して非同期処理を待たずに先に進むようにしていますが、
|
||||||
// これによってメモリリークが発生する可能性があります。非同期処理の結果を適切に処理することを検討してください。
|
// これによってメモリリークが発生する可能性があります。非同期処理の結果を適切に処理することを検討してください。
|
||||||
//
|
//
|
||||||
void loadLocationsBound() async {
|
void loadLocationsBound(String eventCode) async {
|
||||||
if (isCustomAreaSelected.value == true) {
|
if (isCustomAreaSelected.value == true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -609,12 +624,13 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
currentBound.clear();
|
currentBound.clear();
|
||||||
currentBound.add(bounds);
|
currentBound.add(bounds);
|
||||||
|
|
||||||
isLoading.value = true; // ローディング状態をtrueに設定
|
//isLoading.value = true; // ローディング状態をtrueに設定
|
||||||
|
|
||||||
//print("bounds --- (${bounds.southWest.latitude},${bounds.southWest.longitude}),(${bounds.northWest.latitude},${bounds.northWest.longitude}),(${bounds.northEast.latitude},${bounds.northEast.longitude}),(${bounds.southEast.latitude},${bounds.southEast.longitude})");
|
//print("bounds --- (${bounds.southWest.latitude},${bounds.southWest.longitude}),(${bounds.northWest.latitude},${bounds.northWest.longitude}),(${bounds.northEast.latitude},${bounds.northEast.longitude}),(${bounds.southEast.latitude},${bounds.southEast.longitude})");
|
||||||
|
|
||||||
// 要検討:APIからのレスポンスがnullの場合のエラーハンドリングが不十分です。適切なエラーメッセージを表示するなどの処理を追加してください。
|
// 要検討:APIからのレスポンスがnullの場合のエラーハンドリングが不十分です。適切なエラーメッセージを表示するなどの処理を追加してください。
|
||||||
try {
|
try {
|
||||||
|
final eventCode = currentUser[0]["user"]["event_code"];
|
||||||
final value = await LocationService.loadLocationsBound(
|
final value = await LocationService.loadLocationsBound(
|
||||||
bounds.southWest.latitude,
|
bounds.southWest.latitude,
|
||||||
bounds.southWest.longitude,
|
bounds.southWest.longitude,
|
||||||
@ -624,7 +640,8 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
bounds.northEast.longitude,
|
bounds.northEast.longitude,
|
||||||
bounds.southEast.latitude,
|
bounds.southEast.latitude,
|
||||||
bounds.southEast.longitude,
|
bounds.southEast.longitude,
|
||||||
cat
|
cat,
|
||||||
|
eventCode
|
||||||
);
|
);
|
||||||
/*
|
/*
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
@ -728,4 +745,11 @@ class IndexController extends GetxController with WidgetsBindingObserver {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void reloadMap( String eventCode ) {
|
||||||
|
// マップをリロードするロジックを実装
|
||||||
|
// 例: 現在の位置情報を再取得し、マップを更新する
|
||||||
|
loadLocationsBound( eventCode );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,6 +37,10 @@ import 'package:rogapp/pages/entry/entry_list_page.dart';
|
|||||||
import 'package:rogapp/pages/entry/entry_detail_page.dart';
|
import 'package:rogapp/pages/entry/entry_detail_page.dart';
|
||||||
import 'package:rogapp/pages/entry/entry_binding.dart';
|
import 'package:rogapp/pages/entry/entry_binding.dart';
|
||||||
|
|
||||||
|
import 'package:rogapp/pages/entry/event_entries_page.dart';
|
||||||
|
import 'package:rogapp/pages/entry/event_entries_binding.dart';
|
||||||
|
|
||||||
|
|
||||||
part 'app_routes.dart';
|
part 'app_routes.dart';
|
||||||
|
|
||||||
class AppPages {
|
class AppPages {
|
||||||
@ -70,6 +74,7 @@ class AppPages {
|
|||||||
static const MEMBER_DETAIL = Routes.MEMBER_DETAIL;
|
static const MEMBER_DETAIL = Routes.MEMBER_DETAIL;
|
||||||
static const ENTRY_LIST = Routes.ENTRY_LIST;
|
static const ENTRY_LIST = Routes.ENTRY_LIST;
|
||||||
static const ENTRY_DETAIL = Routes.ENTRY_DETAIL;
|
static const ENTRY_DETAIL = Routes.ENTRY_DETAIL;
|
||||||
|
static const EVENT_ENTRY = Routes.EVENT_ENTRIES;
|
||||||
|
|
||||||
static final routes = [
|
static final routes = [
|
||||||
GetPage(
|
GetPage(
|
||||||
@ -166,6 +171,11 @@ class AppPages {
|
|||||||
page: () => EntryDetailPage(),
|
page: () => EntryDetailPage(),
|
||||||
binding: EntryBinding(),
|
binding: EntryBinding(),
|
||||||
),
|
),
|
||||||
|
GetPage(
|
||||||
|
name: Routes.EVENT_ENTRIES,
|
||||||
|
page: () => EventEntriesPage(),
|
||||||
|
binding: EventEntriesBinding(),
|
||||||
|
),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -34,4 +34,6 @@ abstract class Routes {
|
|||||||
static const MEMBER_DETAIL = '/member-detail';
|
static const MEMBER_DETAIL = '/member-detail';
|
||||||
static const ENTRY_LIST = '/entry-list';
|
static const ENTRY_LIST = '/entry-list';
|
||||||
static const ENTRY_DETAIL = '/entry-detail';
|
static const ENTRY_DETAIL = '/entry-detail';
|
||||||
|
|
||||||
|
static const EVENT_ENTRIES = '/event-entries';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -466,6 +466,43 @@ class ApiService extends GetxService{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> updateUserInfo(int userId, Entry entry) async {
|
||||||
|
init();
|
||||||
|
getToken();
|
||||||
|
|
||||||
|
final entryId = entry.id;
|
||||||
|
|
||||||
|
DateTime? date = entry.date;
|
||||||
|
String? formattedDate;
|
||||||
|
if (date != null) {
|
||||||
|
formattedDate = DateFormat('yyyy-MM-dd').format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
final response = await http.put(
|
||||||
|
Uri.parse('$baseUrl/userinfo/$userId/'),
|
||||||
|
headers: {
|
||||||
|
'Authorization': 'Token $token',
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
},
|
||||||
|
body: json.encode({
|
||||||
|
'zekken_number': entry.team.zekkenNumber,
|
||||||
|
'event_code': entry.event.eventName,
|
||||||
|
'group': entry.team.category.categoryName,
|
||||||
|
'team_name': entry.team.teamName,
|
||||||
|
'date': formattedDate,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final decodedResponse = utf8.decode(response.bodyBytes);
|
||||||
|
final updatedUserInfo = json.decode(decodedResponse);
|
||||||
|
//Get.find<IndexController>().updateUserInfo(updatedUserInfo);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw Exception('Failed to update entry');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Future<Entry> updateEntry(int entryId, int eventId, int categoryId, DateTime date) async {
|
Future<Entry> updateEntry(int entryId, int eventId, int categoryId, DateTime date) async {
|
||||||
init();
|
init();
|
||||||
getToken();
|
getToken();
|
||||||
|
|||||||
@ -82,59 +82,93 @@ class LocationService {
|
|||||||
double lon3,
|
double lon3,
|
||||||
double lat4,
|
double lat4,
|
||||||
double lon4,
|
double lon4,
|
||||||
String cat) async {
|
String cat,
|
||||||
|
String event_code) async {
|
||||||
//print("-------- in location for bound -------------");
|
//print("-------- in location for bound -------------");
|
||||||
final IndexController indexController = Get.find<IndexController>();
|
final IndexController indexController = Get.find<IndexController>();
|
||||||
String url = "";
|
final updateTime = indexController.lastUserUpdateTime.value;
|
||||||
String serverUrl = ConstValues.currentServer();
|
|
||||||
if (cat.isNotEmpty) {
|
|
||||||
if (indexController.currentUser.isNotEmpty) {
|
|
||||||
bool rog = indexController.currentUser[0]['user']['is_rogaining'];
|
|
||||||
String r = rog == true ? 'True' : 'False';
|
|
||||||
var grp = indexController.currentUser[0]['user']['event_code'];
|
|
||||||
url =
|
|
||||||
'$serverUrl/api/inbound?rog=$r&grp=$grp&ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4&cat=$cat';
|
|
||||||
} else {
|
|
||||||
url =
|
|
||||||
'$serverUrl/api/inbound?ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4&cat=$cat';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (indexController.currentUser.isNotEmpty) {
|
|
||||||
bool rog = indexController.currentUser[0]['user']['is_rogaining'];
|
|
||||||
String r = rog == true ? 'True' : 'False';
|
|
||||||
var grp = indexController.currentUser[0]['user']['event_code'];
|
|
||||||
//print("-------- requested user group $grp -------------");
|
|
||||||
url =
|
|
||||||
'$serverUrl/api/inbound?rog=$r&grp=$grp&ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4';
|
|
||||||
} else {
|
|
||||||
url =
|
|
||||||
'$serverUrl/api/inbound?ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//print('++++++++$url');
|
|
||||||
final response = await http.get(
|
|
||||||
Uri.parse(url),
|
|
||||||
headers: <String, String>{
|
|
||||||
'Content-Type': 'application/json; charset=UTF-8',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
if (response.statusCode == 500) {
|
// ユーザー情報の更新を最大5秒間待つ
|
||||||
return null; //featuresFromGeoJson(utf8.decode(response.bodyBytes));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
try {
|
||||||
DestinationController destinationController =
|
/*
|
||||||
Get.find<DestinationController>();
|
// ユーザー情報の更新を最大5秒間待つ
|
||||||
GeoJSONFeatureCollection cc =
|
final newUpdateTime = await indexController.lastUserUpdateTime.stream
|
||||||
GeoJSONFeatureCollection.fromJSON(utf8.decode(response.bodyBytes));
|
.firstWhere(
|
||||||
if (cc.features.isEmpty) {
|
(time) => time.isAfter(updateTime),
|
||||||
|
orElse: () => updateTime,
|
||||||
|
).timeout(Duration(seconds: 5));
|
||||||
|
|
||||||
|
if (newUpdateTime == updateTime) {
|
||||||
|
print('ユーザー情報の更新がタイムアウトしました');
|
||||||
|
// タイムアウト時の処理(例:エラー表示やリトライ)
|
||||||
return null;
|
return null;
|
||||||
} else {
|
|
||||||
//print("---- feature got from server is ${cc.collection[0].properties} ------");
|
|
||||||
return cc;
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
await indexController.lastUserUpdateTime.stream.firstWhere(
|
||||||
|
(time) => time.isAfter(updateTime),
|
||||||
|
orElse: () => updateTime,
|
||||||
|
).timeout(Duration(seconds: 2), onTimeout: () => updateTime);
|
||||||
|
*/
|
||||||
|
|
||||||
|
String url = "";
|
||||||
|
String serverUrl = ConstValues.currentServer();
|
||||||
|
if (cat.isNotEmpty) {
|
||||||
|
if (indexController.currentUser.isNotEmpty) {
|
||||||
|
bool rog = indexController.currentUser[0]['user']['is_rogaining'];
|
||||||
|
String r = rog == true ? 'True' : 'False';
|
||||||
|
var grp = event_code; //indexController.currentUser[0]['user']['event_code'];
|
||||||
|
print("Group=$grp");
|
||||||
|
url =
|
||||||
|
'$serverUrl/api/inbound?rog=$r&grp=$grp&ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4&cat=$cat';
|
||||||
|
} else {
|
||||||
|
url =
|
||||||
|
'$serverUrl/api/inbound?ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4&cat=$cat';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (indexController.currentUser.isNotEmpty) {
|
||||||
|
bool rog = indexController.currentUser[0]['user']['is_rogaining'];
|
||||||
|
String r = rog == true ? 'True' : 'False';
|
||||||
|
var grp = indexController.currentUser[0]['user']['event_code'];
|
||||||
|
print("-------- requested user group $grp -------------");
|
||||||
|
url =
|
||||||
|
'$serverUrl/api/inbound?rog=$r&grp=$grp&ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4';
|
||||||
|
} else {
|
||||||
|
url =
|
||||||
|
'$serverUrl/api/inbound?ln1=$lon1&la1=$lat1&ln2=$lon2&la2=$lat2&ln3=$lon3&la3=$lat3&ln4=$lon4&la4=$lat4';
|
||||||
|
}
|
||||||
|
print('++++++++$url');
|
||||||
|
final response = await http.get(
|
||||||
|
Uri.parse(url),
|
||||||
|
headers: <String, String>{
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.statusCode == 500) {
|
||||||
|
return null; //featuresFromGeoJson(utf8.decode(response.bodyBytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
DestinationController destinationController =
|
||||||
|
Get.find<DestinationController>();
|
||||||
|
|
||||||
|
GeoJSONFeatureCollection cc =
|
||||||
|
GeoJSONFeatureCollection.fromJSON(utf8.decode(response.bodyBytes));
|
||||||
|
if (cc.features.isEmpty) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
//print("---- feature got from server is ${cc.collection[0].properties} ------");
|
||||||
|
return cc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
print("Error: $e");
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user