Commit 522a2786879a810f10f2bb4a833509effd48cec9

Authored by wdn127929
1 parent 7b29fbb3

通话记录获取

... ... @@ -18,19 +18,19 @@ if (flutterRoot == null) {
def flutterVersionCode = "515"
def flutterVersionCode = "516"
if (flutterVersionCode == null) {
flutterVersionCode = '515'
flutterVersionCode = '516'
}
def flutterVersionName = "5.1.5"
def flutterVersionName = "5.1.6"
if (flutterVersionName == null) {
flutterVersionName = '5.1.5'
flutterVersionName = '5.1.6'
}
... ...
... ... @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
... ...
... ... @@ -50,7 +50,6 @@ import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
// Future<bool> _requestPermissions() async {
// Map<Permission, PermissionStatus> permissions = await [
// Permission.photos,
... ... @@ -274,15 +273,17 @@ class MyAppState extends State<MyApp> {
home: isFirst
? FirstPage()
: isLogin
? ChangeNotifierProvider<TableManagerModel>(
create: (_) => TableManagerModel(),
child: ChangeNotifierProvider<StoreBaseIndoProvider>(
create: (_) => StoreBaseIndoProvider(),
child: ChangeNotifierProvider<CollectStoreProvider>(
create: (_) => CollectStoreProvider(),
child: ChangeNotifierProvider<BaseIndoProvider>(
create: (_) => BaseIndoProvider(),
child: HomePage(initialIndex: 1)))))
?
// ChangeNotifierProvider<TableManagerModel>(
// create: (_) => TableManagerModel(),
// child: ChangeNotifierProvider<StoreBaseIndoProvider>(
// create: (_) => StoreBaseIndoProvider(),
// child: ChangeNotifierProvider<CollectStoreProvider>(
// create: (_) => CollectStoreProvider(),
// child: ChangeNotifierProvider<BaseIndoProvider>(
// create: (_) => BaseIndoProvider(),
// child: HomePage(initialIndex: 1)))))
HomePage(initialIndex: 1)
: ChangeNotifierProvider<OtherLoginProvider>(
create: (_) => OtherLoginProvider(),
child: LoginPage()),
... ...
... ... @@ -40,7 +40,7 @@ class UserHistoryEntity extends Object with ISuspensionBean {
}
String get sexStr {
if (sex != '1' && sex != '2' && sex != '3') return "先生";
if (sex != '1' && sex != '2' && sex != '3') return "";
switch (sex.toString()) {
case "1": //先生
case "男":
... ...
// import 'dart:html';
// import 'dart:async';
// import 'dart:convert';
import 'dart:io';
import 'package:call_log/call_log.dart';
import 'package:easy_contact_picker/easy_contact_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
... ... @@ -17,7 +24,9 @@ import 'package:one_key/widgets/v_empty_view.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import '../../models/user_history_entity.dart';
import '../../utils/screen_util.dart';
import '../../widgets/MyDivider.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
/**
... ... @@ -149,7 +158,9 @@ class _EditReserverPageState extends State<EditReserverPage> {
detailModel.nameController.text.endsWith(suffix)) {
return;
}
detailModel.nameController.text = name + suffix;
if (name != '') {
detailModel.nameController.text = name + suffix;
}
}
//姓名后缀
... ... @@ -201,6 +212,27 @@ class _EditReserverPageState extends State<EditReserverPage> {
);
}
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
detailModel.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
detailModel.userHistorys.add(userHistoryEntity);
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
}
}
@override
Widget build(BuildContext context) {
detailModel = Provider.of<NotebookDetailModel>(context, listen: true);
... ... @@ -415,15 +447,34 @@ class _EditReserverPageState extends State<EditReserverPage> {
decimal: true),
)),
),
// InkWell(
// onTap: () {
// _openAddressBook();
// },
// child: Container(
// width: ScreenUtil().setWidth(84) * 3,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('电话簿',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(28),
// decoration:
// TextDecoration.underline)),
// ),
// ),
InkWell(
onTap: () {
onTap: () async {
_openAddressBook();
// var result = await CallLogUtil.getCallLog();
// print(result);
},
child: Container(
width: ScreenUtil().setWidth(84) * 3,
// color: Colors.red,
width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerRight,
child: Text('一键录入',
child: Text('电话簿',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(28),
... ... @@ -431,6 +482,33 @@ class _EditReserverPageState extends State<EditReserverPage> {
TextDecoration.underline)),
),
),
if (Platform.isAndroid)
Row(
children: [
HEmptyView(20),
MyDivider(1.0, ScreenUtil().setWidth(40)),
HEmptyView(20),
InkWell(
onTap: () async {
_getCallLog();
},
child: Container(
// color: Colors.red,
// width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerLeft,
child: Text('通话记录',
style: TextStyle(
color: MyColours.color_199095,
fontSize:
ScreenUtil().setSp(28),
decoration:
TextDecoration.underline)),
),
),
],
)
],
),
],
... ... @@ -652,23 +730,31 @@ class _EditReserverPageState extends State<EditReserverPage> {
onTap: () {
setState(() {
showPhoneHistory = false;
detailModel.phoneController
.text = detailModel
UserHistoryEntity
userHistoryEntity =
detailModel
.userHistorys[
index]
.phone !=
null
? detailModel
.userHistorys[index]
.phone
: '';
index];
if (userHistoryEntity.sex ==
null ||
userHistoryEntity.sex ==
'') {
userHistoryEntity.sex =
'1';
}
detailModel.phoneController
.text =
userHistoryEntity
.phone !=
null
? userHistoryEntity
.phone
: '';
for (var item in detailModel
.sexList) {
item['select'] = false;
if (item['title'] ==
detailModel
.userHistorys[
index]
userHistoryEntity
.sexStr) {
item['select'] = true;
}
... ... @@ -678,13 +764,10 @@ class _EditReserverPageState extends State<EditReserverPage> {
// .userHistorys[index].rname +
// _nameSuffix();
_addNameSuffix(
detailModel
.userHistorys[index]
.rname,
userHistoryEntity.rname,
_nameSuffix());
nameStr = detailModel
.userHistorys[index]
.rname;
nameStr =
userHistoryEntity.rname;
_phoneNode.unfocus();
detailModel.userHistorys
.clear();
... ...
... ... @@ -526,7 +526,7 @@
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.center,
// child: Text(
// '一键录入',
// '电话簿',
// style: TextStyle(
// color: MyColours.color_353535,
// fontSize: ScreenUtil().setSp(34)),
... ...
import 'dart:convert';
import 'dart:io';
import 'dart:ui';
import 'package:call_log/call_log.dart';
import 'package:common_utils/common_utils.dart';
// import 'package:contacts_service/contacts_service.dart';
... ... @@ -35,6 +37,7 @@ import 'package:provider/provider.dart';
import 'package:one_key/models/table_list.dart' as t;
import 'dart:convert' as convert;
import 'package:easy_contact_picker/easy_contact_picker.dart';
import '../../models/user_history_entity.dart';
import '../../utils/screen_util.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
... ... @@ -528,7 +531,9 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
_notebookDetailChangeModel.nameController.text.endsWith(suffix)) {
return;
}
_notebookDetailChangeModel.nameController.text = name + suffix;
if (name != '') {
_notebookDetailChangeModel.nameController.text = name + suffix;
}
}
/**
_bottomWidget() {
... ... @@ -557,7 +562,7 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
height: ScreenUtil().setWidth(48),
alignment: Alignment.center,
child: Text(
'一键录入',
'电话簿',
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(34)),
... ... @@ -1048,6 +1053,27 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
);
}
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_notebookDetailChangeModel.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_notebookDetailChangeModel.userHistorys.add(userHistoryEntity);
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
}
}
_openAddressBook() async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
... ... @@ -1737,14 +1763,17 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
)),
),
InkWell(
onTap: () {
onTap: () async {
_openAddressBook();
// var result = await CallLogUtil.getCallLog();
// print(result);
},
child: Container(
width: ScreenUtil().setWidth(84) * 3,
// color: Colors.red,
width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerRight,
child: Text('一键录入',
child: Text('电话簿',
style: TextStyle(
color: MyColours.color_199095,
fontSize:
... ... @@ -1753,6 +1782,34 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
TextDecoration.underline)),
),
),
if (Platform.isAndroid)
Row(
children: [
HEmptyView(20),
MyDivider(
1.0, ScreenUtil().setWidth(40)),
HEmptyView(20),
InkWell(
onTap: () async {
_getCallLog();
},
child: Container(
// color: Colors.red,
// width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerLeft,
child: Text('通话记录',
style: TextStyle(
color: MyColours
.color_199095,
fontSize: ScreenUtil()
.setSp(28),
decoration: TextDecoration
.underline)),
),
),
],
)
],
),
],
... ... @@ -1912,11 +1969,19 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
onTap: () {
setState(() {
showPhoneHistory = false;
UserHistoryEntity
userHistoryEntity =
_notebookDetailChangeModel
.userHistorys[index];
_notebookDetailChangeModel
.phoneController.text =
_notebookDetailChangeModel
.userHistorys[index]
.phone;
userHistoryEntity.phone;
if (userHistoryEntity.sex ==
null ||
userHistoryEntity.sex ==
'') {
userHistoryEntity.sex = '1';
}
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
... ... @@ -1926,21 +1991,38 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
.sexList) {
item['select'] = false;
if (item['title'] ==
_notebookDetailChangeModel
.userHistorys[index]
userHistoryEntity
.sexStr) {
item['select'] = true;
}
}
_addNameSuffix(
_notebookDetailChangeModel
.userHistorys[index]
.rname,
userHistoryEntity.rname,
_nameSuffix());
nameStr =
_notebookDetailChangeModel
.userHistorys[index]
.rname;
if (userHistoryEntity.rname ==
null ||
userHistoryEntity.rname ==
'') {
nameStr =
_notebookDetailChangeModel
.nameController.text;
if (nameStr.endsWith('女士')) {
nameStr = nameStr
.replaceAll('女士', '');
}
if (nameStr.endsWith('先生')) {
nameStr = nameStr
.replaceAll('先生', '');
}
if (nameStr.endsWith('公司')) {
nameStr = nameStr
.replaceAll('公司', '');
}
} else {
nameStr =
userHistoryEntity.rname;
}
_phoneNode.unfocus();
_notebookDetailChangeModel
.userHistorys
... ... @@ -2104,7 +2186,7 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
: await _notebookDetailChangeModel
.setReserveInfo(context, nameStr,
widget.detailEntity.uid);
if (_model!= null) {
if (_model != null) {
if (ObjectUtil.isNotEmpty(_model.row) ||
ObjectUtil.isNotEmpty(_model.row.id)) {
print('成功');
... ...
... ... @@ -2646,15 +2646,19 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
)),
),
InkWell(
onTap: () {
onTap:
() async {
_openAddressBook();
// var result = await CallLogUtil.getCallLog();
// print(result);
},
child:
Container(
// color: Colors.red,
width: ScreenUtil()
.setWidth(
84) *
3,
64) *
2,
height: ScreenUtil()
.setWidth(
48),
... ... @@ -2662,7 +2666,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
Alignment
.centerRight,
child: Text(
'一键录入',
'电话簿',
style: TextStyle(
color: MyColours
.color_199095,
... ... @@ -2672,6 +2676,42 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
TextDecoration.underline)),
),
),
if (Platform
.isAndroid)
Row(children: [
HEmptyView(
20),
MyDivider(
1.0,
ScreenUtil()
.setWidth(
40)),
HEmptyView(
20),
InkWell(
onTap:
() async {
// _getCallLog();
},
child:
Container(
// color: Colors.red,
// width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil()
.setWidth(
48),
alignment:
Alignment
.centerLeft,
child: Text(
'通话记录',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(28),
decoration: TextDecoration.underline)),
),
),
]),
],
),
],
... ... @@ -2777,7 +2817,8 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
'',
needBtn:
false,
mid:widget.mid);
mid: widget
.mid);
}
},
))
... ...
... ... @@ -378,7 +378,7 @@ class _HomeEnterPageState extends State<HomeEnterPage>
height: ScreenUtil().setWidth(48),
alignment: Alignment.center,
child: Text(
'一键录入',
'电话簿',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30)),
... ...
... ... @@ -5,6 +5,7 @@ import 'dart:typed_data';
import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:call_log/call_log.dart';
import 'package:common_utils/common_utils.dart';
import 'package:easy_contact_picker/easy_contact_picker.dart';
import 'package:flutter/material.dart';
... ... @@ -48,6 +49,7 @@ import 'dart:ui' as ui;
import '../../app.dart';
import '../../models/sms_info.dart';
import '../../models/user_history_entity.dart';
import '../../provider/SmsModel.dart';
import '../../provider/customer_provider.dart';
import '../../provider/marketing_center_provider.dart';
... ... @@ -584,7 +586,13 @@ class InvicationPageState extends State<InvicationPage>
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
_addNameSuffix(_baseIndoProvider.userHistorys[index].rname, sexStr);
if (_baseIndoProvider.userHistorys[index].rname != null &&
_baseIndoProvider.userHistorys[index].rname.trim().length > 0) {
_addNameSuffix(
_baseIndoProvider.userHistorys[index].rname, sexStr);
}
nameStr = _baseIndoProvider.userHistorys[index].rname;
_phoneNode.unfocus();
_baseIndoProvider.userHistorys.clear();
... ... @@ -1041,6 +1049,21 @@ class InvicationPageState extends State<InvicationPage>
customController.text.trim().length == 0) {
return;
}
if ((nameStr == null || nameStr.trim().length == 0) &&
_baseIndoProvider.phoneController.text.replaceAll(' ', '').length > 0 &&
oldName == null) {
Utils.showToast('请输入顾客姓名!');
return;
}
if ((nameStr != null && nameStr.trim().length > 0) &&
_baseIndoProvider.phoneController.text.replaceAll(' ', '').length ==
0 &&
oldPhone == null) {
Utils.showToast('请输入顾客电话!');
return;
}
String phone;
String name;
String sex;
... ... @@ -2109,20 +2132,47 @@ class InvicationPageState extends State<InvicationPage>
TextInputType.numberWithOptions(decimal: true),
)),
InkWell(
onTap: () {
onTap: () async {
_openAddressBook();
// var result = await CallLogUtil.getCallLog();
// print(result);
},
child: Container(
width: ScreenUtil().setWidth(74) * 2,
// color: Colors.red,
width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerRight,
child: Text('一键录入',
child: Text('电话簿',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
)),
),
),
if (Platform.isAndroid)
Row(
children: [
HEmptyView(20),
MyDivider(1.0, ScreenUtil().setWidth(40)),
HEmptyView(20),
InkWell(
onTap: () async {
_getCallLog();
},
child: Container(
// color: Colors.red,
// width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerLeft,
child: Text('通话记录',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
)),
),
),
],
)
],
)),
Stack(
... ... @@ -2524,14 +2574,20 @@ class InvicationPageState extends State<InvicationPage>
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
sexStr = _baseIndoProvider
.userHistorys[index].sexStr;
UserHistoryEntity userHistoryEntity =
_baseIndoProvider
.userHistorys[index];
if (userHistoryEntity.sex == null ||
userHistoryEntity.sex == '') {
userHistoryEntity.sex = '1';
}
sexStr = userHistoryEntity.sexStr;
sexSelectIndex =
sexList.indexOf(sexStr);
_getIsMemberByPhone(_baseIndoProvider
.userHistorys[index].phone);
_getIsMemberByPhone(
userHistoryEntity.phone);
needHistory = true;
_showConfirmWidget(
needHistory: true, index: index);
... ... @@ -3560,7 +3616,7 @@ class InvicationPageState extends State<InvicationPage>
width: ScreenUtil().setWidth(84) * 3,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerRight,
child: Text('一键录入',
child: Text('电话簿',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(28),
... ... @@ -3855,6 +3911,27 @@ class InvicationPageState extends State<InvicationPage>
}
}
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_baseIndoProvider.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_baseIndoProvider.userHistorys.add(userHistoryEntity);
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
}
}
_openAddressBook() async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
... ...
... ... @@ -1663,7 +1663,7 @@
// width: ScreenUtil().setWidth(84) * 3,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// child: Text('电话簿',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(28),
... ...
... ... @@ -79,7 +79,9 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
keyboardType: TextInputType.numberWithOptions(decimal: true), //由于某些机型键盘并不能做到强制故再条件上加上FilteringTextInputFormatter.allow(RegExp('[0-9.,]+')
keyboardType: TextInputType.numberWithOptions(
decimal:
true), //由于某些机型键盘并不能做到强制故再条件上加上FilteringTextInputFormatter.allow(RegExp('[0-9.,]+')
inputFormatters: title == '出库数量'
? [
PrecisionLimitFormatter(2),
... ... @@ -167,7 +169,7 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// child: Text('电话簿',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
... ...
... ... @@ -232,7 +232,7 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// child: Text('电话簿',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
... ...
... ... @@ -126,7 +126,7 @@ class _CreateWineItemPageState extends State<CreateWineItemPage> {
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// child: Text('电话簿',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
... ...
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:call_log/call_log.dart';
import 'package:common_utils/common_utils.dart';
import 'package:dotted_border/dotted_border.dart';
import 'package:easy_contact_picker/easy_contact_picker.dart';
... ... @@ -14,6 +16,7 @@ import 'package:one_key/models/guest_info_model.dart';
import 'package:one_key/models/reserve_info_model.dart';
import 'package:one_key/models/sms_info.dart';
import 'package:one_key/models/user_history_entity.dart';
import 'package:one_key/pages/table/area_item_table.dart';
import 'package:one_key/provider/base_info_provider.dart';
... ... @@ -26,7 +29,7 @@ import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/get_call_log.dart';
import 'package:one_key/utils/misc.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
... ... @@ -656,6 +659,27 @@ class TableManagerPageState extends State<TableManagerPage> {
}
}
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_baseIndoProvider.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_baseIndoProvider.userHistorys.add(userHistoryEntity);
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
}
}
_getContactData() async {
Contact contact = await _contactPicker.selectContactWithNative();
... ... @@ -680,10 +704,12 @@ class TableManagerPageState extends State<TableManagerPage> {
_addNameSuffix(String name, String suffix) {
if (name == _baseIndoProvider.nameController.text &&
_baseIndoProvider.nameController.text.endsWith(suffix)) {
_baseIndoProvider.nameController.text.endsWith(suffix ?? '')) {
return;
}
_baseIndoProvider.nameController.text = name + suffix;
if (name != '') {
_baseIndoProvider.nameController.text = name + suffix ?? '';
}
}
//姓名后缀
... ... @@ -924,16 +950,41 @@ class TableManagerPageState extends State<TableManagerPage> {
// print(result);
},
child: Container(
width: ScreenUtil().setWidth(74) * 2,
// color: Colors.red,
width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerRight,
child: Text('一键录入',
child: Text('电话簿',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
)),
),
),
if (Platform.isAndroid)
Row(
children: [
HEmptyView(20),
MyDivider(1.0, ScreenUtil().setWidth(40)),
HEmptyView(20),
InkWell(
onTap: () async {
_getCallLog();
},
child: Container(
// color: Colors.red,
// width: ScreenUtil().setWidth(64) * 2,
height: ScreenUtil().setWidth(48),
alignment: Alignment.centerLeft,
child: Text('通话记录',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
)),
),
),
],
)
],
)),
Stack(
... ... @@ -1310,6 +1361,7 @@ class TableManagerPageState extends State<TableManagerPage> {
return GestureDetector(
onTap: () {
setState(() {
sexStr = '先生';
showPhoneHistory = false;
_baseIndoProvider.phoneController
.text = _baseIndoProvider
... ... @@ -1345,8 +1397,34 @@ class TableManagerPageState extends State<TableManagerPage> {
.userHistorys[index]
.rname,
sexStr);
nameStr = _baseIndoProvider
.userHistorys[index].rname;
if (_baseIndoProvider
.userHistorys[index]
.rname ==
null ||
_baseIndoProvider
.userHistorys[index]
.rname ==
'') {
nameStr = _baseIndoProvider
.nameController.text;
if (nameStr.endsWith('女士')) {
nameStr = nameStr.replaceAll(
'女士', '');
}
if (nameStr.endsWith('先生')) {
nameStr = nameStr.replaceAll(
'先生', '');
}
if (nameStr.endsWith('公司')) {
nameStr = nameStr.replaceAll(
'公司', '');
}
} else {
nameStr = _baseIndoProvider
.userHistorys[index].rname;
}
_phoneNode.unfocus();
_baseIndoProvider.userHistorys
.clear();
... ...
import 'package:flutter/material.dart';
import 'package:call_log/call_log.dart';
class CallLogUtil {
static getCallLog() async {
final Iterable<CallLogEntry> result = await CallLog.query();
return result;
}
}
... ... @@ -56,6 +56,7 @@ Future<PermissionStatus> contactPermissionStatus() async {
return permissionStatus;
}
Future<bool> requestContactPermission() async {
final permissions = await [Permission.contacts].request();
if (permissions[Permission.contacts] == PermissionStatus.granted) {
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:io';
import 'dart:math';
import 'dart:typed_data';
import 'package:call_log/call_log.dart';
import 'package:common_utils/common_utils.dart';
import 'package:connectivity/connectivity.dart';
import 'package:contacts_service/contacts_service.dart';
... ... @@ -50,6 +51,17 @@ import '../models/recharge_list_model.dart';
typedef BookTimeSetCallback = void Function(bool needChange);
class Utils {
static List<CallLogEntry> removeDuplicates(List<CallLogEntry> items) {
List<CallLogEntry> uniqueItems = []; // uniqueList
var uniqueIDs = items
.map((e) => e.number)
.toSet(); //list if UniqueID to remove duplicates
uniqueIDs.forEach((e) {
uniqueItems.add(items.firstWhere((i) => i.number == e));
}); // populate uniqueItems with equivalent original Batch items
return uniqueItems; //send back the unique items list
}
/// 十六进制颜色
/// colorString,字符串,例如:'0x000000' '0xff000000' '#000000' '#000000',
/// alpha,透明度[0.0, 1.0]
... ...