Commit 35e87f95 authored by “Icebear”'s avatar “Icebear”

完成登录数据的存储

parent 0c56b7ac
...@@ -8,6 +8,7 @@ import 'laishanqi/layout_page.dart'; ...@@ -8,6 +8,7 @@ import 'laishanqi/layout_page.dart';
import 'laishanqi/netrain/user/loginPage.dart'; import 'laishanqi/netrain/user/loginPage.dart';
import 'laishanqi/netrain/user/RegisterPage.dart'; import 'laishanqi/netrain/user/RegisterPage.dart';
import 'laishanqi/photo.dart'; import 'laishanqi/photo.dart';
import 'zhangfeng/UserData.dart';
import 'zhangfeng/LoginPage.dart'; import 'zhangfeng/LoginPage.dart';
...@@ -15,6 +16,7 @@ void main() { ...@@ -15,6 +16,7 @@ void main() {
runApp(MyApp()); runApp(MyApp());
// runApp(Login()); // runApp(Login());
// runApp(TestPage()); // runApp(TestPage());
UserData.instance;
print("启动"); print("启动");
} }
......
import 'Network/HttpManager.dart'; import 'Network/HttpManager.dart';
import 'Network/BaseHttpModel.dart'; import 'Network/BaseHttpModel.dart';
import 'Network/UrlPath.dart'; import 'UserModel.dart';
import 'UserData.dart';
/// 所有接口类 /// 所有接口类
class LoginApi { class LoginApi {
///示例请求 ///示例请求
static loginRequest(Map<String, dynamic> param) { static loginRequest(Map<String, dynamic> param, OnResult onResult) {
return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){ return HttpManager.getInstance().request('auth/oauth/token', parameters: param, onResult: (data,errorMsg){
BaseHttpModel httpModel = data; BaseHttpModel httpModel = data;
print(httpModel.data); UserModel userModel = UserModel.fromJson(httpModel.data);
UserData.getInstance().saveUserModel(userModel);
if(onResult != null){
onResult(data, errorMsg);
}
}); });
} }
} }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:netrain_flutter_app/zhangfeng/Network/HttpManager.dart';
import 'LoginApi.dart'; import 'LoginApi.dart';
import 'UserData.dart';
class LoginRequestPage extends StatefulWidget { class LoginRequestPage extends StatefulWidget {
final String title = "登录页"; final String title = "登录页";
@override @override
_LoginState createState() => _LoginState(); _LoginState createState() => _LoginState();
} }
...@@ -12,6 +14,10 @@ class LoginRequestPage extends StatefulWidget { ...@@ -12,6 +14,10 @@ class LoginRequestPage extends StatefulWidget {
class _LoginState extends State<LoginRequestPage> { class _LoginState extends State<LoginRequestPage> {
// This widget is the root of your application. // This widget is the root of your application.
void _loginAction() { void _loginAction() {
if(UserData.instance.userModel != null && UserData.instance.userModel.token != null){
Fluttertoast.showToast(msg:'已经登录');
return;
}
Map<String,String> map = new Map<String,String>(); Map<String,String> map = new Map<String,String>();
map['workNumber'] = 'NTR000007'; map['workNumber'] = 'NTR000007';
map['password'] = '123456'; map['password'] = '123456';
...@@ -20,7 +26,17 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -20,7 +26,17 @@ class _LoginState extends State<LoginRequestPage> {
map['client_id'] = 'app'; map['client_id'] = 'app';
map['client_secret'] = '123456'; map['client_secret'] = '123456';
map['platform'] = '0'; map['platform'] = '0';
LoginApi.loginRequest(map); LoginApi.loginRequest(map, (httpModel, error){
if(error != null){
Fluttertoast.showToast(msg: error);
}else{
Fluttertoast.showToast(msg:'登录成功');
}
});
}
void _logoutAction() {
UserData.instance.removeUserModel();
Fluttertoast.showToast(msg:'退出成功');
} }
@override @override
...@@ -37,6 +53,10 @@ class _LoginState extends State<LoginRequestPage> { ...@@ -37,6 +53,10 @@ class _LoginState extends State<LoginRequestPage> {
onPressed: _loginAction, onPressed: _loginAction,
child:Icon(Icons.add), child:Icon(Icons.add),
), ),
FloatingActionButton(
onPressed: _logoutAction,
child:Icon(Icons.add),
),
], ],
), ),
), // This trailing comma makes auto-formatting nicer for build methods. ), // This trailing comma makes auto-formatting nicer for build methods.
......
...@@ -14,7 +14,7 @@ class BaseHttpModel{ ...@@ -14,7 +14,7 @@ class BaseHttpModel{
Map<String, dynamic> toJson() => _$BaseHttpModelToJson(this); Map<String, dynamic> toJson() => _$BaseHttpModelToJson(this);
bool isSuccess(){ bool isSuccess(){
return this.code == 200; return this.code == 0;
} }
String errorMsg() { String errorMsg() {
......
...@@ -3,6 +3,8 @@ import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart'; ...@@ -3,6 +3,8 @@ import 'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart';
import 'BaseHttpModel.dart'; import 'BaseHttpModel.dart';
import 'UrlPath.dart'; import 'UrlPath.dart';
typedef OnResult = void Function(BaseHttpModel t, String errorMsg) ;
class HttpManager { class HttpManager {
static HttpManager _instance = HttpManager._internal(); static HttpManager _instance = HttpManager._internal();
Dio _dio; Dio _dio;
...@@ -46,7 +48,7 @@ class HttpManager { ...@@ -46,7 +48,7 @@ class HttpManager {
request(String url, request(String url,
{parameters, {parameters,
method = 'GET', method = 'GET',
Function(BaseHttpModel t, String errorMsg) onResult}) async { OnResult onResult}) async {
parameters = parameters ?? {}; parameters = parameters ?? {};
if(onResult==null){ if(onResult==null){
return; return;
...@@ -55,7 +57,7 @@ class HttpManager { ...@@ -55,7 +57,7 @@ class HttpManager {
Response response = await _dio.request(url, Response response = await _dio.request(url,
queryParameters: parameters, options: new Options(method: method)); queryParameters: parameters, options: new Options(method: method));
BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data); BaseHttpModel httpModel = BaseHttpModel.fromJson(response.data);
if (httpModel.isSuccess() == true) { if (httpModel.isSuccess()) {
onResult(httpModel, null); onResult(httpModel, null);
}else{ }else{
onResult(httpModel, httpModel.errorMsg()); onResult(httpModel, httpModel.errorMsg());
......
import 'dart:convert';
import 'UserModel.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserData {
UserModel userModel;
factory UserData() => getInstance();
static UserData get instance => getInstance();
static UserData _instance;
static UserData getInstance() {
if (_instance == null) {
_instance = new UserData._internal();
}
return _instance;
}
UserData._internal() {
// 初始化
getUserModel();
}
saveUserModel(UserModel userModel) async {
SharedPreferences pref= await SharedPreferences.getInstance();
//将data转换成json字符串
var jsonStr = json.encode(userModel);
pref.setString('UserModel',jsonStr);
this.userModel = userModel;
}
// 读取 SharedPreferences
getUserModel() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final jsonStr = prefs.getString('UserModel');
if(jsonStr != null && jsonStr.length > 0){
//先将json字符串转json
Map json = jsonDecode(jsonStr);
//将json转model
final model = new UserModel.fromJson(json);
this.userModel = model;
}
}
removeUserModel() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('UserModel',"");
this.userModel = null;
}
}
\ No newline at end of file
import 'package:json_annotation/json_annotation.dart';
part 'UserModel.g.dart';
@JsonSerializable()
class UserModel{
final token;
final header;
final tokenHead;
UserModel(this.token, this.header, this.tokenHead);
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
Map<String, dynamic> toJson() => _$UserModelToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'UserModel.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
UserModel _$UserModelFromJson(Map<String, dynamic> json) {
return UserModel(
json['token'],
json['header'],
json['tokenHead'],
);
}
Map<String, dynamic> _$UserModelToJson(UserModel instance) => <String, dynamic>{
'token': instance.token,
'header': instance.header,
'tokenHead': instance.tokenHead,
};
...@@ -42,7 +42,7 @@ dependencies: ...@@ -42,7 +42,7 @@ dependencies:
dio: ^4.0.0 #网络库 dio: ^4.0.0 #网络库
convert: ^3.0.1 #转码器 convert: ^3.0.1 #转码器
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
shared_preferences: ^2.0.6
dev_dependencies: dev_dependencies:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment