Kaynağa Gözat

登录接口对接

daxu0403 7 yıl önce
ebeveyn
işleme
fef7636a83

+ 1 - 1
.packages

@@ -1,4 +1,4 @@
-# Generated by pub on 2019-03-09 14:17:22.566811.
+# Generated by pub on 2019-03-11 10:21:19.965848.
 async:file:///Users/daxu/app/flutter/.pub-cache/hosted/pub.dartlang.org/async-2.0.8/lib/
 boolean_selector:file:///Users/daxu/app/flutter/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.4/lib/
 charcode:file:///Users/daxu/app/flutter/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.2/lib/

BIN
android/.gradle/4.10.2/fileHashes/fileHashes.bin


BIN
android/.gradle/4.10.2/fileHashes/fileHashes.lock


BIN
android/.gradle/4.10.2/taskHistory/taskHistory.bin


BIN
android/.gradle/4.10.2/taskHistory/taskHistory.lock


BIN
android/.gradle/buildOutputCleanup/buildOutputCleanup.lock


BIN
lib/images/loading.gif


+ 54 - 10
lib/login_page.dart

@@ -1,7 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'util/session.dart';
 import 'home_page.dart';
 import 'util/api.dart';
+import 'showAlert.dart';
 
 
 class LoginPage extends StatefulWidget {
@@ -15,8 +17,9 @@ class LoginPage extends StatefulWidget {
 
 class _LoginPageState extends State < LoginPage > {
 
-  String phone;
-  String password;
+  String phone ='';
+  String password='';
+  bool loginStatus = true;
 
   @override
   Widget build(BuildContext context) {
@@ -72,26 +75,67 @@ class _LoginPageState extends State < LoginPage > {
                         setState(() {
                           password =value;
                         });
-                        print(password);
-                        print('111');
                       },
                     )
                   ),
-                  GestureDetector(
+                  InkWell(
                     child: Container(
                       height: ScreenUtil.getInstance().setHeight(100),
                       decoration: BoxDecoration(
-                        color: Color.fromRGBO(64, 98, 254, 1),
+                        color: (phone!=""&&password!="")?Color.fromRGBO(64, 98, 254, 1):Colors.grey,
                         borderRadius: BorderRadius.circular(4),
                       ),
                       child: Center(
-                        child: Text('登录', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36), color: Colors.white)),
+                        child:Row(
+                          mainAxisAlignment: MainAxisAlignment.center,
+                          children: <Widget>[
+                              Offstage(
+                                offstage: loginStatus,
+                                child: SizedBox(
+                                  width: ScreenUtil.getInstance().setWidth(45),
+                                  height: ScreenUtil.getInstance().setHeight(45),
+                                  child: Image.asset('lib/images/loading.gif'),
+                                ),
+                              ),
+                             Text('登录', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36), color: Colors.white)),
+                          ],
+                        )
                       ),
                     ),
                     onTap: () {
-                      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
-                        return HomePage();
-                      }));
+                      if(phone=='' || password==''){
+                        return;
+                      }
+                      setState(() {
+                        loginStatus = false;
+                      });
+                      login(phone,password).then((resp){
+                        if(resp.success){
+                          setKey('token', resp.data.token);
+                          setKey('phone',phone);
+                          setKey('password',password);
+                          Navigator.pushReplacement(context, MaterialPageRoute(builder: (context){
+                            return HomePage();
+                          }));
+                        }else{
+                          showDialog < Null > (
+                          context: context, //BuildContext对象
+                          barrierDismissible: false,
+                          builder: (BuildContext context) {
+                            return new LoadingDialog( //调用对话框
+                              text: '手机号或密码错误', childCallback: (val) {
+                                if (val) {
+                                  setState(() {
+                                    loginStatus = true;
+                                  });
+                                } else {
+                                  return;
+                                }
+                              },
+                            );
+                          });
+                        }
+                      });
                     },
                   )
                 ],

+ 11 - 1
lib/pages/my_page/revise_password_page.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
+import '../../util/session.dart';
 
 class RevisePasswordPage extends StatefulWidget {
   final Widget child;
@@ -53,7 +54,8 @@ class _RevisePasswordPageState extends State < RevisePasswordPage > {
                     ),
                   )
                   ),
-                  Container(
+                  InkWell(
+                    child:Container(
                     height: ScreenUtil.getInstance().setHeight(100),
                     decoration: BoxDecoration(
                       color: Color.fromRGBO(64,98,254,1),
@@ -63,6 +65,14 @@ class _RevisePasswordPageState extends State < RevisePasswordPage > {
                       child: Text('确认',style:TextStyle(fontSize:ScreenUtil.getInstance().setSp(36),color: Colors.white )),
                     ),
                   ), 
+                  onTap: (){
+                   getKey('phone').then((value){
+                       print(value);
+                   });
+                 
+                  },
+                  )
+                  
                 ],
               ),
             )

+ 78 - 0
lib/showAlert.dart

@@ -0,0 +1,78 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+// ignore: must_be_immutable
+class LoadingDialog extends Dialog {
+  String text;
+  final childCallback;
+
+  LoadingDialog({
+    Key key,
+    @required this.text,
+    @required this.childCallback
+  }): super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return new Material( //创建透明层
+      type: MaterialType.transparency, //透明类型
+      child: new Center( //保证控件居中效果
+        child: Container(
+          width: ScreenUtil.getInstance().setWidth(554),
+          height: ScreenUtil.getInstance().setHeight(345),
+          decoration: BoxDecoration(
+            color: Colors.white,
+            borderRadius: BorderRadius.all(Radius.circular(8))
+          ),
+          child: new Container(
+            child: new Column(
+              children: < Widget > [
+                Container(
+                  height: ScreenUtil.getInstance().setHeight(255),
+                  decoration: BoxDecoration(
+                    border: Border(bottom: BorderSide(width: 1, color: Color.fromRGBO(151, 151, 151, 0.27)))
+                  ),
+                  child: Center(
+                    child: Text(text, style: TextStyle(
+                      fontSize: ScreenUtil.getInstance().setSp(32)
+                    ), )
+                  ),
+                ),
+                Expanded(
+                  flex: 1,
+                  child: Container(
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: < Widget > [
+                        Expanded(
+                          flex: 1,
+                          child: InkWell(
+                            child: Container(
+                              decoration: BoxDecoration(
+                                border: Border(right: BorderSide(width: 1, color: Color.fromRGBO(151, 151, 151, 0.27))),
+                              ),
+                              child: Center(
+                                child: Text('确定',
+                                  style: TextStyle(
+                                    fontSize: ScreenUtil.getInstance().setSp(32),
+                                    color: Color.fromRGBO(64, 98, 254, 1)
+                                  ), ),
+                              )
+                            ),
+                            onTap: () {
+                              Navigator.pop(context);
+                              childCallback(true);
+                            },
+                          )
+                        ),
+                      ],
+                    ),
+                  )
+                )
+              ],
+            ),
+          ),
+        ),
+      ),
+    );
+  }
+}

+ 5 - 1
lib/util/api.dart

@@ -1,8 +1,12 @@
-import 'dart:convert';
 import 'request.dart';
 import 'models.dart';
 
 
+Future login(phone,passwrod) async{
+  var response =await Http().post('app/uzer/logistics/phone_login',data:{"phone":phone,"password":passwrod});
+  var loginResp =Login.fromJson(response);
+  return loginResp;
+}
 
 Future getOrderList()async{
   //var response = await Http().get("query",data: {"name":"haha"});

+ 1 - 1
lib/util/config.dart

@@ -1,5 +1,5 @@
 class Config{
-  String baseUrl = "https://www.easy-mock.com/mock/5c7356c306ffee27c6b2f0ff/example/";
+  String baseUrl = "http://39.105.182.68:8866/";
   int connectTimeout = 5000;
   int receiveTimeout = 5000;
 }

+ 70 - 19
lib/util/models.dart

@@ -1,21 +1,72 @@
-class OrderListObj{
-  List<OrderList> orderList;
+class Login{
+  bool success;
+  int code;
+  String msg;
+  LoginMap data;
+
+  Login({this.success,this.code,this.msg,this.data});
+
+  factory Login.fromJson(Map<String,dynamic> json){
+    LoginMap tempData = LoginMap.fromJson(json['data']);
+    return Login(
+      success: json['success'],
+      code:json['code'],
+      msg:json['msg'],
+      data:tempData
+    );
+  }
+}
+class LoginMap {
+  String avatarUrl;
+  String nickName;
+  int roleType;
+  String userId;
+  int status;
+  String token;
+
+  LoginMap({
+    this.userId,
+    this.avatarUrl,
+    this.nickName,
+    this.roleType,
+    this.status,
+    this.token
+  });
+
+  factory LoginMap.fromJson(Map < String, dynamic > json) {
+    return LoginMap(
+      avatarUrl: json['avatarUrl'],
+      nickName: json['nickName'],
+      roleType: json['roleType'],
+      userId: json['userId'],
+      status: json['status'],
+      token: json['token'],
+
+    );
+  }
+}
+
+class OrderListObj {
+  List < OrderList > orderList;
   bool hasNextPage;
 
-  OrderListObj({this.hasNextPage,this.orderList});
+  OrderListObj({
+    this.hasNextPage,
+    this.orderList
+  });
 
-  factory OrderListObj.fromJson(Map<String,dynamic> json){
+  factory OrderListObj.fromJson(Map < String, dynamic > json) {
     List list = json['items'] as List;
-    List<OrderList> tempOrderList = list.map((i)=>OrderList.fromJson(i)).toList();
+    List < OrderList > tempOrderList = list.map((i) => OrderList.fromJson(i)).toList();
     return OrderListObj(
-      hasNextPage:json['hasNextPage'],
+      hasNextPage: json['hasNextPage'],
       orderList: tempOrderList
     );
   }
 
 }
 
-class OrderList{
+class OrderList {
   int id;
   int orderNo;
   String createTime;
@@ -40,21 +91,21 @@ class OrderList{
     this.sendAddress,
     this.getPhone,
     this.getAddress
-    });
+  });
 
-  factory OrderList.fromJson(Map<String,dynamic> json){
+  factory OrderList.fromJson(Map < String, dynamic > json) {
     return OrderList(
-      id:json['id'],
-      orderNo:json['orderNo'],
-      createTime:json['createTime'],
-      startAddress:json['startAddress'],
-      endAddress:json['endAddress'],
-      itemName:json['itemName'],
-      itemNo:json['itemNo'],
-      sendPhone:json['sendPhone'],
+      id: json['id'],
+      orderNo: json['orderNo'],
+      createTime: json['createTime'],
+      startAddress: json['startAddress'],
+      endAddress: json['endAddress'],
+      itemName: json['itemName'],
+      itemNo: json['itemNo'],
+      sendPhone: json['sendPhone'],
       sendAddress: json['sendAddress'],
-      getPhone:json['getPhone'],
-      getAddress:json['getAddress']
+      getPhone: json['getPhone'],
+      getAddress: json['getAddress']
     );
   }
 }

+ 22 - 25
lib/util/request.dart

@@ -26,24 +26,22 @@ class Http {
     );
 
     _dio = new Dio(_options);
-
     // //发送请求拦截处理,例如:添加token使用
-    //   _dio.interceptor.request.onSend = (Options options) async{
-
-    //     print(options.baseUrl);
-    //     return options;
-    //   };
-
-    // //请求成功拦截,简化代码中调用难度
-    //   _dio.interceptor.response.onSuccess = (Response response) async{
-    //     print(response.statusCode);
-    //     return response;
-    //   };
-    // 	//请求失败拦截
-    //   _dio.interceptor.response.onError = (DioError e) {
-    //     print(e);
-    //     return e;
-    //   };
+    _dio.interceptors.add(InterceptorsWrapper(
+      onRequest: (RequestOptions options) {
+        // options.headers = {
+        //   token:'123'
+        // };
+        return options; //continue  
+      },
+      onResponse: (Response response) {
+       return response;
+      },
+      onError: (DioError e) {
+        print(e);
+        return e; //continue
+      }
+    ));
 
   }
 
@@ -56,11 +54,11 @@ class Http {
     print('get:::url:$url ,body: $data');
     Response response;
     try {
-        response = await _dio.get(
-          url,
-          queryParameters: data,
-          cancelToken: cancelToken
-        );
+      response = await _dio.get(
+        url,
+        queryParameters: data,
+        cancelToken: cancelToken
+      );
     }
     on DioError
     catch (e) {
@@ -88,14 +86,13 @@ class Http {
         data: data != null ? data : {},
         cancelToken: cancelToken
       );
-      print(response);
     }
     on DioError
     catch (e) {
       if (CancelToken.isCancel(e)) {
-        print('get请求取消! ' + e.message);
+        print('post请求取消! ' + e.message);
       } else {
-        print('get请求发生错误:$e');
+        print('post请求发生错误:$e');
       }
     }
     return response.data;

+ 17 - 0
lib/util/session.dart

@@ -0,0 +1,17 @@
+import 'package:shared_preferences/shared_preferences.dart';
+
+
+void setKey(key,value) async{
+  SharedPreferences prefs = await SharedPreferences.getInstance();
+  prefs.setString(key, value);
+}
+
+Future<String> getKey(key) async{
+  SharedPreferences prefs = await SharedPreferences.getInstance();
+  String value = await prefs.getString(key);
+  return value;
+}
+
+void clearKey(){
+
+}

+ 1 - 0
pubspec.yaml

@@ -71,6 +71,7 @@ flutter:
     - lib/images/icon_zhandianss.png
     - lib/images/icon_mimas.png
     - lib/images/icon_dayinji.png
+    - lib/images/loading.gif
   # An image asset can refer to one or more resolution-specific "variants", see
   # https://flutter.io/assets-and-images/#resolution-aware.