通过Flatter应用程序使用firebase登录谷歌
我已经为我创建了这个新项目,我没有任何错误,但我无法在firebase中看到我的用户。我不能在这里打开我的导航器,它应该在我登录后自动打开。尽管应用程序一打开就会显示谷歌账户,但代码如下通过Flatter应用程序使用firebase登录谷歌,firebase,flutter,google-signin,flutter-dependencies,Firebase,Flutter,Google Signin,Flutter Dependencies,我已经为我创建了这个新项目,我没有任何错误,但我无法在firebase中看到我的用户。我不能在这里打开我的导航器,它应该在我登录后自动打开。尽管应用程序一打开就会显示谷歌账户,但代码如下 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext c
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'chat app',
theme: ThemeData(
primarySwatch: Colors.pink,
accentColor: Colors.purple,
),
home: MyHomePage(),
);
}
}
这是我的主页,在这里登录
// /import 'dart:ffi';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:fluttershare/pages/create_account.dart';
import 'package:google_sign_in/google_sign_in.dart';
import './pages/timeline.dart';
import './pages/upload.dart';
import './pages/activity_feed.dart';
import './pages/search.dart';
import './pages/profile.dart';
final GoogleSignIn googleSignIn = GoogleSignIn();
final usersRef = Firestore.instance.collection("users");
final timestamp = DateTime.now();
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool isAuth = false;
int index = 0;
PageController pageController;
@override
void initState() {
super.initState();
pageController = PageController(initialPage: 2);
googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
handleSignIn(account);
});
googleSignIn.signInSilently(suppressErrors: false).then((account) {
handleSignIn(account);
}).catchError((e) {
print(e);
});
}
void dispose() {
pageController.dispose();
super.dispose();
}
handleSignIn(GoogleSignInAccount account) {
if (account != null) {
setState(
() {
isAuth = true;
},
);
} else {
setState(() {
isAuth = false;
});
}
}
Future<void> createUserInFireStore() async {
final GoogleSignInAccount user = googleSignIn.currentUser;
DocumentSnapshot doc = await usersRef.document(user.id).get();
if (!doc.exists) {
String userName;
userName = await Navigator.of(context)
.push(MaterialPageRoute(builder: (conetext) => CreateAccount()));
userRef.document(user.id).setData({
"id": user.id,
"userNAme": userName,
"photoUrl": user.photoUrl,
"email": user.email,
"displayName": user.displayName,
"bio": "",
"timeStamp": timestamp
});
}
}
login() {
googleSignIn.signIn();
}
logout() {
googleSignIn.signOut();
}
onPageChanged(int index) {
setState(() {
this.index = index;
});
}
onTap(int index) {
pageController.animateToPage(
index,
duration: Duration(milliseconds: 250),
curve: Curves.fastOutSlowIn,
);
}
Widget buildAuthScreen() {
return Scaffold(
body: PageView(
children: <Widget>[
RaisedButton(child: Text("logout"), onPressed: logout),
// Timeline(),
ActivityFeed(),
Upload(),
Search(),
Profile(),
],
controller: pageController,
onPageChanged: onPageChanged,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.whatshot), title: Text("timeline")),
BottomNavigationBarItem(
icon: Icon(Icons.notifications_active),
title: Text("activity feed")),
BottomNavigationBarItem(
icon: Icon(
Icons.photo_camera,
),
title: Text("upload")),
BottomNavigationBarItem(
icon: Icon(Icons.search), title: Text("search")),
BottomNavigationBarItem(
icon: Icon(Icons.account_circle), title: Text("profile")),
],
selectedItemColor: Theme.of(context).primaryColor,
selectedIconTheme: IconThemeData(
size: 35,
),
showSelectedLabels: true,
unselectedItemColor: Colors.grey,
backgroundColor: Theme.of(context).accentColor,
onTap: onTap,
currentIndex: index,
type: BottomNavigationBarType.shifting,
),
);
}
Scaffold buildUnAuthScreen() {
return Scaffold(
body: Container(
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [
Colors.pink,
Colors.purple,
])),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Card(
elevation: 8,
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [
Colors.purple,
Colors.pink,
])),
child: Text(
"Whore Market",
style: TextStyle(
fontFamily: "Bebas",
fontSize: 80,
color: Colors.white,
),
textAlign: TextAlign.center,
),
),
),
GestureDetector(
onTap: () => login(),
child: Container(
width: 260,
height: 60,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/google_signin_button.png"),
fit: BoxFit.cover,
),
),
),
)
],
),
),
);
}
@override
Widget build(BuildContext context) {
return isAuth ? buildAuthScreen() : buildUnAuthScreen();
}
}
///导入“dart:ffi”;
导入“包:cloud_firestore/cloud_firestore.dart”;
进口“包装:颤振/材料.省道”;
导入“package:share/pages/create_account.dart”;
导入“包:google_sign_in/google_sign_in.dart”;
导入“./pages/timeline.dart”;
导入“./pages/upload.dart”;
导入“./pages/activity_feed.dart”;
导入“./pages/search.dart”;
导入“./pages/profile.dart”;
最终谷歌签名谷歌签名=谷歌签名();
final usersRef=Firestore.instance.collection(“用户”);
最终时间戳=DateTime.now();
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
bool-isAuth=false;
int指数=0;
页面控制器;
@凌驾
void initState(){
super.initState();
pageController=pageController(初始页:2);
googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount帐户){
handleSignIn(账户);
});
googleSignIn.signalily(suppressErrors:false)。然后((帐户){
handleSignIn(账户);
}).catchError((e){
印刷品(e);
});
}
无效处置(){
pageController.dispose();
super.dispose();
}
handleSignIn(谷歌签名账户){
如果(帐户!=null){
设定状态(
() {
isAuth=true;
},
);
}否则{
设置状态(){
isAuth=false;
});
}
}
未来createUserInFireStore()异步{
最终GoogleSignInAccount用户=googleSignIn.currentUser;
DocumentSnapshot doc=await usersRef.document(user.id.get();
如果(!doc.存在){
字符串用户名;
userName=wait Navigator.of(上下文)
.push(materialpage路径(builder:(conetext)=>CreateAccount());
userRef.document(user.id).setData({
“id”:user.id,
“用户名”:用户名,
“photoUrl”:user.photoUrl,
“电子邮件”:user.email,
“displayName”:user.displayName,
“生物”:“生物”,
“时间戳”:时间戳
});
}
}
登录(){
谷歌签名;
}
注销(){
googleSignIn.signOut();
}
onPageChanged(整型索引){
设置状态(){
这个指数=指数;
});
}
onTap(整数索引){
pageController.animateToPage(
指数
持续时间:持续时间(毫秒:250),
曲线:Curves.FastOutSwowin,
);
}
Widget buildAuthScreen(){
返回脚手架(
正文:页面视图(
儿童:[
升起按钮(子项:文本(“注销”),按下时:注销),
//时间轴(),
ActivityFeed(),
上载(),
搜索(),
Profile(),
],
控制器:页面控制器,
onPageChanged:onPageChanged,
物理学:NeverscrollableScroll物理学(),
),
底部导航栏:底部导航栏(
项目:[
底部导航气压计(
图标:图标(Icons.whatshot),标题:文本(“时间线”),
底部导航气压计(
图标:图标(图标。通知处于活动状态),
标题:文本(“活动提要”),
底部导航气压计(
图标:图标(
图标。照相/摄像机,
),
标题:文本(“上传”),
底部导航气压计(
图标:图标(Icons.search),标题:文本(“search”),
底部导航气压计(
图标:图标(Icons.account\u circle),标题:文本(“profile”),
],
selectedItemColor:Theme.of(context).primaryColor,
选择主题:图标主题数据(
尺码:35,
),
showSelectedLabels:true,
unselectedItemColor:Colors.grey,
背景色:主题。背景色,
onTap:onTap,
当前索引:索引,
类型:BottomNavigationBarType.Shift,
),
);
}
脚手架搭设安全网(){
返回脚手架(
主体:容器(
宽度:MediaQuery.of(context).size.width,
装饰:盒子装饰(
梯度:线性梯度(
开始:Alignment.topRight,
结束:对齐。左下角,
颜色:[
颜色,粉色,
颜色,紫色,
])),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
卡片(
立面图:8,
子:容器(
装饰:盒子装饰(
梯度:线性梯度(
开始:Alignment.topRight,
结束:对齐。左下角,
颜色:[
颜色,紫色,
颜色,粉色,
])),
子:文本(
“妓女市场”,
样式:TextStyle(
fontFamily:“贝巴斯”,
尺寸:80,
颜色:颜色,白色,
),
textAlign:textAlign.center,
),
),
),
手势检测器(
onTap:()=>login(),
子:容器(
宽度:260,
身高:60,
装饰:盒子装饰(
图像:装饰图像(
图片:AssetImage(“assets/images/google\u sign\u button.png”),
适合:BoxFit.cover,
),
),
),
)
],
),
),
);
}
@凌驾
小部件建筑
import 'package:flutter/material.dart';
import 'package:fluttershare/widgets/header.dart';
class CreateAccount extends StatefulWidget {
@override
_CreateAccountState createState() => _CreateAccountState();
}
class _CreateAccountState extends State<CreateAccount> {
String userName;
final _formKey =GlobalKey<FormState>();
submit() {
_formKey.currentState.save();
Navigator.pop(context, userName);
}
@override
Widget build(BuildContext parentContext) {
return Scaffold(
appBar: header(context, title: "set up your profile"),
body: ListView(
children: <Widget>[
Container(
height: 50,
width: 350,
child: Form(
key: _formKey,
child: TextFormField(
onSaved: (val)=> userName = val,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "username",
labelStyle: TextStyle(fontSize: 15.0),
hintText: "must have 8 char"),
))),
GestureDetector(
onTap: submit(),
child: Container(
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(7.0)
),
child: Center(
child: Text("Submit",
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
)),
),
),
)
],
),
);
}
}
if (!doc.exists) {
await userRef.document(user.id).setData({
"id": user.id,
"userNAme": userName,
"photoUrl": user.photoUrl,
"email": user.email,
"displayName": user.displayName,
"bio": "",
"timeStamp": timestamp
});
Navigator.of(context)
.push(MaterialPageRoute(builder: (conetext) => CreateAccount()));
}