1

I have found that after re-opening the App. The current user becomes null. It's not persistent. Here is my realm implementation:


void main() async {
  // get app id from config
  WidgetsFlutterBinding.ensureInitialized();
  final realmConfig =
      json.decode(await rootBundle.loadString('assets/config/realm.json'));
  String appId = realmConfig['appId'];
  Uri baseUrl = Uri.parse(realmConfig['baseUrl']);
  final LoginData? storedLoginData = await LocalStorageService().currentLoginCred();
  return runApp(MultiProvider(providers: [
    ChangeNotifierProvider<AppServices>(
        create: (_) => AppServices(appId, baseUrl)),
    ProxyProvider<AppServices, Realm?>(
      update: (context, app, previousRealm) {
        if (app.currentUser != null) {
          previousRealm?.close();
          return initRealm(app.currentUser!);
        }
        return null;
      },
      dispose: (_, realm) => realm?.close(),
    )
  ], child:  App(storedLoginData)));
}

class App extends StatelessWidget {
  final LoginData? storedLoginData;
  const App(this.storedLoginData,{Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final currentUser =
        Provider.of<AppServices>(context, listen: false).currentUser;
return WillPopScope(
      onWillPop: () async => false,
      child: MaterialApp(
          title: 'Target Eagle App',
          theme: ThemeData.dark(),
          initialRoute: currentUser != null ? '/' : '/welcomePage',
          routes: {
            '/': (context) => const HomePage(),
            '/login': (context) => const LogIn(true)
          }));

...
}

Steps to reproduce:

  1. Login with valid credentials. Then it redirects to Home page.

  2. Close the app

  3. Re-open. Then it redirects to Welcome Page. Instead to Home page.

I want to persist my Realm User data even after re-opening the App. Could you please suggest me how should I achieve that?

0 Answers0