Browse Source

完善登录注册,上报疫情页面

liuyuqi-dellpc 2 years ago
parent
commit
f3fc3736cb

+ 1 - 1
lib/dio/api.dart

@@ -2,7 +2,7 @@ import 'package:flutter_tracker/model/user_model.dart';
 
 abstract class Api {
   static const String _host = "http://flutter.yoqi.me/Track";
-  static String loginUrl = _host + "/login";
+  static String loginUrl = _host + "/loginByPass";
   static String logoutUrl = _host + "/logout";
   static String registerUrl = _host + "/register";
   static String getUserInfoUrl = _host + "/getUserInfo";

+ 18 - 22
lib/dio/login_dao.dart

@@ -1,50 +1,46 @@
 import 'package:dio/dio.dart';
 import 'package:flutter_tracker/dio/api.dart';
+import 'package:flutter_tracker/model/login_entity.dart';
+import 'package:flutter_tracker/model/message_model.dart';
 import 'package:flutter_tracker/model/user_model.dart';
 
 class LoginDao {
   static Map<String, dynamic> params = <String, dynamic>{};
 
-  static Future<UserModel> login(String username, String password) async {
+  static Future<LoginEntity> login(String username, String password) async {
     params.addAll({"username": username, "password": password});
     try {
-      Response response = await Dio().post(
-          Api.loginUrl, queryParameters: params);
-      return UserModel.fromJson(response.data);
-    }catch(e){
+      Response response = await Dio().post(Api.loginUrl, data: params);
+      return LoginEntity.fromJson(response.data);
+    } catch (e) {
       return null;
     }
   }
 
-  static Future<bool> logout(String token) async {
+  static Future<MessageModel> logout(String token) async {
     params.addAll({"token": token});
     try {
-      Response response = await Dio().get(Api.logoutUrl);
-      if (response.statusCode == 200) {
-        if (response.data["success"] == "true") {
-          return true;
-        } else {
-          return false;
-        }
-      }
+      Response response = await Dio().post(Api.logoutUrl, data: params);
+      return MessageModel.fromJson(response.data);
     } catch (e) {
-      return false;
+      return null;
     }
   }
 
-  static Future<UserModel> register(String username, String password) async {
+  static Future<MessageModel> register(String username, String password) async {
     params.addAll({"username": username, "password": password});
     try {
-      Response response =
-          await Dio().post(Api.registerUrl, queryParameters: params);
-      return UserModel.fromJson(response.data);
-    } catch (e) {}
+      Response response = await Dio().post(Api.registerUrl, data: params);
+      if (response.data["success"] == true) {}
+      return MessageModel.fromJson(response.data);
+    } catch (e) {
+      return null;
+    }
   }
 
   static Future<UserModel> getUserInfo(String token) async {
     params.addAll({"token": token});
-    Response response =
-        await Dio().get(Api.getUserInfoUrl, queryParameters: params);
+    Response response = await Dio().post(Api.getUserInfoUrl, data: params);
     return UserModel.fromJson(response.data);
   }
 }

+ 3 - 2
lib/index_page.dart

@@ -13,11 +13,12 @@ class IndexPage extends StatefulWidget {
 class _IndexPageState extends State<IndexPage> {
   int navIndex = 0;
   List<Widget> pages = [
-    HomePage(url: "http://m.look.360.cn/subject/400?sign=360_6aa05217&stab=0"),
+    HomePage(url: "http://app.21jingji.com/html/2020yiqing/"),
     //https://xw.qq.com/act/qgfeiyan
     // https://www.ipe.org.cn/MapGZBD/XQMap.html
+    //http://m.look.360.cn/subject/400?sign=360_6aa05217&stab=0
     const TrackPage(),
-    const MinePage(),
+     MinePage(),
   ];
   Widget currentPage;
 

+ 11 - 10
lib/main.dart

@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
-import 'package:flutter_tracker/pages/login_page.dart';
+import 'package:flutter_tracker/pages/welcome_page.dart';
+import 'package:flutter_tracker/routes/routes.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 
 import 'index_page.dart';
@@ -28,15 +29,15 @@ class MyApp extends StatelessWidget {
   Widget build(BuildContext context) {
     return ScreenUtilInit(
       designSize: const Size(750, 1344),
-      builder: () =>
-          MaterialApp(
-            title: '追踪者',
-            theme: ThemeData(
-              primarySwatch: Colors.blue,
-            ),
-            debugShowCheckedModeBanner: false,
-            home: isLogin ? IndexPage() : LoginPage(),
-          ),
+      builder: () => MaterialApp(
+        title: '追踪者',
+        theme: ThemeData(
+          primarySwatch: Colors.blue,
+        ),
+        debugShowCheckedModeBanner: false,
+        home: isLogin ? IndexPage() : WelComePage(),
+        onGenerateRoute: Routes.generateRoute,
+      ),
     );
   }
 }

+ 7 - 9
lib/model/base_model.dart

@@ -1,13 +1,11 @@
-class BaseModel {
-  MsgModel msgModel;
-}
-
-class MsgModel {
+class BaseModel<T> {
   String msg;
+  bool success;
+  T data;
 
-  MsgModel({this.msg});
-
-  MsgModel.fromJson(Map<String, dynamic> json) {
-    msg = json['msg'];
+  BaseModel.fromJson(Map<String, dynamic> json) {
+    msg = json["msg"];
+    success = json["success"];
+    data = json["data"];
   }
 }

+ 17 - 0
lib/model/entity_factory.dart

@@ -0,0 +1,17 @@
+import 'package:flutter_tracker/model/submit_model.dart';
+import 'package:flutter_tracker/model/user_model.dart';
+
+class EntityFactory {
+  static T geneerateObj<T>(dynamic json) {
+    switch (T.toString()) {
+      case "UserModel":
+        return UserModel.fromJson(json) as T;
+        break;
+      case "SubmitModel":
+        return SubmitModel.fromJson(json) as T;
+        break;
+      default:
+        return null;
+    }
+  }
+}

+ 13 - 0
lib/model/login_entity.dart

@@ -0,0 +1,13 @@
+import 'package:flutter_tracker/model/message_model.dart';
+
+class LoginEntity {
+  String token;
+  MessageModel msgModel;
+
+  LoginEntity.fromJson(Map<String, dynamic> json) {
+    msgModel = MessageModel.fromJson(json);
+    if (msgModel.success) {
+      token = json["data"]["token"];
+    }
+  }
+}

+ 11 - 0
lib/model/message_model.dart

@@ -0,0 +1,11 @@
+class MessageModel<T> {
+  String msg;
+  bool success;
+  T data;
+
+  MessageModel.fromJson(Map<String, dynamic> json) {
+    msg = json["msg"];
+    success = json["success"];
+    data = json["data"];
+  }
+}

+ 16 - 7
lib/model/user_model.dart

@@ -1,6 +1,6 @@
-import 'base_model.dart';
+import 'package:flutter_tracker/model/message_model.dart';
 
-class UserModel extends BaseModel {
+class UserModel {
   String id; // 用户id
   String username; //用户名
   String pwd; // 密码
@@ -8,7 +8,6 @@ class UserModel extends BaseModel {
   int sex; // 性别:1男2女
   String avatar; // 头像
   int type; //类型:2商家,1顾客
-  String get token => null;
 
   UserModel(
       {this.id,
@@ -20,10 +19,20 @@ class UserModel extends BaseModel {
       this.type});
 
   UserModel.fromJson(Map<String, dynamic> json) {
-    msgModel = MsgModel.fromJson(json["msg"]);
-    if (msgModel.msg == "xx") {
-      id = json["id"];
-      avatar = json["avatar"];
+    avatar = json["avatar"];
+  }
+}
+
+class UserEntity {
+  UserModel user;
+  MessageModel msg;
+
+  UserEntity(this.user, this.msg);
+
+  UserEntity.fromJson(Map<String, dynamic> json) {
+    msg = MessageModel.fromJson(json);
+    if (msg.success) {
+      user = UserModel.fromJson(json);
     }
   }
 }

+ 16 - 10
lib/pages/login_page.dart

@@ -1,7 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_tracker/dio/login_dao.dart';
-import 'package:flutter_tracker/model/config.dart';
-import 'package:flutter_tracker/model/user_model.dart';
+import 'package:flutter_tracker/model/login_entity.dart';
+import 'package:flutter_tracker/routes/routes.dart';
+import 'package:flutter_tracker/utils/app_util.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 
 class LoginPage extends StatefulWidget {
@@ -76,7 +77,7 @@ class _LoginPageState extends State<LoginPage> {
                       Expanded(
                         child: RaisedButton(
                           padding: EdgeInsets.all(15),
-                          color: Theme.of(context).primaryColor,
+                          color: Colors.green,
                           textColor: Colors.white,
                           child: Text('登录'),
                           onPressed: () {
@@ -104,15 +105,20 @@ class _LoginPageState extends State<LoginPage> {
   }
 
   void login() async {
+    SharedPreferences prefs = await SharedPreferences.getInstance();
+
     if (_formKey.currentState.validate()) {
       _formKey.currentState.save();
-      UserModel userModel = await LoginDao.login(_username, _password);
-      if (userModel.username == "") {
-        Config.pref.setString('username', _username);
-        Config.pref.setString('password', _password);
-        Config.pref.setBool('isLogin', true);
-        Navigator.of(context).pushReplacementNamed('/home');
-      } else {}
+      LoginEntity loginEntity = await LoginDao.login(_username, _password);
+      if (loginEntity.msgModel.success) {
+        prefs.setString('username', _username);
+        prefs.setString('password', _password);
+        print("-------------token" + loginEntity.token);
+        // prefs.setString("token", loginEntity.token);
+        prefs.setBool('isLogin', true);
+        Navigator.of(context).pushNamed(Routes.indexPage);
+      }
+      AppUtil.buildToast(loginEntity.msgModel.msg);
     }
   }
 }

+ 81 - 15
lib/pages/mine_page.dart

@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_tracker/dio/login_dao.dart';
 import 'package:flutter_tracker/model/config.dart';
+import 'package:flutter_tracker/model/message_model.dart';
 import 'package:flutter_tracker/routes/routes.dart';
 import 'package:flutter_tracker/utils/app_util.dart';
 import 'package:shared_preferences/shared_preferences.dart';
@@ -14,6 +15,8 @@ class MinePage extends StatefulWidget {
 
 class _MinePageState extends State<MinePage> {
   Size get _size => MediaQuery.of(context).size;
+  String _name = "张三";
+  int type = 1;
 
   @override
   Widget build(BuildContext context) {
@@ -44,8 +47,8 @@ class _MinePageState extends State<MinePage> {
                     //   ),
                     // ),
 
-                    const Text(
-                      "网小儿",
+                    Text(
+                      _name,
                       style: TextStyle(fontSize: 25),
                     ),
                     const SizedBox(
@@ -62,11 +65,7 @@ class _MinePageState extends State<MinePage> {
                 height: 10,
               ),
               Text("健康状态:"),
-              Image.asset(
-                "assets/images/green.jpg",
-                width: 200,
-                height: 200,
-              ),
+              buildImgStatus(),
               const SizedBox(
                 height: 10,
               ),
@@ -132,6 +131,41 @@ class _MinePageState extends State<MinePage> {
               //     ],
               //   ),
               // ),
+              Offstage(
+                offstage: true,
+                child: Container(
+                  width: 200,
+                  child: InkWell(
+                    onTap: () {
+                      goSubmit();
+                    },
+                    child: Container(
+                      width: double.infinity,
+                      height: 50,
+                      padding: EdgeInsets.only(right: 20, left: 20),
+                      decoration: BoxDecoration(
+                          gradient: const LinearGradient(colors: [
+                            ThemeColor.loignColor,
+                            ThemeColor.loignColor
+                          ]),
+                          borderRadius: BorderRadius.circular(10),
+                          boxShadow: const [
+                            BoxShadow(
+                              offset: Offset(1.0, 5.0),
+                              color: ThemeColor.loignColor,
+                              blurRadius: 5.0,
+                            )
+                          ]),
+                      child: const Center(
+                        child: Text(
+                          "疫情上报",
+                          style: TextStyle(fontSize: 20, color: Colors.white),
+                        ),
+                      ),
+                    ),
+                  ),
+                ),
+              ),
               SizedBox(
                 height: 50,
               ),
@@ -174,29 +208,57 @@ class _MinePageState extends State<MinePage> {
     );
   }
 
+  Widget buildImgStatus() {
+    switch (type) {
+      case 1:
+        return Image.asset(
+          "assets/images/green.jpg",
+          width: 200,
+          height: 200,
+        );
+        break;
+      case 2:
+        return Image.asset(
+          "assets/images/yellow.jpg",
+          width: 200,
+          height: 200,
+        );
+        break;
+      case 3:
+        return Image.asset(
+          "assets/images/red.jpg",
+          width: 200,
+          height: 200,
+        );
+        break;
+    }
+  }
+
   @override
   void initState() {
     super.initState();
   }
 
-  void getUserInfo(String token) {
-
+  void getUserInfo(String token) async {
+    var sharedPreferences = await SharedPreferences.getInstance();
+    String token = sharedPreferences.getString("token");
+    await LoginDao.getUserInfo(token);
   }
 
   void logout() async {
     var sharedPreferences = await SharedPreferences.getInstance();
     String token = sharedPreferences.getString("token");
     try {
-      bool logoutResult = await LoginDao.logout(token);
-      if (logoutResult) {
-        AppUtil.buildToast("退出成功!");
-        Navigator.of(context).pushNamed(Routes.loginPage);
-      } else {
-        AppUtil.buildToast("退出异常,检测网络");
+      MessageModel messageModel = await LoginDao.logout(token);
+      if (messageModel != null) {
+        AppUtil.buildToast(messageModel.msg);
       }
     } catch (e) {
       AppUtil.buildToast("退出异常" + e.toString());
     }
+    Navigator.of(context).pushNamed(Routes.loginPage);
+    sharedPreferences.remove("token");
+    sharedPreferences.setBool("isLogin", false);
   }
 
   void aboutUs() {
@@ -206,4 +268,8 @@ class _MinePageState extends State<MinePage> {
   void goSetting() {
     AppUtil.buildToast("\"设置\"推出中..");
   }
+
+  void goSubmit() {
+    Navigator.of(context).pushNamed(Routes.submitPage);
+  }
 }

+ 9 - 8
lib/pages/register_page.dart

@@ -1,4 +1,8 @@
 import 'package:flutter/material.dart';
+import 'package:flutter_tracker/dio/login_dao.dart';
+import 'package:flutter_tracker/model/message_model.dart';
+import 'package:flutter_tracker/routes/routes.dart';
+import 'package:flutter_tracker/utils/app_util.dart';
 
 class RegisterPage extends StatefulWidget {
   const RegisterPage({Key key}) : super(key: key);
@@ -98,14 +102,11 @@ class _RegisterPageState extends State<RegisterPage> {
 
   //注册
   void register() async {
-    // UserModel loginEntity = await LoginDao.register(userName, password);
-    //注册成功挑战到登录界面
-    // if (loginEntity.userModel != null) {
-    //   DialogUtil.buildToast(loginEntity.msgModel.msg);
-    //   Navigator.of(context).pushNamed(Routes.loginPage);
-    // } else {
-    //   DialogUtil.buildToast(loginEntity.msgModel.msg);
-    // }
+    MessageModel messageModel = await LoginDao.register(_userName, _pwd);
+    if (messageModel.success) {
+      Navigator.of(context).pushNamed(Routes.loginPage);
+    }
+    AppUtil.buildToast(messageModel.msg);
   }
 
 // // //保存用户信息

+ 4 - 4
lib/routes/routes.dart

@@ -1,8 +1,8 @@
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_tracker/index_page.dart';
 import 'package:flutter_tracker/pages/about_page.dart';
 import 'package:flutter_tracker/pages/help_page.dart';
-import 'package:flutter_tracker/pages/home_page.dart';
 import 'package:flutter_tracker/pages/login_page.dart';
 import 'package:flutter_tracker/pages/mine_page.dart';
 import 'package:flutter_tracker/pages/register_page.dart';
@@ -11,7 +11,7 @@ import 'package:flutter_tracker/pages/track_page.dart';
 import 'package:flutter_tracker/pages/welcome_page.dart';
 
 class Routes {
-  static const String homePage = "/home";
+  static const String indexPage = "/index";
   static const String trackPage = '/track';
   static const String minePage = '/mine';
   static const String aboutPage = '/about_me';
@@ -23,8 +23,8 @@ class Routes {
 
   static Route<dynamic> generateRoute(RouteSettings settings) {
     switch (settings.name) {
-      case homePage:
-        return MaterialPageRoute(builder: (_) => HomePage());
+      case indexPage:
+        return MaterialPageRoute(builder: (_) => IndexPage());
         break;
       case trackPage:
         return MaterialPageRoute(builder: (_) => TrackPage());

+ 58 - 2
pubspec.lock

@@ -43,6 +43,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.15.0"
+  convert:
+    dependency: transitive
+    description:
+      name: convert
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.0.1"
   cupertino_icons:
     dependency: "direct main"
     description:
@@ -78,11 +85,32 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "6.1.2"
+  file_picker:
+    dependency: "direct main"
+    description:
+      name: file_picker
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.7"
+  fixnum:
+    dependency: transitive
+    description:
+      name: fixnum
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.0"
   flutter:
     dependency: "direct main"
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_blue:
+    dependency: "direct main"
+    description:
+      name: flutter_blue
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.8.0"
   flutter_lints:
     dependency: "direct dev"
     description:
@@ -90,6 +118,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.4"
+  flutter_plugin_android_lifecycle:
+    dependency: transitive
+    description:
+      name: flutter_plugin_android_lifecycle
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.11"
   flutter_screenutil:
     dependency: "direct main"
     description:
@@ -121,6 +156,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.0.0"
+  image_picker:
+    dependency: "direct main"
+    description:
+      name: image_picker
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.6.5+3"
   js:
     dependency: transitive
     description:
@@ -169,7 +211,7 @@ packages:
       name: path_provider_platform_interface
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.1"
+    version: "2.0.0"
   path_provider_windows:
     dependency: transitive
     description:
@@ -190,7 +232,7 @@ packages:
       name: plugin_platform_interface
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.2"
+    version: "1.0.3"
   process:
     dependency: transitive
     description:
@@ -198,6 +240,20 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.2.4"
+  protobuf:
+    dependency: transitive
+    description:
+      name: protobuf
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.1"
+  rxdart:
+    dependency: transitive
+    description:
+      name: rxdart
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.26.0"
   shared_preferences:
     dependency: "direct main"
     description:

+ 3 - 3
pubspec.yaml

@@ -13,10 +13,10 @@ dependencies:
   shared_preferences: ^2.0.7
   fluttertoast: ^8.0.8
   flutter_screenutil: ^5.0.0+2
-  #  image_packer: ^0.6.3+4
-  #  flutter_blue: ^
+  image_picker: ^0.6.3+4
+  file_picker: ^2.1.7
+  flutter_blue: ^0.8.0
   webview_flutter: ^0.3.24
-
 dev_dependencies:
   flutter_test:
     sdk: flutter