feat: custom SSO login/signup dialog

This commit is contained in:
ggurdin 2025-12-22 09:52:00 -05:00
parent 1edafd9f3c
commit efd97becb6
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
62 changed files with 1044 additions and 121 deletions

View file

@ -10927,5 +10927,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "انتظار اكتمال تسجيل الدخول",
"ssoDialogDesc": "لقد فتحنا علامة تبويب جديدة حتى تتمكن من تسجيل الدخول بأمان.",
"ssoDialogHelpText": "🤔 إذا لم ترَ علامة التبويب الجديدة، يرجى التحقق من مانع النوافذ المنبثقة.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11809,5 +11809,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Чакаем, пакуль ўваход будзе завершаны",
"ssoDialogDesc": "Мы адкрылі новую ўкладку, каб вы маглі бяспечна ўвайсці.",
"ssoDialogHelpText": "🤔 Калі вы не ўбачылі новую ўкладку, калі ласка, праверце свой блакіроўшчык усплывальных акнаў.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11814,5 +11814,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "সাইন ইন সম্পন্ন হওয়ার জন্য অপেক্ষা করছে",
"ssoDialogDesc": "আমরা একটি নতুন ট্যাব খুলেছি যাতে আপনি নিরাপদে সাইন ইন করতে পারেন।",
"ssoDialogHelpText": "🤔 যদি আপনি নতুন ট্যাবটি না দেখেন, দয়া করে আপনার পপআপ ব্লকারটি পরীক্ষা করুন।",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10464,5 +10464,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Nunggu kanggo mlebu rampung",
"ssoDialogDesc": "Kita wis mbukak tab anyar supaya sampeyan bisa mlebu kanthi aman.",
"ssoDialogHelpText": "🤔 Yen sampeyan ora ndeleng tab anyar, mangga priksa pemblokir popup sampeyan.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10734,5 +10734,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Esperant que la signatura es completi",
"ssoDialogDesc": "Hem obert una nova pestanya perquè puguis iniciar sessió de manera segura.",
"ssoDialogHelpText": "🤔 Si no has vist la nova pestanya, si us plau, comprova el teu bloquejador de finestres emergents.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11317,5 +11317,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Čekání na dokončení přihlášení",
"ssoDialogDesc": "Otevřeli jsme novou kartu, abyste se mohli bezpečně přihlásit.",
"ssoDialogHelpText": "🤔 Pokud jste novou kartu neviděli, zkontrolujte prosím blokátor vyskakovacích oken.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11771,5 +11771,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Venter på, at login skal fuldføres",
"ssoDialogDesc": "Vi har åbnet en ny fane, så du kan logge ind sikkert.",
"ssoDialogHelpText": "🤔 Hvis du ikke så den nye fane, skal du tjekke din popup-blokker.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10717,5 +10717,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Warten auf den Abschluss der Anmeldung",
"ssoDialogDesc": "Wir haben einen neuen Tab geöffnet, damit Sie sich sicher anmelden können.",
"ssoDialogHelpText": "🤔 Wenn Sie den neuen Tab nicht gesehen haben, überprüfen Sie bitte Ihren Popup-Blocker.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11768,5 +11768,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Περιμένοντας την ολοκλήρωση της σύνδεσης",
"ssoDialogDesc": "Ανοίξαμε μια νέα καρτέλα ώστε να μπορέσετε να συνδεθείτε με ασφάλεια.",
"ssoDialogHelpText": "🤔 Αν δεν είδατε τη νέα καρτέλα, παρακαλώ ελέγξτε τον αποκλειστή αναδυόμενων παραθύρων σας.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -5011,5 +5011,8 @@
"type": "String"
}
}
}
},
"ssoDialogTitle": "Waiting for sign in to complete",
"ssoDialogDesc": "We opened a new tab so you can sign in securely.",
"ssoDialogHelpText": "🤔 If you didn't see the new tab, please check your popup blocker."
}

View file

@ -11799,5 +11799,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Atendante, ke ensaluto finiĝu",
"ssoDialogDesc": "Ni malfermis novan langeton por ke vi povu ensaluti sekure.",
"ssoDialogHelpText": "🤔 Se vi ne vidis la novan langeton, bonvolu kontroli vian popup-blokilon.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -7944,5 +7944,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Esperando a que se complete el inicio de sesión",
"ssoDialogDesc": "Abrimos una nueva pestaña para que puedas iniciar sesión de forma segura.",
"ssoDialogHelpText": "🤔 Si no viste la nueva pestaña, por favor revisa tu bloqueador de ventanas emergentes.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10981,5 +10981,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Ootame sisselogimise lõpetamist",
"ssoDialogDesc": "Avasime uue vahekaart, et saaksite turvaliselt sisse logida.",
"ssoDialogHelpText": "🤔 Kui te ei näinud uut vahekaarti, kontrollige palun oma hüpikakna blokeerijat.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10710,5 +10710,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Saioa hasi arte itxaroten",
"ssoDialogDesc": "Segurtasunez saioa hasi dezazun, fitxa berri bat ireki dugu.",
"ssoDialogHelpText": "🤔 Fitxa berri hori ikusi ez baduzu, mesedez, begiratu zure pop-up blokeatzailea.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11442,5 +11442,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "در حال انتظار برای تکمیل ورود",
"ssoDialogDesc": "ما یک تب جدید باز کردیم تا شما بتوانید به صورت امن وارد شوید.",
"ssoDialogHelpText": "🤔 اگر تب جدید را ندیدید، لطفاً مسدودکننده پاپ آپ خود را بررسی کنید.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11333,5 +11333,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Odotetaan kirjautumisen valmistumista",
"ssoDialogDesc": "Avasimme uuden välilehden, jotta voit kirjautua sisään turvallisesti.",
"ssoDialogHelpText": "🤔 Jos et nähnyt uutta välilehteä, tarkista ponnahdusikkunoiden estäjäsi.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11686,5 +11686,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Naghihintay na makumpleto ang pag-sign in",
"ssoDialogDesc": "Nagbukas kami ng bagong tab upang makapag-sign in ka nang ligtas.",
"ssoDialogHelpText": "🤔 Kung hindi mo nakita ang bagong tab, mangyaring suriin ang iyong popup blocker.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11034,5 +11034,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "En attente de la connexion",
"ssoDialogDesc": "Nous avons ouvert un nouvel onglet pour que vous puissiez vous connecter en toute sécurité.",
"ssoDialogHelpText": "🤔 Si vous n'avez pas vu le nouvel onglet, veuillez vérifier votre bloqueur de fenêtres contextuelles.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10708,5 +10708,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Ag fanacht le síniú isteach a chríochnú",
"ssoDialogDesc": "Osclóimid cluaisín nua ionas gur féidir leat síniú isteach go sábháilte.",
"ssoDialogHelpText": "🤔 Má chonaic tú an cluaisín nua, seiceáil le do thoil do bhacadóir pop-up.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10707,5 +10707,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Agardando a finalización do inicio de sesión",
"ssoDialogDesc": "Abrimos unha nova pestana para que poidas iniciar sesión de forma segura.",
"ssoDialogHelpText": "🤔 Se non ves a nova pestana, por favor, verifica o teu bloqueador de ventás emerxentes.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11759,5 +11759,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "ממתינים להשלים את הכניסה",
"ssoDialogDesc": "פתחנו לשונית חדשה כדי שתוכל להיכנס בצורה מאובטחת.",
"ssoDialogHelpText": "🤔 אם לא ראית את הלשונית החדשה, אנא בדוק את חוסם הפופ-אפ שלך.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11795,5 +11795,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "साइन इन पूरा होने की प्रतीक्षा कर रहे हैं",
"ssoDialogDesc": "हमने एक नया टैब खोला है ताकि आप सुरक्षित रूप से साइन इन कर सकें।",
"ssoDialogHelpText": "🤔 यदि आपने नया टैब नहीं देखा, तो कृपया अपने पॉपअप ब्लॉकर की जांच करें।",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11082,5 +11082,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Čekanje na dovršetak prijave",
"ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.",
"ssoDialogHelpText": "🤔 Ako niste vidjeli novu karticu, provjerite svoj blokator iskačućih prozora.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10711,5 +10711,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Várakozás a bejelentkezés befejezésére",
"ssoDialogDesc": "Megnyitottunk egy új lapot, hogy biztonságosan be tudj jelentkezni.",
"ssoDialogHelpText": "🤔 Ha nem láttad az új lapot, kérlek ellenőrizd a felugró ablak blokkolódat.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11788,5 +11788,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Atingindo para a conclusão do login",
"ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.",
"ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10701,5 +10701,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Menunggu penyelesaian masuk",
"ssoDialogDesc": "Kami membuka tab baru agar Anda dapat masuk dengan aman.",
"ssoDialogHelpText": "🤔 Jika Anda tidak melihat tab baru, silakan periksa pemblokir popup Anda.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11684,5 +11684,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Acht na sign in a chríochnú",
"ssoDialogDesc": "Osclaíomar cluais nua ionas go bhféadfaidh tú síniú isteach go sábháilte.",
"ssoDialogHelpText": "🤔 Má chonaic tú an cluais nua, seiceáil le do thoil do bhacadóir pop-up.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10713,5 +10713,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "In attesa del completamento dell'accesso",
"ssoDialogDesc": "Abbiamo aperto una nuova scheda in modo che tu possa accedere in modo sicuro.",
"ssoDialogHelpText": "🤔 Se non hai visto la nuova scheda, controlla il tuo blocco dei popup.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11500,5 +11500,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "サインインの完了を待っています",
"ssoDialogDesc": "安全にサインインできるように新しいタブを開きました。",
"ssoDialogHelpText": "🤔 新しいタブが表示されない場合は、ポップアップブロッカーを確認してください。",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11740,5 +11740,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "მოლოდინი შესვლის დასრულებამდე",
"ssoDialogDesc": "ჩვენ გავხსენით ახალი ჩანართი, რათა უსაფრთხოდ შეხვიდეთ.",
"ssoDialogHelpText": "🤔 თუ ახალი ჩანართი არ გინახავთ, გთხოვთ შეამოწმოთ თქვენი პოპ-აპ ბლოკერი.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10818,5 +10818,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "로그인 완료 대기 중",
"ssoDialogDesc": "안전하게 로그인할 수 있도록 새 탭을 열었습니다.",
"ssoDialogHelpText": "🤔 새 탭이 보이지 않으면 팝업 차단기를 확인하세요.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11515,5 +11515,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Laukiama, kol prisijungimas bus baigtas",
"ssoDialogDesc": "Atidarėme naują skirtuką, kad galėtumėte saugiai prisijungti.",
"ssoDialogHelpText": "🤔 Jei nematėte naujo skirtuko, patikrinkite savo iššokančių langų blokatorių.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10696,5 +10696,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Gaidām, kamēr pieteikšanās tiks pabeigta",
"ssoDialogDesc": "Mēs atvērām jaunu cilni, lai jūs varētu droši pieteikties.",
"ssoDialogHelpText": "🤔 Ja neredzējāt jauno cilni, lūdzu, pārbaudiet savu uznirstošo logu bloķētāju.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11803,5 +11803,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Venter på at påloggingen skal fullføres",
"ssoDialogDesc": "Vi åpnet en ny fane slik at du kan logge inn sikkert.",
"ssoDialogHelpText": "🤔 Hvis du ikke så den nye fanen, vennligst sjekk popup-blokkeringen din.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10710,5 +10710,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Wachten op het voltooien van de aanmelding",
"ssoDialogDesc": "We hebben een nieuw tabblad geopend zodat je veilig kunt inloggen.",
"ssoDialogHelpText": "🤔 Als je het nieuwe tabblad niet hebt gezien, controleer dan je pop-up blocker.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10708,5 +10708,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Czekam na zakończenie logowania",
"ssoDialogDesc": "Otworzyliśmy nową kartę, abyś mógł się zalogować bezpiecznie.",
"ssoDialogHelpText": "🤔 Jeśli nie widzisz nowej karty, sprawdź swój blokadę wyskakujących okienek.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11810,5 +11810,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Aguardando a conclusão do login",
"ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.",
"ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11068,5 +11068,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Aguardando a conclusão do login",
"ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.",
"ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11739,5 +11739,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Aguardando a conclusão do login",
"ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.",
"ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11445,5 +11445,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Așteptând finalizarea autentificării",
"ssoDialogDesc": "Am deschis un nou tab pentru a te putea autentifica în siguranță.",
"ssoDialogHelpText": "🤔 Dacă nu ai văzut noul tab, te rugăm să verifici blocatorul de feronete.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10815,5 +10815,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Ожидание завершения входа",
"ssoDialogDesc": "Мы открыли новую вкладку, чтобы вы могли безопасно войти.",
"ssoDialogHelpText": "🤔 Если вы не видите новую вкладку, пожалуйста, проверьте блокировщик всплывающих окон.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11794,5 +11794,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Čakáme na dokončenie prihlásenia",
"ssoDialogDesc": "Otvárame novú kartu, aby ste sa mohli prihlásiť bezpečne.",
"ssoDialogHelpText": "🤔 Ak ste nevideli novú kartu, skontrolujte prosím svoj blokovač vyskakovacích okien.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11791,5 +11791,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Čakanje na dokončanje prijave",
"ssoDialogDesc": "Odprli smo nov zavihek, da se lahko varno prijavite.",
"ssoDialogHelpText": "🤔 Če niste videli novega zavihka, preverite svoj blokator pojavnih oken.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11812,5 +11812,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Čekanje na završetak prijavljivanja",
"ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.",
"ssoDialogHelpText": "🤔 Ako niste videli novu karticu, molimo proverite svoj blokator iskačućih prozora.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11188,5 +11188,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Väntar på att inloggningen ska slutföras",
"ssoDialogDesc": "Vi har öppnat en ny flik så att du kan logga in säkert.",
"ssoDialogHelpText": "🤔 Om du inte såg den nya fliken, vänligen kontrollera din popup-blockerare.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10934,5 +10934,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "உள்நுழைவுக்கு காத்திருக்கிறேன்",
"ssoDialogDesc": "நாங்கள் நீங்கள் பாதுகாப்பாக உள்நுழைய புதிய தாவலை திறந்துள்ளோம்.",
"ssoDialogHelpText": "🤔 புதிய தாவலை நீங்கள் காணவில்லை என்றால், தயவுசெய்து உங்கள் பாப்-அப் தடுப்பை சரிபார்க்கவும்.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11799,5 +11799,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "సైన్ ఇన్ పూర్తి కావడానికి వేచి ఉంది",
"ssoDialogDesc": "మీరు సురక్షితంగా సైన్ ఇన్ కావడానికి మేము కొత్త టాబ్‌ను తెరిచాము.",
"ssoDialogHelpText": "🤔 మీరు కొత్త టాబ్‌ను చూడకపోతే, దయచేసి మీ పాప్-అప్ బ్లాకర్‌ను తనిఖీ చేయండి.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11768,5 +11768,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "รอการลงชื่อเข้าใช้ให้เสร็จสิ้น",
"ssoDialogDesc": "เราได้เปิดแท็บใหม่เพื่อให้คุณลงชื่อเข้าใช้ได้อย่างปลอดภัย",
"ssoDialogHelpText": "🤔 หากคุณไม่เห็นแท็บใหม่ โปรดตรวจสอบตัวบล็อกป๊อปอัปของคุณ",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10932,5 +10932,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Girişin tamamlanmasını bekliyoruz",
"ssoDialogDesc": "Güvenli bir şekilde giriş yapabilmeniz için yeni bir sekme açtık.",
"ssoDialogHelpText": "🤔 Yeni sekmeyi görmediyseniz, lütfen açılır pencere engelleyicinizi kontrol edin.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10704,5 +10704,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Очікування завершення входу",
"ssoDialogDesc": "Ми відкрили нову вкладку, щоб ви могли безпечно увійти.",
"ssoDialogHelpText": "🤔 Якщо ви не побачили нову вкладку, будь ласка, перевірте блокувальник спливаючих вікон.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -6280,5 +6280,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "Đang chờ hoàn tất đăng nhập",
"ssoDialogDesc": "Chúng tôi đã mở một tab mới để bạn có thể đăng nhập một cách an toàn.",
"ssoDialogHelpText": "🤔 Nếu bạn không thấy tab mới, vui lòng kiểm tra trình chặn popup của bạn.",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -11801,5 +11801,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "等待登錄完成",
"ssoDialogDesc": "我們已經打開了一個新標籤,以便您可以安全地登錄。",
"ssoDialogHelpText": "🤔 如果您沒有看到新標籤,請檢查您的彈出窗口阻止程序。",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10701,5 +10701,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "等待登录完成",
"ssoDialogDesc": "我们打开了一个新标签页,以便您可以安全地登录。",
"ssoDialogHelpText": "🤔 如果您没有看到新标签页,请检查您的弹出窗口拦截器。",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -10708,5 +10708,20 @@
"type": "String"
}
}
},
"ssoDialogTitle": "等待登入完成",
"ssoDialogDesc": "我們已開啟一個新標籤頁,以便您安全地登入。",
"ssoDialogHelpText": "🤔 如果您沒有看到新標籤頁,請檢查您的彈出式窗口阻擋器。",
"@ssoDialogTitle": {
"type": "String",
"placeholders": {}
},
"@ssoDialogDesc": {
"type": "String",
"placeholders": {}
},
"@ssoDialogHelpText": {
"type": "String",
"placeholders": {}
}
}

View file

@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/authentication/p_login.dart';
import 'package:fluffychat/pangea/login/pages/login_options_view.dart';
import 'package:fluffychat/pangea/login/pages/pangea_login_view.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
@ -43,8 +42,6 @@ class LoginController extends State<Login> {
// #Pangea
bool loadingSignIn = false;
bool loadingAppleSSO = false;
bool loadingGoogleSSO = false;
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
@ -97,17 +94,6 @@ class LoginController extends State<Login> {
}
}
void setLoadingSSO(bool loading, SSOProvider provider) {
if (provider == SSOProvider.apple) {
loadingAppleSSO = loading;
loadingGoogleSSO = false;
} else if (provider == SSOProvider.google) {
loadingGoogleSSO = loading;
loadingAppleSSO = false;
}
if (mounted) setState(() {});
}
void login() async => pLoginAction(controller: this, context: context);
// void login() async {
// final matrix = Matrix.of(context);

View file

@ -6,7 +6,6 @@ import 'package:matrix/matrix.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/login/login.dart';
import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
@ -27,8 +26,6 @@ void pLoginAction({
),
onError: (e, s) {
controller.setLoadingSignIn(false);
controller.setLoadingSSO(false, SSOProvider.apple);
controller.setLoadingSSO(false, SSOProvider.google);
return e is MatrixException
? e.errorMessage
: L10n.of(context).oopsSomethingWentWrong;

View file

@ -8,6 +8,7 @@ import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/login/login.dart';
import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart';
import 'package:fluffychat/pangea/login/sso_provider_enum.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart';
class LoginOptionsView extends StatelessWidget {
@ -35,17 +36,13 @@ class LoginOptionsView extends StatelessWidget {
spacing: 16.0,
mainAxisAlignment: MainAxisAlignment.end,
children: [
PangeaSsoButton(
const PangeaSsoButton(
provider: SSOProvider.apple,
title: "Apple",
loading: controller.loadingAppleSSO,
setLoading: controller.setLoadingSSO,
),
PangeaSsoButton(
const PangeaSsoButton(
provider: SSOProvider.google,
title: "Google",
loading: controller.loadingGoogleSSO,
setLoading: controller.setLoadingSSO,
),
ElevatedButton(
onPressed: () => context.go('/home/login/email'),

View file

@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart';
import 'package:fluffychat/pangea/login/pages/signup_view.dart';
import 'package:fluffychat/pangea/login/pages/signup_with_email_view.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -34,9 +33,6 @@ class SignupPageController extends State<SignupPage> {
String? emailText;
bool loadingSignup = false;
bool loadingAppleSSO = false;
bool loadingGoogleSSO = false;
bool showPassword = false;
bool noEmailWarningConfirmed = false;
bool displaySecondPasswordField = false;
@ -70,17 +66,6 @@ class SignupPageController extends State<SignupPage> {
super.dispose();
}
void setLoadingSSO(bool loading, SSOProvider provider) {
if (provider == SSOProvider.apple) {
loadingAppleSSO = loading;
loadingGoogleSSO = false;
} else if (provider == SSOProvider.google) {
loadingGoogleSSO = loading;
loadingAppleSSO = false;
}
if (mounted) setState(() {});
}
void setSignupError(String? error) {
signupError = error;
if (mounted) setState(() {});
@ -162,8 +147,6 @@ class SignupPageController extends State<SignupPage> {
onError: (e, s) {
setState(() {
loadingSignup = false;
loadingAppleSSO = false;
loadingGoogleSSO = false;
});
if (e.toString().contains("Request has been canceled")) {
Navigator.of(context).pop();

View file

@ -9,6 +9,7 @@ import 'package:url_launcher/url_launcher_string.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart';
import 'package:fluffychat/pangea/login/sso_provider_enum.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart';
import 'signup.dart';
@ -45,18 +46,8 @@ class SignupPageView extends StatelessWidget {
fontWeight: FontWeight.bold,
),
),
PangeaSsoButton(
provider: SSOProvider.google,
setLoading: controller.setLoadingSSO,
loading: controller.loadingGoogleSSO,
validator: validator,
),
PangeaSsoButton(
provider: SSOProvider.apple,
setLoading: controller.setLoadingSSO,
loading: controller.loadingAppleSSO,
validator: validator,
),
const PangeaSsoButton(provider: SSOProvider.google),
const PangeaSsoButton(provider: SSOProvider.apple),
ElevatedButton(
onPressed: () => context.go(
'/home/language/signup/email',

View file

@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
import 'package:fluffychat/l10n/l10n.dart';
enum SSOProvider {
google,
apple;
String get id {
switch (this) {
case SSOProvider.google:
return "oidc-google";
case SSOProvider.apple:
return "oidc-apple";
}
}
String get asset {
switch (this) {
case SSOProvider.google:
return "assets/pangea/google.svg";
case SSOProvider.apple:
return "assets/pangea/apple.svg";
}
}
String description(BuildContext context) {
switch (this) {
case SSOProvider.google:
return L10n.of(context).withGoogle;
case SSOProvider.apple:
return L10n.of(context).withApple;
}
}
}

View file

@ -1,81 +1,116 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:matrix/matrix_api_lite/model/matrix_exception.dart';
import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
import 'package:universal_html/html.dart' as html;
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart';
import 'package:fluffychat/pangea/login/utils/sso_login_action.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
enum SSOProvider { google, apple }
extension on SSOProvider {
String get id {
switch (this) {
case SSOProvider.google:
return "oidc-google";
case SSOProvider.apple:
return "oidc-apple";
}
}
String get asset {
switch (this) {
case SSOProvider.google:
return "assets/pangea/google.svg";
case SSOProvider.apple:
return "assets/pangea/apple.svg";
}
}
String description(BuildContext context) {
switch (this) {
case SSOProvider.google:
return L10n.of(context).withGoogle;
case SSOProvider.apple:
return L10n.of(context).withApple;
}
}
}
import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart';
import 'package:fluffychat/pangea/login/sso_provider_enum.dart';
import 'package:fluffychat/pangea/login/widgets/p_sso_dialog.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/matrix.dart';
class PangeaSsoButton extends StatelessWidget {
final String? title;
final SSOProvider provider;
final Function(bool, SSOProvider) setLoading;
final bool loading;
final bool? Function()? validator;
final String? title;
const PangeaSsoButton({
required this.provider,
required this.setLoading,
this.title,
this.loading = false,
this.validator,
super.key,
});
Future<void> _runSSOLogin(BuildContext context) async {
setLoading(true, provider);
await showFutureLoadingDialog(
context: context,
future: () async => pangeaSSOLoginAction(
IdentityProvider(
id: provider.id,
name: provider.name,
Future<void> _runSSOLogin(BuildContext context) => showAdaptiveDialog(
context: context,
builder: (context) => SSODialog(
future: () => _ssoAction(
IdentityProvider(
id: provider.id,
name: provider.name,
),
context,
),
),
context,
),
onError: (e, s) {
setLoading(false, provider);
return e is MatrixException
? e.errorMessage
: L10n.of(context).oopsSomethingWentWrong;
},
onDismiss: () => setLoading(false, provider),
);
Future<void> _ssoAction(
IdentityProvider provider,
BuildContext context,
) async {
final bool isDefaultPlatform = (PlatformInfos.isMobile ||
PlatformInfos.isWeb ||
PlatformInfos.isMacOS);
final redirectUrl = kIsWeb
? Uri.parse(html.window.location.href)
.resolveUri(
Uri(pathSegments: ['auth.html']),
)
.toString()
: isDefaultPlatform
? '${AppConfig.appOpenUrlScheme.toLowerCase()}://login'
: 'http://localhost:3001//login';
final client = await Matrix.of(context).getLoginClient();
final url = client.homeserver!.replace(
path: '/_matrix/client/v3/login/sso/redirect/${provider.id ?? ''}',
queryParameters: {'redirectUrl': redirectUrl},
);
setLoading(false, provider);
final urlScheme = isDefaultPlatform
? Uri.parse(redirectUrl).scheme
: "http://localhost:3001";
String result;
try {
result = await FlutterWebAuth2.authenticate(
url: url.toString(),
callbackUrlScheme: urlScheme,
);
} catch (err) {
if (err is PlatformException && err.code == 'CANCELED') {
debugPrint("user cancelled SSO login");
return;
}
rethrow;
}
final token = Uri.parse(result).queryParameters['loginToken'];
if (token?.isEmpty ?? false) return;
final redirect = client.onLoginStateChanged.stream
.where((state) => state == LoginState.loggedIn)
.first
.then(
(_) {
final route = FluffyChatApp.router.state.fullPath;
if (route == null ||
(!route.contains("/rooms") && !route.contains('registration'))) {
context.go('/rooms');
}
},
).timeout(const Duration(seconds: 30));
final loginRes = await client.login(
LoginType.mLoginToken,
token: token,
initialDeviceDisplayName: PlatformInfos.clientName,
);
if (client.onLoginStateChanged.value == LoginState.loggedIn) {
final route = FluffyChatApp.router.state.fullPath;
if (route == null ||
(!route.contains("/rooms") && !route.contains('registration'))) {
context.go('/rooms');
}
} else {
await redirect;
}
GoogleAnalytics.login(provider.name!, loginRes.userId);
}
@override
@ -102,13 +137,7 @@ class PangeaSsoButton extends StatelessWidget {
Text(title ?? provider.description(context)),
],
),
onPressed: () {
if (validator != null) {
final valid = validator!.call() ?? false;
if (!valid) return;
}
_runSSOLogin(context);
},
onPressed: () => _runSSOLogin(context),
);
}
}

View file

@ -0,0 +1,107 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
class SSODialog extends StatefulWidget {
final Future<void> Function() future;
const SSODialog({
super.key,
required this.future,
});
@override
SSODialogState createState() => SSODialogState();
}
class SSODialogState extends State<SSODialog> {
Timer? _hintTimer;
bool _showHint = false;
Object? _error;
@override
void initState() {
super.initState();
_runFuture();
_hintTimer = Timer(const Duration(seconds: 5), () {
if (mounted) {
setState(() => _showHint = true);
}
});
}
@override
void dispose() {
_hintTimer?.cancel();
super.dispose();
}
Future<void> _runFuture() async {
try {
await widget.future();
} catch (e) {
setState(() => _error = e);
}
}
@override
Widget build(BuildContext context) {
return AlertDialog.adaptive(
title: _error == null
? ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 256),
child: Text(L10n.of(context).ssoDialogTitle),
)
: Icon(
Icons.error_outline_outlined,
color: Theme.of(context).colorScheme.error,
size: 48,
),
content: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 256),
child: _error == null
? Column(
mainAxisSize: MainAxisSize.min,
children: [
SelectableLinkify(
text: L10n.of(context).ssoDialogDesc,
textScaleFactor: MediaQuery.textScalerOf(context).scale(1),
linkStyle: TextStyle(
color: Theme.of(context).colorScheme.primary,
decorationColor: Theme.of(context).colorScheme.primary,
),
options: const LinkifyOptions(humanize: false),
onOpen: (url) => UrlLauncher(context, url.url).launchUrl(),
),
const SizedBox(height: 16),
_showHint
? Text(
L10n.of(context).ssoDialogHelpText,
style: Theme.of(context).textTheme.bodySmall,
)
: const SizedBox(
height: 16.0,
width: 16.0,
child: CircularProgressIndicator.adaptive(),
),
],
)
: Text(_error!.toLocalizedString(context)),
),
actions: [
AdaptiveDialogAction(
onPressed: () =>
Navigator.of(context).pop<OkCancelResult>(OkCancelResult.cancel),
child: Text(L10n.of(context).cancel),
),
],
);
}
}