From d05feabf248a64b395dff1330919be3ca57a65b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?th=E1=BB=8Bnh?= Date: Wed, 26 Feb 2025 13:22:31 +0700 Subject: [PATCH] Fix navigation back to persona profile on chatting with no device --- app/lib/pages/chat/clone_chat_page.dart | 3 +- app/lib/pages/persona/persona_profile.dart | 50 +++++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/app/lib/pages/chat/clone_chat_page.dart b/app/lib/pages/chat/clone_chat_page.dart index 70c533014..0319e1de2 100644 --- a/app/lib/pages/chat/clone_chat_page.dart +++ b/app/lib/pages/chat/clone_chat_page.dart @@ -75,7 +75,8 @@ class CloneChatPageState extends State { height: 28, ), onPressed: () { - Navigator.pop(context); + personaProvider.setRouting(PersonaProfileRouting.no_device); + routeToPage(context, const PersonaProfilePage(), replace: true); }, ), ], diff --git a/app/lib/pages/persona/persona_profile.dart b/app/lib/pages/persona/persona_profile.dart index 660b0ea07..df1c300df 100644 --- a/app/lib/pages/persona/persona_profile.dart +++ b/app/lib/pages/persona/persona_profile.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:friend_private/backend/auth.dart'; import 'package:friend_private/backend/preferences.dart'; import 'package:friend_private/backend/schema/app.dart'; import 'package:friend_private/gen/assets.gen.dart'; +import 'package:friend_private/main.dart'; import 'package:friend_private/pages/chat/clone_chat_page.dart'; import 'package:friend_private/pages/onboarding/wrapper.dart'; import 'package:friend_private/pages/persona/persona_provider.dart'; @@ -112,6 +114,17 @@ class _PersonaProfilePageState extends State { actions: [ // Only show settings icon for create_my_clone or home routing Consumer(builder: (context, personaProvider, _) { + //if (personaProvider.routing == PersonaProfileRouting.no_device) { + // return Padding( + // padding: const EdgeInsets.all(16.0), + // child: GestureDetector( + // onTap: () async { + // _showSignOutDialog(context); + // }, + // child: const Icon(Icons.logout, color: Colors.white, size: 24), + // ), + // ); + //} if (personaProvider.routing == PersonaProfileRouting.create_my_clone || personaProvider.routing == PersonaProfileRouting.home) return Padding( @@ -123,7 +136,6 @@ class _PersonaProfilePageState extends State { bool hasSpeech = SharedPreferencesUtil().hasSpeakerProfile; String transcriptModel = SharedPreferencesUtil().transcriptionModel; await routeToPage(context, const SettingsPage()); - if (language != SharedPreferencesUtil().recordingsLanguage || hasSpeech != SharedPreferencesUtil().hasSpeakerProfile || transcriptModel != SharedPreferencesUtil().transcriptionModel) { @@ -620,7 +632,6 @@ class _PersonaProfilePageState extends State { context: context, builder: (BuildContext context) { return AlertDialog( - backgroundColor: Theme.of(context).colorScheme.surface, title: const Text('Edit Name', style: TextStyle(color: Colors.white)), content: TextField( controller: nameController, @@ -689,6 +700,41 @@ class _PersonaProfilePageState extends State { ); } + void _showSignOutDialog(BuildContext context) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Sign Out', style: TextStyle(color: Colors.white)), + content: const Text( + 'Are you sure you want to sign out?', + style: TextStyle(color: Colors.white70), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Cancel', style: TextStyle(color: Colors.grey)), + ), + TextButton( + onPressed: () async { + Navigator.of(context).pop(); + SharedPreferencesUtil().hasOmiDevice = null; + SharedPreferencesUtil().verifiedPersonaId = null; + Provider.of(context, listen: false).setRouting(PersonaProfileRouting.no_device); + await signOut(); + Navigator.of(context).pop(); + routeToPage(context, const DeciderWidget(), replace: true); + }, + child: const Text('Sign Out', style: TextStyle(color: Colors.redAccent)), + ), + ], + ); + }, + ); + } + Widget _buildSocialLink({ required String icon, required String text,