Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Firebase 将state设置为字符串将返回null,Firestore带flatter_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 将state设置为字符串将返回null,Firestore带flatter

Firebase 将state设置为字符串将返回null,Firestore带flatter,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个启动屏幕,我想在其中控制以下内容: 1.如果用户已注销,请将用户带到登录屏幕。 2.如果用户已登录,但firestore中没有数据。将用户转到SetupAccountPage 3.若用户登录并有数据进入主页。 我的问题是字符串值(_controller)返回null。当用户注销并且在用户登录时工作正常时。我很困惑。我给了代码一些加载时间,但没有帮助 如果有人知道这里出了什么问题,请帮助他们。 下面是我的代码 import 'dart:async'; import 'package:ap

我有一个启动屏幕,我想在其中控制以下内容: 1.如果用户已注销,请将用户带到登录屏幕。 2.如果用户已登录,但firestore中没有数据。将用户转到SetupAccountPage 3.若用户登录并有数据进入主页。 我的问题是字符串值(_controller)返回null。当用户注销并且在用户登录时工作正常时。我很困惑。我给了代码一些加载时间,但没有帮助

如果有人知道这里出了什么问题,请帮助他们。 下面是我的代码

import 'dart:async';

import 'package:app/model/user.dart';
import 'package:app/pages/HomePage.dart';
import 'package:app/pages/SetupAccountPage.dart';
import 'package:app/screens/home/home.dart';
import 'package:app/screens/onboarding.dart';
import 'package:app/screens/setup_profile.dart';
import 'package:app/shared/loading.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class Wrapper extends StatefulWidget {
  @override
  _WrapperState createState() => _WrapperState();
}

class _WrapperState extends State<Wrapper> {
  //FirebaseUser user;
  String onlineUserId;
  String _controller;

  @override
  void initState() {
    super.initState();
    _checkUser();
    Timer(Duration(seconds: 5), () {
      print('done');
      if (_controller == 'out') {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => OnBoardingScreen(),
          ),
        );
      } else if (_controller == 'info') {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => SetupAccountPage(),
          ),
        );
      } else if (_controller == 'home') {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => HomePage(),
          ),
        );
      }
      ;
    });
  }

  _checkUser() async {
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final uid = user.uid;

    if (await FirebaseAuth.instance.currentUser() == null) {
      setState(() {
        _controller = 'out';
      });
    } else {
      final snapShot =
          await Firestore.instance.collection('Users').document(user.uid).get();
      if (snapShot.exists) {
        setState(() {
          _controller = 'home';
        });
        // Document with id == docId doesn't exist.
      } else {
        setState(() {
          _controller = 'info';
        });
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          Container(
            decoration: BoxDecoration(color: Colors.redAccent),
          ),
          Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              Expanded(
                flex: 2,
                child: Container(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      CircleAvatar(
                        backgroundColor: Colors.white,
                        radius: 50.0,
                        child: Icon(
                          Icons.shopping_cart,
                          color: Colors.greenAccent,
                          size: 50.0,
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.only(top: 10.0),
                      ),
                      Text(
                        'this is a name',
                        style: TextStyle(
                            color: Colors.white,
                            fontWeight: FontWeight.bold,
                            fontSize: 24.0),
                      )
                    ],
                  ),
                ),
              ),
              Expanded(
                flex: 1,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    CircularProgressIndicator(),
                    Padding(
                      padding: EdgeInsets.only(top: 20.0),
                    ),
                    Text(
                      'another name',
                      softWrap: true,
                      textAlign: TextAlign.center,
                      style: TextStyle(
                          fontWeight: FontWeight.bold,
                          fontSize: 18.0,
                          color: Colors.white),
                    )
                  ],
                ),
              )
            ],
          )
        ],
      ),
    );
  }
}

导入'dart:async';
导入“包:app/model/user.dart”;
导入“包:app/pages/HomePage.dart”;
导入“包:app/pages/SetupAccountPage.dart”;
导入“包:app/screens/home/home.dart”;
导入“包:应用程序/屏幕/登录.dart”;
导入“包:应用程序/屏幕/设置_profile.dart”;
导入“包:app/shared/loading.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
进口“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
类包装器扩展了StatefulWidget{
@凌驾
_WrapperState createState()=>\u WrapperState();
}
类_包装器状态扩展状态{
//FirebaseUser用户;
字符串onlineUserId;
字符串控制器;
@凌驾
void initState(){
super.initState();
_checkUser();
计时器(持续时间(秒数:5),(){
打印(“完成”);
如果(_controller==“out”){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>OnBoardingScreen(),
),
);
}else if(_controller==“info”){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>SetupAccountPage(),
),
);
}否则如果(_controller==“home”){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>主页(),
),
);
}
;
});
}
_checkUser()异步{
final FirebaseUser user=等待FirebaseAuth.instance.currentUser();
最终uid=user.uid;
if(等待FirebaseAuth.instance.currentUser()==null){
设置状态(){
_控制器='out';
});
}否则{
最终快照=
等待Firestore.instance.collection('Users').document(user.uid.get();
if(snapShot.exists){
设置状态(){
_控制器='主';
});
//id==docId的文档不存在。
}否则{
设置状态(){
_控制器='info';
});
}
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
fit:StackFit.expand,
儿童:[
容器(
装饰:盒子装饰(颜色:颜色。红色调),
),
纵队(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
扩大(
弹性:2,
子:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
圆形(
背景颜色:Colors.white,
半径:50.0,
子:图标(
图标。购物车,
颜色:Colors.greenAccent,
尺寸:50.0,
),
),
填充物(
填充:仅限边缘设置(顶部:10.0),
),
正文(
“这是一个名字”,
样式:TextStyle(
颜色:颜色,白色,
fontWeight:fontWeight.bold,
字体大小:24.0),
)
],
),
),
),
扩大(
弹性:1,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
CircularProgressIndicator(),
填充物(
填充:仅限边缘设置(顶部:20.0),
),
正文(
“另一个名字”,
软包装:是的,
textAlign:textAlign.center,
样式:TextStyle(
fontWeight:fontWeight.bold,
字体大小:18.0,
颜色:颜色。白色),
)
],
),
)
],
)
],
),
);
}
}

我终于找到了答案。原因是用户返回了一个未来,这是丢失的代码

Future<FirebaseUser> getUser() async {
    return await _auth.currentUser();
  }
Future getUser()异步{
返回wait_auth.currentUser();
}

final FirebaseUser=await FirebaseAuth.instance.currentUser()是一个讽刺