Files
rog_app/lib/widgets/current_position_widget.dart

71 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/routes/app_pages.dart'; // これを追加
class CurrentPosition extends StatefulWidget {
const CurrentPosition({super.key});
@override
State<CurrentPosition> createState() => _CurrentPositionState();
}
class _CurrentPositionState extends State<CurrentPosition> {
final DestinationController destinationController =
Get.find<DestinationController>();
void _onLongPress() async {
PermissionStatus status = await Permission.location.status;
if (!status.isGranted) {
await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('位置情報の許可が必要です'),
content: Text('現在位置を表示するには、位置情報の許可が必要です。「設定」からアプリの権限を許可してください。'),
actions: [
TextButton(
child: Text('キャンセル'),
onPressed: () => Navigator.of(context).pop(),
),
TextButton(
child: Text('設定'),
onPressed: () {
Navigator.of(context).pop();
openAppSettings();
},
),
],
);
},
);
} else {
Get.toNamed(AppPages.SETTINGS);
}
}
@override
Widget build(BuildContext context) {
return GestureDetector( // GestureDetectorを追加
onLongPress: _onLongPress, // 長押しイベントを追加
child: Container (
// return Container(
width: 40,
height: 40,
decoration: BoxDecoration(
color: Colors.grey, borderRadius: BorderRadius.circular(20.0)),
child: IconButton(
onPressed: () {
destinationController.centerMapToCurrentLocation();
},
icon: const Icon(
Icons.location_searching,
color: Colors.white,
),
),
),
);
}
}