我正在尝试使用Google登录进行登录。但这是错误的。我已经尝试了很多关于stackoverflow的解决方案。但仍然显示相同的错误。 firebase acoount也已连接。我尝试了另一个很好的例子。但是在此,我也正在使用Firebase通知。
这个main.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
//Firestore.instance.settings(timestampsInSnapshotsEnabled: true);
//await Firestore.instance.settings(host: "localhost:8080", sslEnabled: false);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Fanz',
debugShowCheckedModeBanner: false,
theme: ThemeData(
scaffoldBackgroundColor: Colors.black,
dialogBackgroundColor: Colors.black,
primarySwatch: Colors.grey,
accentColor: Colors.black,
cardColor: Colors.white70,
),
home: HomePage(),
);
}
}
Homepage.dart
final GoogleSignIn gSignIn = GoogleSignIn();
final usersReference = Firestore.instance.collection("users");
final StorageReference storageReference =
FirebaseStorage.instance.ref().child("Posts Pictures");
final postsReference = Firestore.instance.collection("posts");
final activityFeedReference = Firestore.instance.collection("feed");
final commentsRefrence = Firestore.instance.collection("comments");
final followersRefrence = Firestore.instance.collection("followers");
final followingRefrence = Firestore.instance.collection("following");
final timelineRefrence = Firestore.instance.collection("timeline");
final DateTime timestamp = DateTime.now();
User currentUser;
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool isSignedIn = false;
PageController pageController;
int getPageIndex = 0;
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
final _scaffoldKey = GlobalKey<ScaffoldState>();
void initState() {
secureScreen();
super.initState();
pageController = PageController();
gSignIn.onCurrentUserChanged.listen((gSigninAccount) {
controlSignIn(gSigninAccount);
}, onError: (gError) {
print("Error Message: " + gError);
});
gSignIn.signInSilently(suppressErrors: false).then((gSignInAccount) {
print("Arpit Singh1");
controlSignIn(gSignInAccount);
}).catchError((gError) {
print("Error Message: " + gError);
});
}
Future<void> secureScreen() async {
await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
}
controlSignIn(GoogleSignInAccount signInAccount) async {
if (signInAccount != null) {
print("Arpit Singh2");
await saveUserInfoToFireStore();
setState(() {
isSignedIn = true;
});
configureRealTimePushNotifications();
} else {
setState(() {
isSignedIn = false;
});
}
}
configureRealTimePushNotifications() {
final GoogleSignInAccount gUser = gSignIn.currentUser;
if (Platform.isIOS) {
getIOSPermissions();
}
_firebaseMessaging.getToken().then((token) {
usersReference
.document(gUser.id)
.updateData({"androidNotificationToken": token});
});
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> msg) async {
final String recipientId = msg["data"]["recipient"];
final String body = msg["notification"]["body"];
if (recipientId == gUser.id) {
SnackBar snackBar = SnackBar(
backgroundColor: Colors.grey,
content: Text(
body,
style: TextStyle(color: Colors.black),
overflow: TextOverflow.ellipsis,
),
);
_scaffoldKey.currentState.showSnackBar(snackBar);
}
},
);
}
getIOSPermissions() {
_firebaseMessaging.requestNotificationPermissions(
IosNotificationSettings(alert: true, badge: true, sound: true));
_firebaseMessaging.onIosSettingsRegistered.listen((settings) {
print("Settings Registered : $settings");
});
}
saveUserInfoToFireStore() async {
print("Arpit Singh3");
final GoogleSignInAccount gCurrentUser = gSignIn.currentUser;
DocumentSnapshot documentSnapshot =
await usersReference.document(gCurrentUser.id).get();
if (!documentSnapshot.exists) {
final username = await Navigator.push(context,
MaterialPageRoute(builder: (context) => CreateAccountPage()));
usersReference.document(gCurrentUser.id).setData({
"id": gCurrentUser.id,
"profileName": gCurrentUser.displayName,
"username": username,
"url": gCurrentUser.photoUrl,
"email": gCurrentUser.email,
"bio": "",
"timestamp": timestamp,
});
await followersRefrence
.document(gCurrentUser.id)
.collection("userFollowers")
.document(gCurrentUser.id)
.setData({});
documentSnapshot = await usersReference.document(gCurrentUser.id).get();
}
currentUser = User.fromDocument(documentSnapshot);
}
void dispose() {
pageController.dispose();
super.dispose();
}
loginUser() {
gSignIn.signIn();
}
logoutUser() {
gSignIn.signOut();
}
whenPageChanges(int pageIndex) {
setState(() {
this.getPageIndex = pageIndex;
});
}
onTapChangePage(int pageIndex) {
pageController.animateToPage(
pageIndex,
duration: Duration(milliseconds: 400),
curve: Curves.bounceInOut,
);
}
Scaffold buildHomeScreen() {
return Scaffold(
key: _scaffoldKey,
body: PageView(
children: <Widget>[
TimeLinePage(
gCurrentUser: currentUser,
),
SearchPage(),
UploadPage(
gCurrentUser: currentUser,
),
NotificationsPage(),
ProfilePage(userProfileId: currentUser?.id),
],
controller: pageController,
onPageChanged: whenPageChanges,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: CupertinoTabBar(
currentIndex: getPageIndex,
onTap: onTapChangePage,
backgroundColor: Theme.of(context).accentColor,
activeColor: Colors.white,
inactiveColor: Colors.blueGrey,
items: [
BottomNavigationBarItem(icon: Icon(Icons.home)),
BottomNavigationBarItem(icon: Icon(Icons.search)),
BottomNavigationBarItem(
icon: Icon(
Icons.photo_camera,
size: 37.0,
)),
BottomNavigationBarItem(icon: Icon(Icons.favorite)),
BottomNavigationBarItem(icon: Icon(Icons.person)),
],
),
);
}
Scaffold buildSignInScreen() {
return Scaffold(
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [
Theme.of(context).accentColor,
Theme.of(context).primaryColor
],
),
),
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
"Fanz",
style: TextStyle(
fontSize: 92.0, color: Colors.white, fontFamily: "Signatra"),
),
/* Padding(
padding: EdgeInsets.all(10.0),
child: SignInButton(
Buttons.Email,
text: "Sign up with Email",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => EmailSignUp()),
);
},
)),*/
GestureDetector(
onTap: loginUser,
child: Container(
width: 270.0,
height: 65.0,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/google_signin_button.png"),
fit: BoxFit.cover,
),
),
),
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
if (isSignedIn) {
return buildHomeScreen();
} else {
return buildSignInScreen();
}
}
}