Firebase Integration, Firebase Authentication, Firestore | RRTutors
Last updated Jul 13, 2019Hello Guys,
In this tutorial we are going to learn about Flutter Firebase authentication, Firestore integration.
Step 1:
Create a project in Any IDE.
Step 2:
Login to Firebase console
Then Create a project.
Once Project created you will navigates to Dashboard. There you will find the options like Android,Ios,Web
Select Android and download google-services.json file and put this inside your android app folder.
in Android Add
classpath 'com.google.gms:google-services:4.2.0'
in Project level gradle file
and in App level gradle file add
implementation 'com.google.firebase:firebase-core:17.0.0' in dependencies block and
apply plugin: 'com.google.gms.google-services' at the end of the file
Now go to pubspec.yaml file and add below dependencies under flutter SDK
cloud_firestore: ^0.12.7
firebase_auth: ^0.11.1+7
Before going to next step Read my previous post Flutter SQFlite Integration
Step 3:
Create a class files like below
Splash Screen
import 'package:flutter/material.dart'; import 'databases/UserDatabase.dart'; import 'home/home.dart'; import 'main.dart'; import 'models/user.dart'; import 'signup_login/LoginPage.dart'; class SplashPage extends StatefulWidget{ @override State createState() { // TODO: implement createState return SplashState(); } } class SplashState extends State { int login=101; int loginData; @override void initState() { // TODO: implement initState super.initState(); loginData=login; new Future.delayed(const Duration(seconds: 1), () { UserDatabase.instance.getUser().then((result){ setState(() { loginData=result; if(loginData==0) Navigator.pushReplacementNamed(context, "/login"); else Navigator.pushReplacementNamed(context, "/home"); print("Called Return value on state $loginData"); }); }); }); } @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( debugShowCheckedModeBanner: false, home: Container( child: Image.asset("splash_img.png",fit: BoxFit.cover,), )); } } |
Login Screen
import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter_firestroe/databases/UserDatabase.dart'; import 'package:flutter_firestroe/models/user.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; class LoginPage extends StatefulWidget{ @override State createState() { // TODO: implement createState return LoginState(); } } class LoginState extends State { final _formKey = GlobalKey(); final _scaffoldKey = GlobalKey(); final _emailEditController=TextEditingController(); final _passwordController=TextEditingController(); final FocusNode _mobileFocus = FocusNode(); final FocusNode _passwordFocus = FocusNode(); FirebaseAuth _auth=FirebaseAuth.instance; Firestore _firestore=Firestore.instance; String email_pattern = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; Size size; @override Widget build(BuildContext context) { size = MediaQuery.of(context).size; return new Scaffold( key: _scaffoldKey, backgroundColor: Colors.transparent, body: Stack( children:[ Container( height: size.height, decoration:BoxDecoration( gradient: LinearGradient( colors: [Colors.deepOrange,Colors.orange/*,const Color(0XFF388e3c)*/,], ), borderRadius: BorderRadius.only( topRight: Radius.circular(20), topLeft: Radius.circular(20), ) ) , ), Container( height: size.height, decoration:BoxDecoration( gradient: LinearGradient( colors: [const Color(0XFF424242),const Color(0XFF303030),const Color(0XFF212121),], ), borderRadius: BorderRadius.only( bottomLeft: Radius.circular(480), topRight: Radius.circular(20), topLeft: Radius.circular(20), ) ) , ), Padding( padding: EdgeInsets.only(left: 20,right: 20), child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.filter_drama,size: 100, color: Colors.white, ), SizedBox(height: 20,), TextFormField( controller: _emailEditController, textInputAction: TextInputAction.next, validator: (value){ RegExp regex =RegExp(email_pattern); if (!regex.hasMatch(value)) return 'Enter Valid Email'; else return null; }, keyboardType: TextInputType.emailAddress, style: getTextStyle(), decoration: customInputDecoration("Enter email id"),), SizedBox(height: 20,), TextFormField( textInputAction: TextInputAction.done, controller: _passwordController, keyboardType: TextInputType.text, obscureText: true, focusNode: _passwordFocus, validator: (value){ if(value.isEmpty) { return "Enter Password"; } return null; }, style: getTextStyle(), decoration: customInputDecoration("Enter password"), ), SizedBox(height: 20,), RaisedButton(onPressed: (){ if(_formKey.currentState.validate()) { showDialog(context: context, barrierDismissible: false, builder: (_)=>Material( color: Colors.transparent, child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ CircularProgressIndicator(), Text("Connecting..."), ], ), ), ) ); _auth.signInWithEmailAndPassword(email: _emailEditController.text, password: _passwordController.text) .then((res){ print(res.uid); _firestore.collection("users").document(res.uid).get().then( (_snapshot){ UserDatabase.instance.insertUser( User.fromMap(_snapshot.data)).then((res){ Navigator.pop(context); _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("Succesfully LogIn"+res.toString()))); Navigator.pushReplacementNamed(context, "/home"); }); } ).catchError((err){ Navigator.pop(context); _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text(err.message))); }); }).catchError((err){ Navigator.pop(context); _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text(err.message))); }); } }, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(18), ), color: Colors.orange, child: Text("Login", style: TextStyle(color: Colors.white,fontSize: 20),), ), FlatButton( child: Text("Don't have account, Signup?",style: TextStyle(color: Colors.white),), onPressed: (){ Navigator.pushReplacementNamed(context, "/signup"); }, ) ], ) ), ) ] , ), ); } TextStyle getTextStyle(){ return TextStyle( fontSize: 18, color: Colors.white ); } InputDecoration customInputDecoration(String hint) { return InputDecoration( hintText: hint, hintStyle: TextStyle( color: Colors.white70 ), contentPadding: EdgeInsets.all(10), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: Colors.white ) ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: Colors.white ) ), ); } /*[const Color(0XF46326),const Color(0XF57b28),]*/ } |
FirebaseAuth _auth=FirebaseAuth.instance;
Firestore _firestore=Firestore.instance;
These two lines will create FirebaseAuthentication, Firestore instances.
Home Screen
import 'package:flutter/material.dart'; import 'package:flutter_firestroe/databases/UserDatabase.dart'; import 'package:flutter_firestroe/models/user.dart'; class Homepage extends StatefulWidget{ @override State createState() { // TODO: implement createState return HomeState(); } } class HomeState extends State{ Size size; User user; @override void initState() { // TODO: implement initState super.initState(); UserDatabase.instance.getUserData().then((result){ setState(() { user=result; }); }); } @override Widget build(BuildContext context) { size=MediaQuery.of(context).size; return Scaffold( backgroundColor: Colors.transparent, body: Stack( children: [ Container( height: size.height, decoration:BoxDecoration( gradient: LinearGradient( colors: [Colors.deepOrange,Colors.orange/*,const Color(0XFF388e3c)*/,], ), borderRadius: BorderRadius.only( topRight: Radius.circular(20), topLeft: Radius.circular(20), bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20), ) ) , ), Scaffold( appBar: AppBar( title: Text("Home"), shape: RoundedRectangleBorder( borderRadius: BorderRadius.only( topRight: Radius.circular(20), topLeft: Radius.circular(20), ) ), backgroundColor: Colors.deepOrange, ), backgroundColor: Colors.transparent, body: Center( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Center( child: (user==null)?null:Text("Welcome User "+user.name, style:TextStyle( color: Colors.white, fontSize: 22, ) ,), ), Padding( padding: const EdgeInsets.all(12.0), child: RaisedButton( onPressed: (){ UserDatabase.instance.deleteUser(user.email).then((res){ if(res==1) { Navigator.pushReplacementNamed(context, "/login"); } }); }, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), color:Colors.pink, child: Text("Logout", style: TextStyle(color: Colors.white ),) ), ) ], ), ], ), ), ), ], ) ); } } |
get the complete code at rrtutors github account
TAGS : Flutter, Flutter Firebase, Flutter Firebase Authentication, FireStore, Flutter Routes, Flutter Navigators
Flutter Local database, SQFlite
Article Contributed By :
|
|
|
|
2340 Views |