selfteaching / How-To-Ask-Questions-The-Smart-Way

573 stars 291 forks source link

error: The name 'FirebaseUser' isn't a type so it can't be used as a type argument. (non_type_as_type_argument at [tunedin] lib/main.dart:31) #8

Closed goc20 closed 3 years ago

goc20 commented 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();

@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(); } }, ), ); } }

Screenshot 2020-11-26 at 1 12 44 PM

//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();
    }));
  }
});

} }

Screenshot 2020-11-26 at 1 13 05 PM

//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(); }

} Screenshot 2020-11-26 at 1 13 27 PM Screenshot 2020-11-26 at 1 13 42 PM

//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(); }