message_model.dart 8.37 KB
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/message.dart';
import 'package:one_key/models/new_unmessage_model.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/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';

class MessageModel extends ChangeNotifier {
  List<NewUnmessage> messages = []; //消息
  PageState pageStateUn = PageState.Loading; //未处理
  PageState pageState = PageState.Loading; //已处理
  // 未处理消息总数
  int onlineTotal = 0; //在线消息
  int inlineTotal = 0; //内部消息
  int orderTotal = 0; //提前点餐
  int checkTotal = 0; //在线买单

  int allUnNum = 0; //全部未读

  initData() {
    messages = []; //消息
    pageStateUn = PageState.Loading; //未处理
    pageState = PageState.Loading; //已处理
  }

  //获取已处理消息
  getMessages(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageState = PageState.Loading;
      messages = [];
      notifyListeners();
    }
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.new_get_message_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      String uid = Provider.of<UserModel>(context, listen: false).user.openid;
      List<NewUnmessage> temp = [];
      if (params['offset'] == "0") {
        messages = baseResp.data.map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList();
      } else {
        messages.addAll(baseResp.data.map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList());
      }
      temp.addAll(messages);
      messages = [];
      temp.forEach((element) {
        if (element.uid == uid && element.message_type == '16') {
          print('object');
        } else {
          messages.add(element);
        }
      });

      // if (params["type_id"] == "10") {
      //   //在线预订
      //   messages.removeWhere((message) {
      //     if (message.message_type.toString() == "10") {
      //       //在线预订
      //       if (message.status == "4") {
      //         //已取消
      //         return true;
      //       }
      //       return false;
      //     } else if (message.message_type.toString() == "11") {
      //       //取消在线预订
      //       return false;
      //     }
      //     return true;
      //   });
      // }
      if (messages.isEmpty) {
        pageState = PageState.Empty;
      } else {
        pageState = PageState.Success;
      }
      notifyListeners();
    }
  }

  //获取未处理消息数目
  getNewGetUntreatedMsgNum(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageStateUn = PageState.Loading;
      messages = [];
      notifyListeners();
    }
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.new_get_untreated_msg_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      PageState pageStateTemp;
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageStateUn = PageState.ConnectivityError;
            break;
          case 2:
            pageStateUn = PageState.ConnectivityTimeOut;
            break;
          default:
            pageStateUn = PageState.ConnectivityError;
            break;
        }
      }

      notifyListeners();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      allUnNum = baseResp.data['count'];

      notifyListeners();
    }
  }

  //获取未处理消息和数目
  getNewGetUntreatedMsgList(BuildContext context, Map<String, String> params,
      {showLoading = true}) async {
    if (showLoading) {
      pageStateUn = PageState.Loading;
      messages = [];
      notifyListeners();
    }
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.new_get_untreated_msg_list,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
      PageState pageStateTemp;
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageStateUn = PageState.ConnectivityError;
            break;
          case 2:
            pageStateUn = PageState.ConnectivityTimeOut;
            break;
          default:
            pageStateUn = PageState.ConnectivityError;
            break;
        }
      }

      notifyListeners();
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      int tempnum = 0;
      String uid = Provider.of<UserModel>(context, listen: false).user.openid;
      List<NewUnmessage> temp = [];
      if (params['offset'] == "0") {
        messages = baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList();
      } else {
        messages.addAll(baseResp.data['list'].map<NewUnmessage>((value) {
          return NewUnmessage.fromJson(value);
        }).toList());
      }
      temp.addAll(messages);
      messages = [];

      temp.forEach((element) {
        if (element.uid == uid && element.message_type == '16') {
          tempnum++;
        } else {
          messages.add(element);
        }
      });
      if (tempnum > 0) {
        allUnNum = baseResp.data['count'] - tempnum;
      } else {
        allUnNum = baseResp.data['count'];
      }

      // if(params["type_id"]=="10"){//在线预订
      //   messages.removeWhere((message) {
      //     if (message.message_type.toString() == "10") {//在线预订
      //       if (message.status == "4") {//已取消
      //         return true;
      //       }
      //       return false;
      //     } else if (message.message_type.toString() == "11") {//取消在线预订
      //       return false;
      //     }
      //     return true;
      //   });
      // }
      if (messages.isEmpty) {
        //未处理
        pageStateUn = PageState.Empty;
      } else {
        //未处理
        pageStateUn = PageState.Success;
      }
      notifyListeners();
    }
  }

  //获取未处理消息数目
  getUnMsgNum(BuildContext context, Map<String, String> params) async {
    BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
        .request<Map<String, dynamic>>(
            context, Method.get, HttpUrl.get_message_num,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      onlineTotal = int.parse(baseResp.data['online_total'].toString());
      inlineTotal = int.parse(baseResp.data['inline_total'].toString());
      orderTotal = int.parse(baseResp.data['order_total'].toString());
      checkTotal = int.parse(baseResp.data['check_total'].toString());
      notifyListeners();
    }
  }

  //设置消息状态
  setMessageStatus(BuildContext context, Map<String, String> params) async {
    BaseResp<dynamic> baseResp = await DioUtil()
        .request<dynamic>(
            context, Method.get, HttpUrl.push_msg_set_message_status,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp.code == Constant.status_success) {
    } else {
      Utils.showToast(baseResp.msg);
    }
  }

  //根据消息id移除消息
  removeUntreatedMessageByMid(String mid) {
    messages.removeWhere((element) => element.id == mid);
    if (messages.length == 0) {
      pageStateUn = PageState.Empty;
    }
    notifyListeners();
  }
}