如何解决如何自动登录?
我一直在研究身份验证逻辑,并尝试了很多方法,以便我可以通知应用程序侦听器并立即自动登录保存按钮被点击,但结果并不好。我做错了什么?
非常感谢。
main.dart 文件
home: FutureBuilder(
future: userPref.isLoggedIn(),builder: (ctx,AsyncSnapshot<void> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return SplashScreen();
}
return !userPref.isLogin ? AuthScreen() : WelcomeScreen();
},),
auth_form
///tries to submit data entered
void _trySubmit() {
```
if(isValid) {
_formKey.currentState.save();
print('name = $_name,filePath = $_pickedImageFilePath');
//save to shared pref
UserPref userPref = UserPref();
userPref.save(_name,_pickedImageFilePath);
}
}
还有user_pref文件
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserPref with ChangeNotifier {
SharedPreferences prefs;
final String nameKey = 'username';
final String filePathKey = 'filePath';
final String loginKey = 'isLogin';
bool _isLogin = false;
var userData = {
'username': '','imagepath': '',};
///save user data
void save(String name,String filePath) async {
prefs = await SharedPreferences.getInstance();
await prefs.setString(nameKey,name);
await prefs.setString(filePathKey,filePath);
await prefs.setBool(loginKey,true);
notifyListeners();
print('UserPref: data saved');
}
///check if user already logged in
Future<void> isLoggedIn() async {
prefs = await SharedPreferences.getInstance();
//is user login data saved
_isLogin = prefs.getBool(loginKey) ?? false;
}
bool get isLogin {
return _isLogin;
}
}
解决方法
从这个问题的标签来看,我假设您正在使用 provider 作为您的状态管理解决方案。
FutureBuilder
是一个只会评估未来一次的小部件。如果您想持续订阅值的更改,则必须使用 Consumer
:
Consumer<CartModel>(
builder: (context,cart,child) {
return Text("Total price: ${cart.totalPrice}");
},
以下是一个简单的示例,说明如何使用提供程序监听值更改: https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
,我终于明白了! 在auth_form我改变了
UserPref userPref = UserPref(); userPref.save(_name,_pickedImageFilePath);
到
Provider.of<UserPref>(context,listen:false).save(_name,_pickedImageFilePath);
主要区别在于使用 Provider
小部件保存数据,而不是直接使用 UserPref
类保存数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。