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