flutter - 颤振:我无法保持用户登录
问题描述
我想在他第一次登录后保持用户登录,但每次我从手机后台关闭应用程序时,用户注销并且必须从头重新登录
这是我登录的api方法
Future<dynamic> login(String email, String password ) async {
final Map<String, dynamic> body = {'email': email, 'password': password };
_isLoading = true;
notifyListeners();
http.Response response = await http.post(Environment.userLogin,
body: json.encode(body), headers: Environment.requestHeader);
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, dynamic> res = json.decode(response.body);
var results;
if (res['code'] == 200) {
_user = User.fromJson(res['message']);
prefs.setString('email', _user.email);
results = true;
} else {
results =
FailedRequest(code: 400, message: res['error'], status: false);
}
_isLoading = false;
notifyListeners();
return results;
}
这是主要功能
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
var email = prefs.getString('email');
print(email);
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]).then((_) => runApp(new MyApp()));
}
谁能帮我解决这个问题?
解决方案
DartPad上的示例
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FutureBuilder(
future: SharedPreferences.getInstance(),
builder: (BuildContext context, AsyncSnapshot<SharedPreferences> snapshot) {
if (!snapshot.hasData) return Container();
final isLoggedIn = snapshot.data.getString("email") != null;
return isLoggedIn ? Home() : Login();
},
),
);
}
}
推荐阅读
- python - 无法运行 sklearn 机器学习模型
- c# - 删除不可访问的文件和文件夹
- powershell - PowerShell - 如何删除签名
- mongodb - 查找特定于另一个字段的单个值的字段值,并且该字段的任何其他值都不存在
- vba - 如何对 VBA 代码进行单元测试?- 两个不同的指针
- css - Bootstrap 4 下拉列表 ul 列表不正确和固定位置
- c# - 实体框架搞砸了我的多对多自我关系
- angular - Angular 2:指令订阅服务的 Observables
- scala - 为 scala 代码写一个测试
- vim - 我可以在 Windows 10 的 WINdows 命令行中使用类似 vim 的命令吗?