Flutter + SharedPreferences:如何使用 FutureBuilder [英] Flutter + SharedPreferences: how to use FutureBuilder
本文介绍了Flutter + SharedPreferences:如何使用 FutureBuilder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试构建一个基于 3 个不同因素返回 LoginScreen 或 HomeScreen() 的 Wrapper()
小部件:
I'm trying to build a Wrapper()
widget that return either the LoginScreen or the HomeScreen() based on 3 different factors:
- 用户是否为空
- 电子邮件是否通过验证
- 如果应用程序是第一次启动与否
我遇到的问题是 FutureBuilder 不会触发 Future...
The problem I have is that the Future doesn't get triggered by the FutureBuilder...
我该如何解决这个问题?类型
How can I solve this ? Ty
import 'package:client/providers/auth_provider.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../screens/home_screen.dart';
import '../screens/login_screen.dart';
class Wrapper extends StatefulWidget {
@override
_WrapperState createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
FirebaseAuth auth = FirebaseAuth.instance;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(builder: (context, snapshot) {
if (snapshot.data == true) {
return Provider.of<User>(context) != null &&
snapshot.hasData == true &&
AuthProvider().isEmailVerified
? HomeScreen()
: LoginScreen();
} else {
return LoginScreen();
}
});
}
Future<bool> hasAlreadyStarted() async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (prefs.getBool("first_run") == null ||
prefs.getBool("first_run") == true) {
print(prefs.getBool("first_run"));
prefs.setBool("first_run", false);
return false;
} else {
print(prefs.getBool("first_run"));
return true;
}
} catch (error) {
print("error");
return false;
}
}
}
推荐答案
您需要将方法 hasAlreadyStarted
分配给属性 future
:
You need to assign the method hasAlreadyStarted
to the property 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();
}
});
检查:
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
这篇关于Flutter + SharedPreferences:如何使用 FutureBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文