I am new to flutter, just trying to set and get logged in user's session but maybe I am missing something

25 views Asked by At

Everything is working fine but when I login successfully it shows that the exact user is logged in and after that if I navigate to other pages from Navbar and return back to the login page it shows Login page instead of Dashboard page

// ignore_for_file: prefer_const_constructors, use_key_in_widget_constructors, use_build_context_synchronously, library_private_types_in_public_api, depend_on_referenced_packages

import 'package:flutter_session_manager/flutter_session_manager.dart';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
 WidgetsFlutterBinding.ensureInitialized();
  dynamic token = SessionManager().get("token");
   runApp(MaterialApp(home: token != '' ? DashboardPage() : ProfilePage()));
}

class ProfilePage extends StatelessWidget {
@override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
    home: Profile(),
  );
 }
}

class Profile extends StatefulWidget {
 @override
  _ProfileLogin createState() => _ProfileLogin();
}

class _ProfileLogin extends State<Profile> {
 TextEditingController user = TextEditingController();
 TextEditingController pass = TextEditingController();

 bool isLoggedIn = false;

Future login() async {
var url = Uri.https("path_to_my_server", '/login_user.php');
var response = await http.post(url, body: {
  "username": user.text,
  "loginpassword": pass.text,
});

var data = json.decode(response.body); // The response is already a string

if (data.toString() == "Success") {

  await SessionManager().set('token', user.text);

  ScaffoldMessenger.of(context)
      .showSnackBar(SnackBar(content: Text("Login Success")));
  setState(() {
    isLoggedIn = true;
  });
} else {
  ScaffoldMessenger.of(context)
      .showSnackBar(SnackBar(content: Text("Wrong Credentials!")));
 }
}

bool isPasswordVisible = false;

@override
Widget build(BuildContext context) {
return Scaffold(
  backgroundColor: Colors.white,
  appBar: AppBar(
    title: Image(
      image: AssetImage('assets/logo.png'),
      fit: BoxFit.contain,
      height: 50,
    ),
    centerTitle: true,
    backgroundColor: Colors.white,
  ),
  body: isLoggedIn ? DashboardPage() : buildLoginPage(),
);
}

Widget buildLoginPage() {
return SingleChildScrollView(
  child: Column(
    children: <Widget>[
      Padding(
        padding: const EdgeInsets.only(top: 50.0),
        child: Center(
          child: Text(
            "Welcome back",
            style: Theme.of(context).textTheme.headlineLarge,
          ),
        ),
      ),
      SizedBox(height: 50),
      Padding(
        padding: const EdgeInsets.only(left: 15.0, right: 15.0, top: 15, bottom: 0),
        child: TextField(
          controller: user,
          decoration: InputDecoration(
              prefixIconConstraints: const BoxConstraints(minWidth: 45),
              prefixIcon: const Icon(
                Icons.person,
                color: Colors.black,
                size: 22,
              ),
              hintText: 'Enter Username',
              border: OutlineInputBorder(),
              labelText: 'Username',
              focusedBorder: OutlineInputBorder(
                borderSide: const BorderSide(color: Colors.black, width: 1.0),
              )),
        ),
      ),
      Padding(
        padding: const EdgeInsets.only(left: 15.0, right: 15.0, top: 15, bottom: 0),
        child: TextField(
            controller: pass,
            obscureText: isPasswordVisible ? false : true,
            decoration: InputDecoration(
                prefixIconConstraints: const BoxConstraints(minWidth: 45),
                prefixIcon: const Icon(
                  Icons.lock,
                  color: Colors.black,
                  size: 22,
                ),
                suffixIconConstraints: const BoxConstraints(minWidth: 45, maxWidth: 46),
                suffixIcon: GestureDetector(
                  onTap: () {
                    setState(() {
                      isPasswordVisible = !isPasswordVisible;
                    });
                  },
                  child: Icon(
                    isPasswordVisible ? Icons.visibility : Icons.visibility_off,
                    color: Colors.black,
                    size: 22,
                  ),
                ),
                border: OutlineInputBorder(),
                labelText: 'Password',
                hintText: 'Enter your password',
                focusedBorder: OutlineInputBorder(
                  borderSide: const BorderSide(color: Colors.black, width: 1.0),
                ))),
      ),
      SizedBox(
        height: 30,
      ),
      GestureDetector(
        onTap: () {
          login();
        },
        child: Container(
          height: 50,
          width: 250,
          margin: const EdgeInsets.symmetric(horizontal: 30),
          alignment: Alignment.center,
          decoration: BoxDecoration(
              color: Colors.black,
              borderRadius: BorderRadius.circular(10)),
          child: Text(
            'Login',
            style: TextStyle(color: Colors.white, fontSize: 25),
          ),
        ),
      ),
      SizedBox(
        height: 130,
      ),
    ],
  ),
);
 }
}

class DashboardPage extends StatelessWidget {
 @override
  Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    automaticallyImplyLeading: false,
    centerTitle: true,
    backgroundColor: Colors.white,
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text('Your Application Process Will Appear Here'),
        FutureBuilder(
          future: SessionManager().get("token"),
          builder: (context, snapshot) {
            return Text(snapshot.hasData ? snapshot.data : 'Loading...');
          },
        ),
      ],
    ),
   ),
  );
 }
}

This is the Navbar, when I navigate through Home and Get Started Pages and return back to Profile page (which is login page) it shows Login Screen instead of Dashboard:

enter image description here

This is my Dashboard Screen after successful login:

enter image description here

0

There are 0 answers