user_model.dart 4.47 KB
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/models/user.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/utils/log_util.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';

import '../app.dart';

class UserModel with ChangeNotifier {
  User _user;
  String _registrationId;//极光推送registrationId
  String _token;//信鸽推送token

  User get user => _user;

  set registrationId(String registrationId)=>_registrationId=registrationId;

  String get registrationId =>_registrationId;


  String get token => _token;

  set token(String value) {
    _token = value;
  }

  /// 初始化 User
  void initUser() {
    if (App.sp.containsKey('user')) {
      String s = App.sp.getString('user');
      _user = User.fromJson(json.decode(s));
    }
  }

  /// 登录
  Future<String> login(BuildContext context, Map<String, String> params) async {
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.app_user_login,
            data: params)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code != Constant.status_success) {
      return baseResp.msg ?? '登录失败,请检查账号密码';
    } else {
      Map<String, dynamic> seller = baseResp.data[0]["seller"];
      Map<String, dynamic> user = baseResp.data[0]["user"];
      Map<String, dynamic> userMap = {
        "openid": user['id'],
        "account": user['account'],
        "role_name": user['role_name'],
        "sellerid": seller['id'],
        "sellercode": params['seller_code'],
        "sellername": seller['sellername'],
        "sellerphone": seller['seller_tel'],
        "sellerAddr": '',
        "scatter": 0,
        "room": 0,
        "cassette": 0,
        "morning": "",
        "noon": "",
        "night": "",
      };
      _saveUserInfo(User.fromJson(userMap));
      return getSellerInfo(
          context,
          {"seller_id": seller['id'], "seller_openid": seller['openid']},
          userMap);
    }
  }

  ///获取商家信息
  Future<String> getSellerInfo(BuildContext context, Map<String, String> params,
      Map<String, dynamic> userMap) async {
    BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
        .request<Map<String, dynamic>>(context, Method.get, HttpUrl.sellerinfo,
            data: params)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code != Constant.status_success) {
      return baseResp.msg ?? '登录失败,请检查账号密码';
    } else {
      Map<String, dynamic> seller = baseResp.data['seller'];
      Map<String, dynamic> daily = baseResp.data["daily"];
      Map<String, dynamic> user = Map.of(userMap);
      user['sellerAddr'] = seller['real_address'] ?? seller['map_address'];
      user['scatter'] = baseResp.data['scatter'];
      user['room'] = baseResp.data['room'];
      user['cassette'] = baseResp.data['cassette'];
      user['morning'] = daily['morning'];
      user['noon'] = daily['noon'];
      user['night'] = daily['night'];
      _saveUserInfo(User.fromJson(user));
      App.sp.setBool("isLogin", true);
      new JPush().resumePush();
      NavigatorUtil.goHomePage(context);
      return null;
    }
  }

  ///初始化推送token
  userTokenInit(BuildContext context, Map<String, String> params) async {
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(context, Method.get, HttpUrl.user_token_init,
            data: params)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code == Constant.status_success) {
    }
  }

  ///退出登录
  loginOut(BuildContext context, Map<String, String> params) async {
    BaseResp<int> baseResp = await DioUtil()
        .request<int>(context, Method.get, HttpUrl.login_out, data: params)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code != Constant.status_success) {
      Utils.showToast(baseResp.msg ?? "退出登录失败,请稍后重试");
    } else {
      App.sp.setBool("isLogin", false);
      new JPush().stopPush();
      NavigatorUtil.goLoginPage(context);
    }
  }

  /// 保存用户信息到 sp
  _saveUserInfo(User user) {
    _user = user;
    App.sp.setString('user', json.encode(user.toJson()));
  }
}