Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 颤振+;SharedReferences:如何使用FutureBuilder_Firebase_Flutter_Dart_Firebase Authentication_Sharedpreferences - Fatal编程技术网

Firebase 颤振+;SharedReferences:如何使用FutureBuilder

Firebase 颤振+;SharedReferences:如何使用FutureBuilder,firebase,flutter,dart,firebase-authentication,sharedpreferences,Firebase,Flutter,Dart,Firebase Authentication,Sharedpreferences,我正在尝试构建一个Wrapper()小部件,它基于3个不同的因素返回LoginScreen或HomeScreen() 如果用户是否为空 是否验证了电子邮件 如果应用程序已启动,是否为首次启动 我的问题是未来不会被未来建设者触发 我怎样才能解决这个问题?泰 import'package:client/providers/auth_provider.dart'; 进口“包装:颤振/材料.省道”; 导入“包:firebase_auth/firebase_auth.dart”; 导入“包:provid

我正在尝试构建一个
Wrapper()
小部件,它基于3个不同的因素返回LoginScreen或HomeScreen()

  • 如果用户是否为空
  • 是否验证了电子邮件
  • 如果应用程序已启动,是否为首次启动
  • 我的问题是未来不会被未来建设者触发

    我怎样才能解决这个问题?泰

    import'package:client/providers/auth_provider.dart';
    进口“包装:颤振/材料.省道”;
    导入“包:firebase_auth/firebase_auth.dart”;
    导入“包:provider/provider.dart”;
    导入“package:shared_preferences/shared_preferences.dart”;
    导入“../screens/home_screen.dart”;
    导入“../screens/login_screen.dart”;
    类包装器扩展了StatefulWidget{
    @凌驾
    _WrapperState createState()=>\u WrapperState();
    }
    类_包装器状态扩展状态{
    FirebaseAuth auth=FirebaseAuth.instance;
    @凌驾
    void initState(){
    super.initState();
    }
    @凌驾
    小部件构建(构建上下文){
    返回FutureBuilder(生成器:(上下文,快照){
    如果(snapshot.data==true){
    返回提供程序。of(上下文)!=null&&
    snapshot.hasData==true&&
    AuthProvider().isEmailVerified
    ?主屏幕()
    :LoginScreen();
    }否则{
    返回LoginScreen();
    }
    });
    }
    Future hasAlreadyStarted()异步{
    试一试{
    SharedReferences prefs=等待SharedReferences.getInstance();
    if(prefs.getBool(“首次运行”)==null||
    prefs.getBool(“首次运行”)==true){
    打印(首选getBool(“首次运行”);
    prefs.setBool(“第一次运行”,false);
    返回false;
    }否则{
    打印(首选getBool(“首次运行”);
    返回true;
    }
    }捕获(错误){
    打印(“错误”);
    返回false;
    }
    }
    
    }
    您需要将方法
    hasAlreadyStarted
    分配给属性
    future

    return FutureBuilder(future: hasAlreadyStarted(),
       builder: (context, snapshot) {
          if (snapshot.data == true) {
            return Provider.of<User>(context) != null &&
                    snapshot.hasData == true &&
                    AuthProvider().isEmailVerified
                ? HomeScreen()
                : LoginScreen();
          } else {
            return LoginScreen();
          }
        });
    
    return FutureBuilder(future:hasAlreadyStarted(),
    生成器:(上下文,快照){
    如果(snapshot.data==true){
    返回提供程序。of(上下文)!=null&&
    snapshot.hasData==true&&
    AuthProvider().isEmailVerified
    ?主屏幕()
    :LoginScreen();
    }否则{
    返回LoginScreen();
    }
    });
    
    检查:


    您需要将方法
    hasAlreadyStarted
    分配给属性
    future

    return FutureBuilder(future: hasAlreadyStarted(),
       builder: (context, snapshot) {
          if (snapshot.data == true) {
            return Provider.of<User>(context) != null &&
                    snapshot.hasData == true &&
                    AuthProvider().isEmailVerified
                ? HomeScreen()
                : LoginScreen();
          } else {
            return LoginScreen();
          }
        });
    
    return FutureBuilder(future:hasAlreadyStarted(),
    生成器:(上下文,快照){
    如果(snapshot.data==true){
    返回提供程序。of(上下文)!=null&&
    snapshot.hasData==true&&
    AuthProvider().isEmailVerified
    ?主屏幕()
    :LoginScreen();
    }否则{
    返回LoginScreen();
    }
    });
    
    检查: