Closed goc20 closed 3 years ago
//this is main.dart file
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:tunedin/resources/firebase_repository.dart'; import 'package:tunedin/screens/home_screen.dart'; import 'package:tunedin/screens/login_screen.dart'; import 'package:firebase_core/firebase_core.dart';
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); }
class _MyAppState extends State { FirebaseRepository _repository = FirebaseRepository();
//this is my login_screen.dart file import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:tunedin/resources/firebase_repository.dart'; import 'package:shimmer/shimmer.dart'; import 'package:tunedin/utils/universal_variables.dart'; import 'home_screen.dart';
class LoginScreen extends StatefulWidget { @override LoginScreenState createState() => LoginScreenState(); }
class LoginScreenState extends State { FirebaseRepository _repository = FirebaseRepository();
bool isLoginPressed = false;
@override Widget build(BuildContext context) { _repository.signOut(); return Scaffold( backgroundColor: UniversalVariables.blackColor, body: Stack( children: [ Center( child: loginButton(), ), isLoginPressed ? Center( child: CircularProgressIndicator(), ) : Container() ], ), ); }
Widget loginButton() { return Shimmer.fromColors( baseColor: Colors.white, highlightColor: UniversalVariables.senderColor, child: FlatButton( padding: EdgeInsets.all(35), child: Text( "LOGIN", style: TextStyle( fontSize: 35, fontWeight: FontWeight.w900, letterSpacing: 1.2), ), onPressed: () => performLogin(), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), ), ); }
void performLogin() { print("tring to perform login");
setState(() { isLoginPressed = true; }); _repository.signIn().then((FirebaseUser user) { print("something"); if (user != null) { authenticateUser(user); } else { print("There was an error"); } });
}
void authenticateUser(FirebaseUser user) { _repository.authenticateUser(user).then((isNewUser) { setState(() { isLoginPressed = false; });
if (isNewUser) { _repository.addDataToDb(user).then((value) { Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) { return HomeScreen(); })); }); } else { Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) { return HomeScreen(); })); } });
//this is my firebase_methods.dart file import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:tunedin/models/user.dart'; import 'package:tunedin/utils/utilities.dart';
class FirebaseMethods { final FirebaseAuth _auth = FirebaseAuth.instance; GoogleSignIn _googleSignIn = GoogleSignIn(); static final Firestore firestore = Firestore.instance;
//user class User user = User();
Future getCurrentUser() async { FirebaseUser currentUser; currentUser = await _auth.currentUser(); return currentUser; }
Future signIn() async { GoogleSignInAccount _signInAccount = await _googleSignIn.signIn(); GoogleSignInAuthentication _signInAuthentication = await _signInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential( accessToken: _signInAuthentication.accessToken, idToken: _signInAuthentication.idToken); FirebaseUser user = await _auth.signInWithCredential(credential); return user;
Future authenticateUser(FirebaseUser user) async { QuerySnapshot result = await firestore .collection("users") .where("email", isEqualTo: user.email) .getDocuments();
final List<DocumentSnapshot> docs = result.documents; //if user is registered then length of list > 0 or else less than 0 return docs.length == 0 ? true : false;
Future addDataToDb(FirebaseUser currentUser) async { String username = Utils.getUsername(currentUser.email);
user = User( uid: currentUser.uid, email: currentUser.email, name: currentUser.displayName, profilePhoto: currentUser.photoUrl, username: username); firestore .collection("users") .document(currentUser.uid) .setData(user.toMap(user));
Future signOut() async { await _googleSignIn.disconnect(); await _googleSignIn.signOut(); return await _auth.signOut(); }
//firebse_repository.dart import 'package:firebase_auth/firebase_auth.dart'; import 'package:tunedin/resources/firebase_methods.dart';
class FirebaseRepository { FirebaseMethods _firebaseMethods = FirebaseMethods();
Future getCurrentUser() => _firebaseMethods.getCurrentUser();
Future signIn() => _firebaseMethods.signIn();
Future authenticateUser(FirebaseUser user) => _firebaseMethods.authenticateUser(user);
Future addDataToDb(FirebaseUser user) => _firebaseMethods.addDataToDb(user);
///responsible for signing out Future signOut() => _firebaseMethods.signOut(); }
//this is main.dart file
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:tunedin/resources/firebase_repository.dart'; import 'package:tunedin/screens/home_screen.dart'; import 'package:tunedin/screens/login_screen.dart'; import 'package:firebase_core/firebase_core.dart';
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); }
class _MyAppState extends State {
FirebaseRepository _repository = FirebaseRepository();
@override Widget build(BuildContext context) { return MaterialApp( title: "Skype Clone", debugShowCheckedModeBanner: false, home: FutureBuilder( future: _repository.getCurrentUser(), builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return HomeScreen();
} else {
return LoginScreen();
}
},
),
);
}
}
//this is my login_screen.dart file import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:tunedin/resources/firebase_repository.dart'; import 'package:shimmer/shimmer.dart'; import 'package:tunedin/utils/universal_variables.dart'; import 'home_screen.dart';
class LoginScreen extends StatefulWidget { @override LoginScreenState createState() => LoginScreenState(); }
class LoginScreenState extends State {
FirebaseRepository _repository = FirebaseRepository();
bool isLoginPressed = false;
@override Widget build(BuildContext context) { _repository.signOut(); return Scaffold( backgroundColor: UniversalVariables.blackColor, body: Stack( children: [ Center( child: loginButton(), ), isLoginPressed ? Center( child: CircularProgressIndicator(), ) : Container() ], ), ); }
Widget loginButton() { return Shimmer.fromColors( baseColor: Colors.white, highlightColor: UniversalVariables.senderColor, child: FlatButton( padding: EdgeInsets.all(35), child: Text( "LOGIN", style: TextStyle( fontSize: 35, fontWeight: FontWeight.w900, letterSpacing: 1.2), ), onPressed: () => performLogin(), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), ), ); }
void performLogin() { print("tring to perform login");
}
void authenticateUser(FirebaseUser user) { _repository.authenticateUser(user).then((isNewUser) { setState(() { isLoginPressed = false; });
} }
//this is my firebase_methods.dart file import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:tunedin/models/user.dart'; import 'package:tunedin/utils/utilities.dart';
class FirebaseMethods { final FirebaseAuth _auth = FirebaseAuth.instance; GoogleSignIn _googleSignIn = GoogleSignIn(); static final Firestore firestore = Firestore.instance;
//user class User user = User();
Future getCurrentUser() async {
FirebaseUser currentUser;
currentUser = await _auth.currentUser();
return currentUser;
}
Future signIn() async {
GoogleSignInAccount _signInAccount = await _googleSignIn.signIn();
GoogleSignInAuthentication _signInAuthentication =
await _signInAccount.authentication;
}
Future authenticateUser(FirebaseUser user) async {
QuerySnapshot result = await firestore
.collection("users")
.where("email", isEqualTo: user.email)
.getDocuments();
}
Future addDataToDb(FirebaseUser currentUser) async {
String username = Utils.getUsername(currentUser.email);
}
Future signOut() async {
await _googleSignIn.disconnect();
await _googleSignIn.signOut();
return await _auth.signOut();
}
}
//firebse_repository.dart import 'package:firebase_auth/firebase_auth.dart'; import 'package:tunedin/resources/firebase_methods.dart';
class FirebaseRepository { FirebaseMethods _firebaseMethods = FirebaseMethods();
Future getCurrentUser() => _firebaseMethods.getCurrentUser();
Future signIn() => _firebaseMethods.signIn();
Future authenticateUser(FirebaseUser user) =>
_firebaseMethods.authenticateUser(user);
Future addDataToDb(FirebaseUser user) =>
_firebaseMethods.addDataToDb(user);
///responsible for signing out Future signOut() => _firebaseMethods.signOut();
}