Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Flatter应用程序使用firebase登录谷歌_Firebase_Flutter_Google Signin_Flutter Dependencies - Fatal编程技术网

通过Flatter应用程序使用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

我已经为我创建了这个新项目,我没有任何错误,但我无法在firebase中看到我的用户。我不能在这里打开我的导航器,它应该在我登录后自动打开。尽管应用程序一打开就会显示谷歌账户,但代码如下

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