ログインをメアドに変更

This commit is contained in:
2024-07-15 06:54:02 +09:00
parent ae05a8bbcd
commit 616f87c0c5
11 changed files with 140 additions and 102 deletions

View File

@ -5,6 +5,7 @@ import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/services/auth_service.dart';
import 'package:rogapp/utils/database_helper.dart';
import 'package:rogapp/widgets/debug_widget.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:rogapp/pages/WebView/WebView_page.dart';
@ -16,6 +17,8 @@ class DrawerPage extends StatelessWidget {
final IndexController indexController = Get.find<IndexController>();
LogManager logManager = LogManager();
// 要検討URLの起動に失敗した場合のエラーハンドリングが不十分です。適切なエラーメッセージを表示するなどの処理を追加してください。
//
/*
@ -26,6 +29,7 @@ class DrawerPage extends StatelessWidget {
void _launchURL(BuildContext context,String urlString) async {
try {
logManager.addOperationLog('User clicked ${urlString} on the drawer');
Uri url = Uri.parse(urlString);
if (await canLaunchUrl(url)) {
await launchUrl(url);
@ -52,14 +56,8 @@ class DrawerPage extends StatelessWidget {
Widget build(BuildContext context) {
return SafeArea(
child: Drawer(
// Add a ListView to the drawer. This ensures the user can scroll
// through the options in the drawer if there isn't enough vertical
// space to fit everything.
child: Column(
children: [
// 最初のアイテムは、ユーザーのログイン状態に応じて表示が変わります。
// ユーザーがログインしていない場合は、"drawer_title".trというテキストを表示します。
// ユーザーがログインしている場合は、ユーザーのメールアドレスを表示します。
Container(
height: 100,
color: Colors.amber,
@ -81,9 +79,6 @@ class DrawerPage extends StatelessWidget {
),
)),
),
// 次に、IndexControllerのcurrentUserリストが空かどうかに応じて、ログインまたはログアウトのアイテムを表示します。
// currentUserリストが空の場合は、"login".trというテキストのログインアイテムを表示し、タップするとAppPages.LOGINにナビゲートします。
// currentUserリストが空でない場合は、"logout".trというテキストのログアウトアイテムを表示し、タップするとindexController.logout()を呼び出してログアウトし、AppPages.LOGINにナビゲートします。
Obx(() => indexController.currentUser.isEmpty
? ListTile(
leading: const Icon(Icons.login),
@ -100,8 +95,6 @@ class DrawerPage extends StatelessWidget {
Get.toNamed(AppPages.LOGIN);
},
)),
// パスワード変更のアイテムは、ユーザーがログインしている場合にのみ表示されます。
// "change_password".trというテキストを表示し、タップするとAppPages.CHANGE_PASSWORDにナビゲートします。
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.password),
@ -114,8 +107,6 @@ class DrawerPage extends StatelessWidget {
width: 0,
height: 0,
),
// サインアップのアイテムは、ユーザーがログインしていない場合にのみ表示されます。
// "sign_up".trというテキストを表示し、タップするとAppPages.REGISTERにナビゲートします。
indexController.currentUser.isEmpty
? ListTile(
leading: const Icon(Icons.person),
@ -128,20 +119,19 @@ class DrawerPage extends StatelessWidget {
width: 0,
height: 0,
),
// リセットのアイテムは、ユーザーがログインしている場合にのみ表示されます。
// タップすると、確認ダイアログを表示し、ユーザーがリセットを確認するとDestinationControllerのresetRogaining()メソッドを呼び出してゲームデータをリセットします。
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.password),
title: const Text("リセット"),
title: Text('reset_button'.tr),
onTap: () {
logManager.addOperationLog('User clicked RESET button on the drawer');
// 要検討:リセット操作の確認メッセージをローカライズすることを検討してください。
//
Get.defaultDialog(
title: "リセットしますがよろしいですか?",
middleText: "これにより、すべてのゲーム データが削除され、すべての状態が削除されます",
textConfirm: "確認する",
textCancel: "キャンセルする",
title: "reset_title".tr,
middleText: "reset_message".tr,
textConfirm: "confirm".tr,
textCancel: "cancel".tr,
onCancel: () => Get.back(),
onConfirm: () async {
DestinationController destinationController =
@ -157,8 +147,8 @@ class DrawerPage extends StatelessWidget {
//destinationController.deleteDBDestinations();
Get.back();
Get.snackbar(
"リセット完了",
"すべてリセットされました。ロゲ開始から再開して下さい。",
"reset_done".tr,
"reset_explain".tr,
backgroundColor: Colors.green,
colorText: Colors.white,
duration: const Duration(seconds: 3),
@ -171,20 +161,19 @@ class DrawerPage extends StatelessWidget {
width: 0,
height: 0,
),
// アカウント削除のアイテムは、ユーザーがログインしている場合にのみ表示されます。
// "delete_account".trというテキストを表示し、タップするとAuthService.deleteUser()を呼び出してアカウントを削除し、AppPages.TRAVELにナビゲートします。
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.delete_forever),
title: Text("delete_account".tr),
onTap: () {
Get.defaultDialog(
title: "アカウントを削除しますがよろしいですか?",
middleText: "これにより、アカウント情報とすべてのゲーム データが削除され、すべての状態が削除されます",
textConfirm: "確認する",
textCancel: "キャンセルする",
title: "delete_account_title".tr,
middleText: "delete_account_middle".tr,
textConfirm: "confirm".tr,
textCancel: "cancel".tr,
onCancel: () => Get.back(),
onConfirm: () {
logManager.addOperationLog('User clicked Confirm button on the account delete dialog');
String token = indexController.currentUser[0]['token'];
AuthService.deleteUser(token).then((value) {
if (value.isNotEmpty) {
@ -205,53 +194,6 @@ class DrawerPage extends StatelessWidget {
width: 0,
height: 0,
),
/*
// ユーザーデータ削除のアイテムは、ユーザーがログインしている場合にのみ表示されます。
// タップすると、AuthService.deleteUser()を呼び出してユーザーデータを削除します。
indexController.currentUser.isNotEmpty
? ListTile(
// 要検討:アカウント削除のリクエストが失敗した場合のエラーハンドリングを追加することをお勧めします。
//
leading: const Icon(Icons.delete_forever),
title: Text("ユーザーデータを削除する".tr),
onTap: () {
Get.defaultDialog(
title: "アカウントを削除しますがよろしいですか?",
middleText: "これにより、アカウント情報とすべてのゲーム データが削除され、すべての状態が削除されます",
textConfirm: "確認する",
textCancel: "キャンセルする",
onCancel: () => Get.back(),
onConfirm: () {
String token = indexController.currentUser[0]['token'];
AuthService.deleteUser(token).then((value) {
Get.snackbar("ユーザーデータを削除する",
"データを削除するためにユーザーの同意が設定されています アプリとサーバーでユーザーデータが削除されました");
});
});
},
)
: const SizedBox(
width: 0,
height: 0,
),
// ListTile(
// leading: const Icon(Icons.person),
// title: Text("profile".tr),
// onTap: (){},
// ),
// ListTile(
// leading: const Icon(Icons.route),
// title: Text("recommended_route".tr),
// onTap: (){},
// ),
// ListTile(
// leading: const Icon(Icons.favorite_rounded),
// title: Text("point_rank".tr),
// onTap: (){},
// ),
*/
// "rog_web".trというテキストのアイテムは、ユーザーがログインしている場合にのみ表示されます。
// タップすると、_launchURL()メソッドを呼び出して外部のウェブサイトを開きます。
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.featured_video),
@ -264,8 +206,6 @@ class DrawerPage extends StatelessWidget {
width: 0,
height: 0,
),
// "privacy".trというテキストのアイテムは、常に表示されます。
// タップすると、_launchURL()メソッドを呼び出してプライバシーポリシーのURLを開きます。
ListTile(
leading: const Icon(Icons.privacy_tip),
title: Text("privacy".tr),
@ -275,7 +215,7 @@ class DrawerPage extends StatelessWidget {
),
ListTile(
leading: const Icon(Icons.settings),
title: const Text('設定'),
title: Text('open_settings'.tr),
onTap: () {
Get.back(); // ドロワーを閉じる
Get.toNamed(Routes.SETTINGS);
@ -284,7 +224,7 @@ class DrawerPage extends StatelessWidget {
),
ListTile(
leading: const Icon(Icons.developer_mode),
title: const Text('開発者メニュー'),
title: const Text('open_settings'),
onTap: () {
Get.back(); // ドロワーを閉じる
Get.toNamed('/debug'); // デバッグ画面に遷移