前言:
在原生的andriod 和iOS app里面都会有自动登录的功能 今天我就用flutter 来给大家实现双端的自动登录功能
Android 端用的是 Sharedpreferences 来实现对于轻量级数据的缓存 , IOS端 通常使用NSUserDefaults 来实现轻量级数据的缓存
但是在flutter 有基于Android iOS 做支持的三方插件库 shared_preferences
1准备工作
需要用的三方库
shared_preferences: ^0.5.3+4 (缓存数据)
dio: 2.1.0 (网络请求)
toast: ^0.1.5 (吐司文字类比 Android里面的toast)
![image](https://upload-images.jianshu.io/upload_images/6865547-2751f061ff0fbde3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在项目里面的pubspec.yaml 添加依赖 然后在项目根目录打开控制台输入 flutter pub get 命令回去下载相对应的依赖
2具体实现
先实现登录界面的功能
![image](https://upload-images.jianshu.io/upload_images/6865547-8fa5f96a22ee14a1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
登录页面是两个输入框TextFiled 和一个RaisedButton 来实现请求后台来处理登录功能
通过Dio库来实现异步网络请求 然后 通过 factory BackBean.fromJson 来转换成对象
在登录成功后通过 SharedPreferences 来储存数据 如下图所示 在登录成功后调用sharedPreferences.setString ()方法来存数据
![image](https://upload-images.jianshu.io/upload_images/6865547-fd21e1e89d1e7467.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面是登录页面的具体实现
```
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:dio/dio.dart';
import 'tabs/Api.dart';
import 'entity/BackBean.dart';
import 'utils/ToastUtil.dart';
import 'Register.dart';
import 'My.dart';
/**
* 创建人:xuqing
* 创建时间:2019年12月22日19:28:56
* 类说明: 登录页面 业务需求通过 dio 网络请求库 和 shared_preferences 数据缓存库 来实现自动登录功能*
*/
class Loginextends StatefulWidget {
Login({Key key}) :super(key: key);
@override
_LoginStatecreateState() {
return _LoginState();
}
}
class _LoginSt