Rishail Siddiqui
Rishail Siddiqui

Reputation: 79

Undefined name 'firebase' Flutter

Hello I am trying to implement firebase authentication in my flutter app I am getting this error Undefined name 'firebase'

Here is the code for reference:

import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:multi_purpose_scope/Animation/FadeAnimation.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';


Future<void>main() async{
    WidgetsFlutterBinding.ensureInitialized();
}

class HomePage extends StatelessWidget {
    final FirebaseApp _fbApp=Firebase.initializeApp();

    final _formKey = GlobalKey<FormState>();
    TextEditingController _emailController = TextEditingController();
    TextEditingController _passwordController = TextEditingController();


    gotoSecondActivity(BuildContext context){
        final mq=MediaQuery.of(context);
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => SecondActivity()),
        );
    }
    @override
    Widget build(BuildContext context) {

       TextEditingController _emailControllerField=TextEditingController();
       TextEditingController _passwordControllerField=TextEditingController();

        return Scaffold(

                backgroundColor: Colors.white,
                body: SingleChildScrollView(
                child: RaisedButton(
                    onPressed: () async {
                        gotoSecondActivity(context);
                      try{
                        FirebaseUser user=(await FirebaseAuth.instance.signInWithEmailAndPassword(
                                        email: _emailController.text,
                                        password: _passwordController.text,
                                ));

                        if(user!=null){
                                    Navigator.of(context).pushNamed(gotoSecondActivity(context).menu);
                                }
                            }
             catch(e){
                        print(e);
                        _emailController.text='';
                                _passwordController.text='';
                         }
        },

                child: Container(
                        child: Column(
                            children: <Widget>[
                                Container(
                                    height: 400,
                                    decoration: BoxDecoration(
                                            image: DecorationImage(
                                                    image: AssetImage('assets/images/loginHeader.png'),
                                                    fit: BoxFit.fill
                                            )
                                    ),
                                    child: Stack(
                                        children: <Widget>[
                                        ],
                                    ),
                                ),
                                Padding(
                                    padding: EdgeInsets.all(30.0),
                                    child: Column(
                                        children: <Widget>[
                                            FadeAnimation(1.8, Container(
                                                padding: EdgeInsets.all(5),
                                                decoration: BoxDecoration(
                                                        color: Colors.white,
                                                        borderRadius: BorderRadius.circular(10),
                                                        boxShadow: [
                                                            BoxShadow(
                                                                    color: Color.fromRGBO(143, 148, 251, .2),
                                                                    blurRadius: 20.0,
                                                                    offset: Offset(0, 10)
                                                            )
                                                        ]
                                                ),
                                                child: Column(
                                                    children: <Widget>[
                                                        Container(
                                                            padding: EdgeInsets.all(8.0),
                                                            decoration: BoxDecoration(
                                                                    border: Border(bottom: BorderSide(
                                                                            color: Colors.grey[100]))
                                                            ),
                                                            child: TextField(
                                                                    controller: _emailControllerField,
                                            keyboardType: TextInputType.emailAddress,
                                            decoration: InputDecoration(
                                                                        border: InputBorder.none,
                                                                        hintText: "Email or Phone number",
                                                                        hintStyle: TextStyle(
                                                                                color: Colors.grey[400])
                                                                ),
                                                            ),
                                                        ),
                                                        Container(
                                                            padding: EdgeInsets.all(8.0),
                                                            child: TextField(
                                                                obscureText: true,
                                                                controller: _passwordControllerField,
                                                                decoration: InputDecoration(
                                                                        border: InputBorder.none,
                                                                        hintText: "Password",
                                                                        hintStyle: TextStyle(
                                                                                color: Colors.grey[400])
                                                                ),
                                                            ),
                                                        )
                                                    ],
                                                ),
                                            )),
                                            SizedBox(height: 30,),
                                            FadeAnimation(2, Container(
                                                height: 50,
                                                decoration: BoxDecoration(
                                                        borderRadius: BorderRadius.circular(10),
                                                        gradient: LinearGradient(
                                                                colors: [
                                                                    Color.fromRGBO(214, 0, 27, 1),
                                                                    Color.fromRGBO(214, 0, 27, 1),
                                                                ]
                                                        )
                                                ),
                                                child: Center(
                                                    child: Text("Login", style: TextStyle(
                                                            color: Colors.white,
                                                            fontWeight: FontWeight.bold),),
                                                ),
                                            )),
                                            SizedBox(height: 70,),
                                            FadeAnimation(1.5, Text("Forgot Password?",
                                                style: TextStyle(
                                                        color: Color.fromRGBO(214, 0, 27, 1)),)),
                                        ],
                                    ),
                                )
                            ],
                        ),
                    ),
                )
                ),
        );
    }

}
class SecondActivity extends StatelessWidget {
    gotoRegister(BuildContext context){
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) =>Register()),
        );
    }
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                body: Container(
                    child: Container(
                        height: 174,
                        decoration: BoxDecoration(
                                image: DecorationImage(
                                        image: AssetImage('assets/images/patient_list.png'),
                                )
                        ),
                        child: Stack(
                            children: <Widget>[
                                Container(
                                    alignment: Alignment.center,
                                    height: 128,
                                    child: Text(
                                        'Patient List',
                                        style: TextStyle(
                                            fontWeight: FontWeight.bold,fontSize: 30,
                                            color: Colors.white
                                        ),
                                    ),
                                )

                            ],
                        ),
                    ),
                ),
        floatingActionButton: FloatingActionButton(
            onPressed: () {
                gotoRegister(context);
            },
        tooltip: 'Increment',
        child: Icon(Icons.add),
            backgroundColor: Color.fromRGBO(214, 0, 27,1),
        ),
            ),
        );
    }
}
class Register extends StatelessWidget {
    goBack(BuildContext context) {
        Navigator.pop(context);
    }

    @override
    Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                body: SafeArea(
                    child: Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 40),
                        child: Column(
                                children: <Widget>[
                                    Stack(
                                            alignment: Alignment.center,
                                            children: <Widget>[
                                                Image.asset('assets/images/patient_list.png'),
                                                Text('Registration',style: TextStyle(fontWeight:FontWeight.bold,fontSize: 30,color: Colors.white),)
                                            ]
                                    ),
                                    const SizedBox(height: 10),
                                    const SampleTextField(hintText: 'Enter Name'),
                                    const SizedBox(height:10),
                                    const SampleTextField(hintText: 'Enter MR-Number'),
                                    const SizedBox(height: 10),
                                    const SampleTextField(hintText: 'Enter Phone Number'),
                                    const SizedBox(height: 10),
                                    const SampleTextField(hintText: 'Enter Hospital Name'),
                                    const SizedBox(height:10),
                                    FlatButton(
                                        onPressed: () {

                                        },

                                        shape: RoundedRectangleBorder(
                                            borderRadius: BorderRadius.circular(20),
                                        ),
                                        // materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                                        // visualDensity: VisualDensity.compact,
                                        padding: const EdgeInsets.symmetric(vertical: 20),
                                        color: Color.fromRGBO(214, 0, 27,1),
                                        child: const Center(
                                            child: Text('Register User'),
                                        ),
                                    ),
                                ]
                        ),
                    ),
                ),
            ),
        );
    }
}
class SampleTextField extends StatelessWidget {
    const SampleTextField({
        this.controller,
        this.hintText = '',
    });

    final TextEditingController controller;
    final String hintText;

    @override
    Widget build(BuildContext context) {
        return TextField(
            controller: controller,
            decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(10),
                    borderSide: const BorderSide(
                        width: 1,
                        color: Colors.black54,
                    ),
                ),
                hintText: hintText,
                hintStyle: const TextStyle(
                    color: Colors.black54,
                ),
                contentPadding: const EdgeInsets.only(left: 20),
            ),
            // textAlign: TextAlign.center,   // Align vertically and horizontally
        );
    }
}
class ForgotPassword extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
        return MaterialApp(
                home: Scaffold(
                body: SafeArea(
                child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 40),
                        child: Column(
                children: <Widget>[

                        const SizedBox(height: 10),
                        const SampleTextField(hintText: 'Enter Your Email'),
                        FlatButton(
                            onPressed: () {

                            },
                            shape: RoundedRectangleBorder(
                                borderRadius: BorderRadius.circular(20),
                            ),
                            padding: const EdgeInsets.symmetric(vertical: 20),
                        ),
                        ]
                ),
                ),
        ),
        ),
        );
}
}

I googled my problem but can't seem to find the solution to my problem. I do know that there is something wrong with my initialization but i cant seem to connect the dots and find out where am i going wrong

Upvotes: 9

Views: 14766

Answers (6)

Isaac Chambers
Isaac Chambers

Reputation: 141

I had a similar problem. Using firebase_core : ^1.0.1 worked for me in Ubuntu.

Upvotes: 1

Eray Hamurlu
Eray Hamurlu

Reputation: 783

Add 'firebase_core: ^1.7.0' to pubspec.yaml file. And then flutter pub get. problem will solved.

Upvotes: 1

Miguel Nuno
Miguel Nuno

Reputation: 135

You have to have the firebase core package added

firebase_core: ^7.0.1 (check the actual package version) flutter pub get

and add the package to your code

import 'package:firebase_core/firebase_core.dart';
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(HomePage());
}

Upvotes: 9

Muhammad bin Yusrat
Muhammad bin Yusrat

Reputation: 1463

I fixed the issue by upgrading to a newer version of firebase_core (I went with 1.0.0)

Upvotes: 4

soft_and_ware
soft_and_ware

Reputation: 109

As Shubham already mentioned you have to initialize the Firebase instance before using it - although it doesn't necessarily have to be put into main. You can initialize it anywhere outside of the widget in which you are trying to use the Firebase instance. Firebase lazily creates its instance (most likely via proxy pattern) because its creation is expensive. Therefore it can't find it immediately after you are trying to reference it :)

Upvotes: 0

Shubham Narkhede
Shubham Narkhede

Reputation: 2130

You need to initialize your Firebase into your main method

First flutter pub get

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(HomePage());
}

Upvotes: 0

Related Questions