0

Hello there I'm new to flutter development. I'm doing my FYP in Flutter. I'm developing Admin Panel of my app and for auth I used shared preferences. The problem is they work just fine when I hot reload the flutter app but as soon as I restart my flutter web app fully. The shared preferences gives either wrong values or they vanish up from the local storage. I'm attaching the code snippets below. It will be very nice of anyone if anyone assists me. I'm like stuck for a day now.

Code for LogIn Screen

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:health_demic_fyp/controllers/auth_controllers.dart';
import 'package:health_demic_fyp/utils/colors.dart';
import 'package:health_demic_fyp/views/web_admin/web_admin_home_screen.dart';
import 'package:health_demic_fyp/widgets/common%20widgets/snack_bar.dart';
import 'package:health_demic_fyp/widgets/web%20admin/auth_state.dart';
import 'package:shared_preferences/shared_preferences.dart';
// import '../../widgets/web admin/auth_state.dart';

class WebAdminLogInScreen extends StatefulWidget {
  const WebAdminLogInScreen({super.key});
  static const routeName = '/admin-login';

  @override
  State<WebAdminLogInScreen> createState() => _WebAdminLogInScreenState();
}

class _WebAdminLogInScreenState extends State<WebAdminLogInScreen> {
  final TextEditingController _userNameController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();
  bool isVisible = true;
  bool isLoading = false;

  void logIn() async {
    if (_userNameController.text.isEmpty || _passwordController.text.isEmpty) {
      customSnackBar('Please Enter all the fields');
    } else {
      String res = await AuthControllers()
          .adminLogIn(_userNameController.text, _passwordController.text);
      if (res != 'Success') {
        customSnackBar('Invalid Credentials');
      } else {
        SharedPreferences prefs = await SharedPreferences.getInstance();
        await prefs.setBool('isLoggedIn', true);
        Navigator.of(context).pushReplacement(MaterialPageRoute(
            builder: (context) => const WebAdminHomeScreen()));
      }
    }
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    _userNameController.dispose();
    _passwordController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: primaryColor,
      body: Center(
        child: Padding(
          padding: EdgeInsets.symmetric(horizontal: 100.w),
          child: Container(
            decoration: BoxDecoration(
              color: secondaryColor,
              borderRadius: BorderRadius.circular(20.r),
            ),
            child: Padding(
              padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 30.h),
              child: Form(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    Text(
                      'WELCOME ADMIN!',
                      style: Theme.of(context).textTheme.titleLarge,
                      textAlign: TextAlign.center,
                    ),
                    SizedBox(
                      height: 10.h,
                    ),
                    TextFormField(
                      controller: _userNameController,
                      decoration: InputDecoration(
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(30.r)),
                        hintText: 'Username',
                        prefixIcon: const Icon(Icons.person),
                      ),
                    ),
                    SizedBox(
                      height: 10.h,
                    ),
                    TextFormField(
                      controller: _passwordController,
                      obscureText: isVisible,
                      decoration: InputDecoration(
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(30.r)),
                          hintText: 'Password',
                          prefixIcon: const Icon(Icons.lock),
                          suffixIcon: IconButton(
                            onPressed: () {
                              setState(() {
                                isVisible = !isVisible;
                              });
                            },
                            icon: isVisible
                                ? const Icon(Icons.visibility_off)
                                : const Icon(Icons.visibility),
                          )),
                    ),
                    SizedBox(
                      height: 10.h,
                    ),
                    InkWell(
                      onTap: logIn,
                      child: Container(
                        height: 50.h,
                        decoration: BoxDecoration(
                          color: primaryColor,
                          borderRadius:
                              BorderRadius.all(Radius.circular(25.sp)),
                        ),
                        child: Center(
                            child: isLoading
                                ? const CircularProgressIndicator(
                                    color: secondaryColor,
                                  )
                                : Text(
                                    'Log In',
                                    style: TextStyle(
                                        color: secondaryColor, fontSize: 17.sp),
                                  )),
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Code Snippet for Log Out

import 'package:flutter/material.dart';
import 'package:health_demic_fyp/views/web_admin/web_admin_login_screen.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../widgets/web admin/auth_state.dart';

class WebAdminHomeScreen extends StatefulWidget {
  const WebAdminHomeScreen({super.key});
  static const routeName = '/admin-home';

  @override
  State<WebAdminHomeScreen> createState() => _WebAdminHomeScreenState();
}

class _WebAdminHomeScreenState extends State<WebAdminHomeScreen> {
  void signOut() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', false);
    Navigator.of(context).pushReplacement(
        MaterialPageRoute(builder: (context) => const WebAdminLogInScreen()));
  }

  @override
  Widget build(BuildContext context) {
    // return const Scaffold(
    //   body: Center(
    //     child: Text('Admin Home Screen'),
    //   ),
    // );
    return Scaffold(
      body: Center(
        child: InkWell(
          onTap: signOut,
          child: const Text('Log Out'),
        ),
      ),
    );
  }
}

Code Snippet for Landing Page

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:health_demic_fyp/views/web_admin/web_admin_home_screen.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../web_admin/web_admin_login_screen.dart';
import 'landing_screen.dart';

class LayoutScreen extends StatefulWidget {
  @override
  State<LayoutScreen> createState() => _LayoutScreenState();
}

class _LayoutScreenState extends State<LayoutScreen> {
  bool _isLoggedIn = false;

  @override
  void initState() {
    super.initState();
    _checkLoginStatus();
  }

  void _checkLoginStatus() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;

    setState(() {
      _isLoggedIn = isLoggedIn;
    });
    print(_isLoggedIn);
  }

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(builder: (context, constraints) {
      if (kIsWeb) {
        if (_isLoggedIn) {
          return const WebAdminHomeScreen();
        } else {
          return const WebAdminLogInScreen();
        }
      } else {
        return LandingScreen();
      }
    });
  }
}

As far as resource I had came accrossed. I'd managed this but it's not working. There is not enough resources on flutter web and this is now happening.

0 Answers0