firebase – How to make a simple admin page in flutter with a given email and password in flutter?

How can I add an admin page to the existing pages? I just want one default admin to enter which will only display users from Firebase. I would like a specific email and password to be given which will allow access for that one admin.

I’m attaching the login page


import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'startuppage.dart';

class MyLogin extends StatefulWidget {
  const MyLogin({Key? key}) : super(key: key);

  @override
  State<MyLogin> createState() => _MyLoginState();
}

class _MyLoginState extends State<MyLogin> {


  //editing controller
  final TextEditingController emailController = TextEditingController();
  final TextEditingController passwordController = TextEditingController();
  int _success = 1 ;
  late String _userEmail = "";

  final user = FirebaseAuth.instance.currentUser;


  Future SignIn() async {

    await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: emailController.text.trim(),
        password: passwordController.text.trim()
    );

  }


  @override
  Widget build(BuildContext context) {

    return  Container(
      decoration:  const BoxDecoration(
        //color: Color(0xFFaac8ba),
        gradient: LinearGradient
          (begin: Alignment.bottomLeft,
          end: Alignment.bottomRight,
          colors: [
          Color(0xFFde6262),
            Color(0xFFffb88c)
          ]
        ),
      ),
      child : Scaffold(
        backgroundColor: Colors.transparent, //By default, in scaffold the bg color is white.

        body: Container(
              padding: const EdgeInsets.only(top: 130, left: 35, right: 0),
              child: SingleChildScrollView(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children:  [
                    const  Text(
                      "Welcome BacknTo Check-it.",
                      style:  TextStyle(
                        color: Colors.black,
                        fontSize: 30,
                        fontFamily: 'Montserrat',
                        letterSpacing: 3,
                        fontWeight: FontWeight.bold,
                      ),
                    ),

                    const  SizedBox(
                      height: 50.0,
                    ),
                   TextField(
                      controller: emailController,
                      keyboardType: TextInputType.emailAddress,
                      decoration:  const InputDecoration(
                          hintText: "Email",
                          prefixIcon: Icon(Icons.mail, color: Colors.black,)
                      ),
                    ),
                    const SizedBox(
                      height: 20.0,
                    ),
                     TextField(
                       controller:passwordController,
                      obscureText: true,
                      keyboardType: TextInputType.visiblePassword,
                      decoration:  const InputDecoration(
                          hintText: "Password",
                          prefixIcon: Icon(Icons.lock, color: Colors.black,)
                      ),
                    ),
                    const  SizedBox(
                      height: 50.0,
                    ),
                    ElevatedButton(
                      onPressed: () async{
                       // _signIn();
                        SignIn();
                        Navigator.push(
                            context,
                          MaterialPageRoute(builder: (context) => const Imageslider()),
                        );
                      },
                      style: ButtonStyle(
                        backgroundColor: MaterialStateProperty.all<Color>(Colors.black12),
                      ),
                      child: const Text("Login",
                        style: TextStyle(
                            fontSize: 18,
                            color: Colors.black54),
                      ),
                    ),
                    const SizedBox(
                      height: 10.0,
                    ),
                    Container(
                      alignment: Alignment.bottomCenter,
                      child: Text(
                          _success == 1
                              ?''
                              : (
                              _success == 2
                                  ? 'Sign-in successful! '
                                  : 'Sign-in failed!'),
                          style: const TextStyle(
                            color: Colors.white70,
                          )
                      ),
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children:  [
                        TextButton(
                            onPressed: () {
                              Navigator.pushNamed(context,'signup');
                            },
                            child: const Text ('New User? Sign Up',
                              style : TextStyle(
                                decoration: TextDecoration.underline,
                                fontSize: 18,
                                color: Colors.black45,
                              ),
                            )),


                      ],

                    ),


                  ],

                ),
              ),
            ),
        ),
      );


  }
}

Sign Up Page Code:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';


import 'login.dart';
import 'startuppage.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;

class Mysignup extends StatefulWidget {
  const Mysignup({Key? key}) : super(key: key);

  @override
  State<Mysignup> createState() => _MysignupState();
}

class _MysignupState extends State<Mysignup> {

  Future<FirebaseApp> _initializeFirebase() async {
    FirebaseApp firebaseApp = await Firebase.initializeApp();
    return firebaseApp;
  }

  //editing controller
  final TextEditingController name = TextEditingController();
  final TextEditingController emailController = TextEditingController();
  final TextEditingController passwordController = TextEditingController();
  late bool _success;
  bool isLoading = false;

  Future<User?> _register(String name, String email, String password) async{
    FirebaseAuth _auth = FirebaseAuth.instance;

    FirebaseFirestore _firestore = FirebaseFirestore.instance;
    try {
      UserCredential userCrendetial =  await _auth.createUserWithEmailAndPassword(email: emailController.text, password: passwordController.text);

      print("Account created Succesfull");

      userCrendetial.user?.updateDisplayName(name);


      await _firestore.collection('users').doc(_auth.currentUser?.uid).set({
        "name": name,
        "email": email,
        "uid": _auth.currentUser?.uid,
      });

      return userCrendetial.user;
    } catch (e) {
      print(e);
      return null;
    }
  }




  @override
  Widget build(BuildContext context) {
    return Container(
      decoration:  const BoxDecoration(
        gradient: LinearGradient
          (colors: [
          Color(0xFF02aab0),
          Color(0xFF00cdac)
        ],
        ),
      ),
      child : Scaffold(
        backgroundColor: Colors.transparent, //By default, in scaffold the bg color is white.

        body: Container(
          padding: const EdgeInsets.only(top: 150, left: 35, right: 35),
          child: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.start,
              children:  [
                const Text(
                  "Let's Create Together.",
                  style:  TextStyle(
                    color: Colors.black,
                    fontSize: 30,
                    letterSpacing: 3,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                const SizedBox(
                  height: 40.0,
                ),
                TextField(
                  controller:name,
                  keyboardType: TextInputType.name,
                  decoration:  const InputDecoration(
                      hintText: "Name",
                      prefixIcon: Icon(Icons.account_circle_rounded, color: Colors.black,)
                  ),
                ),

                const SizedBox(
                  height: 20.0,
                ),
                TextField(
                  controller:emailController,
                  keyboardType: TextInputType.emailAddress,
                  decoration:  const InputDecoration(
                      hintText: "Email",
                      prefixIcon: Icon(Icons.mail, color: Colors.black,)
                  ),
                ),
                const SizedBox(
                  height: 20.0,
                ),
                TextField(
                  controller:passwordController,
                  obscureText: true,
                  keyboardType: TextInputType.visiblePassword,
                  decoration:  const InputDecoration(
                      hintText: "Password",
                      prefixIcon: Icon(Icons.lock, color: Colors.black,)
                  ),
                ),
                const SizedBox(
                  height: 80.0,
                ),
                ElevatedButton(
                  onPressed: () async{
                    if (name.text.isNotEmpty &&
                        emailController.text.isNotEmpty &&
                        passwordController.text.isNotEmpty) {
                      setState(() {
                        isLoading = true;
                      });

                     _register(name.text, emailController.text, passwordController.text).then((user) {
                        if (user == null) {
                          setState(() {
                            isLoading = false;
                          });
                          Navigator.push(
                              context, MaterialPageRoute(builder: (_) => MyLogin()));
                          print("Account Created Sucessful");
                        } else {
                          print("Login Failed");
                          setState(() {
                            isLoading = false;
                          });
                        }
                      });
                    } else {

                      print("Please enter all the fields");
                    }
                  },
                  style: ButtonStyle(
                    backgroundColor: MaterialStateProperty.all<Color>(Colors.black12),
                  ),
                  child: const Text("Sign Up",
                    style: TextStyle(
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                        color: Colors.black54),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );


  }
}

I’m a beginner in FLutter. Please help. Thanks in advance!

Leave a Comment