Rank 1: Thread
Hello, how can I check if a user is logged in?
Votes
1
Replies
12
Participants
Unknown
Messages
13
Rank 1: Thread
Hello, how can I check if a user is logged in?
I think that only way is to fetch accou, accout.get()
Rank 1: Thread
I did it like that, but it always shows the logged in screen, and throws an error
code:
class App extends StatelessWidget { const App({super.key});
@override Widget build(BuildContext context) {
bool isUserLoggedIn() { try { account().get(); return true; } catch (error) { return false; } }
Widget homeScreen = isUserLoggedIn() ? LoggedInHomeScreen() : NotLoggedInScreen();
return MaterialApp( title: 'Outfytr', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: const Color.fromRGBO(113, 100, 231, 1)), useMaterial3: true, ), home: homeScreen, ); }}
class LoggedInHomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Logged In'), ), body: Center( child: Text('Logged In'), ), ); }}
class NotLoggedInScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Not Logged In'), ), body: Center( child: Text('Not Logged In'), ), ); }}```Rank 1: Thread
error:
Error: AppwriteException: general_unauthorized_scope, User (role: guests) missing scope (account) (401)
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:49 throw_
packages/appwrite/src/client_mixin.dart 73:9 prepareResponse
packages/appwrite/src/client_browser.dart 214:14 call
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
dart-sdk/lib/async/zone.dart 1661:54 runUnary
dart-sdk/lib/async/future_impl.dart 147:18 handleValue
dart-sdk/lib/async/future_impl.dart 784:44 handleValueCallback
dart-sdk/lib/async/future_impl.dart 813:13 _propagateToListeners
dart-sdk/lib/async/future_impl.dart 584:5 [_completeWithValue]
dart-sdk/lib/async/future_impl.dart 657:7 callback
dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 177:15 <fn>```
Rank 1: Thread
pls help
Rank 3: Container
Yes, it's normal for it to throw an error if there is no logged-in user. You should handle the exception
Rank 1: Thread
and how is that possible?
await account.get()Rank 1: Thread
in the second step you mean my bool function right?
sort of. you can't/shouldn't be calling async methods in build
Rank 3: Container
Oh, I forgot about await. Anyway, I agree with Steven. Here is a brief sample, but you should use StatefulWidget instead and call your function within initState. (This is not a good practice. I recommend using a proper state management.)
Future<bool> isUserLoggedIn() async {
//---------------------------------
try {
await appApi.getAccount.get();
return true;
} on AppwriteException catch (_) {
return false;
}
}
ya, and you'd need local state to update the UI accordingly with the result of isUserLoggedIn
Rank 1: Thread
works thx!