Commit 6f0ee03c56990cfe0f8c8cf72732e8b67dd888b2

Authored by wdn127929
1 parent 96319ce5

通话记录UI变更

... ... @@ -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'
}
... ...
... ... @@ -28,6 +28,7 @@ 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';
import 'package:flutter_picker/flutter_picker.dart' as Picker;
/**
* 填写预订联系人页面
... ... @@ -159,7 +160,7 @@ class _EditReserverPageState extends State<EditReserverPage> {
return;
}
if (name != '') {
detailModel.nameController.text = name + suffix;
detailModel.nameController.text = name + suffix??'';
}
}
... ... @@ -214,25 +215,118 @@ class _EditReserverPageState extends State<EditReserverPage> {
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
detailModel.userHistorys = [];
List<Picker.PickerItem<dynamic>> data = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
detailModel.userHistorys = [];
showPhoneHistory = false;
// setState(() {});
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
detailModel.userHistorys.add(userHistoryEntity);
detailModel.userHistorys.add(UserHistoryEntity(
'', '', element.name ?? '', '1', element.number, '', '', ''));
String title = '';
title += ' ${element.number ?? ''}';
if (element.name != null && element.name != '') {
title += ' ${element.name}';
}
String stateStr = ''; //状态
if (element.callType.name == 'incoming' ||
element.callType.name == 'wifiIncoming' ||
element.callType.name == 'answeredExternally') {
stateStr = ' 呼入';
} else if (element.callType.name == 'outgoing' ||
element.callType.name == 'wifiOutgoing' ||
element.callType.name == 'voiceMail') {
stateStr = ' 呼出';
} else if (element.callType.name == 'missed') {
stateStr = ' 未接';
} else if (element.callType.name == 'rejected') {
stateStr = ' 拒接';
} else if (element.callType.name == 'blocked') {
stateStr = ' 拦截';
}
String sunString =
Utils.formatCallLogFromMill(element.timestamp.toString());
data.add(Picker.PickerItem(
text: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Row(
children: [
HEmptyView(30),
Text(title ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)),
Expanded(
child: Text(stateStr ?? '',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_26000000))),
],
)),
Container(
margin: EdgeInsets.only(right: w(15)),
child: Text(sunString ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)))
],
)));
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
if (data.length > 0) {
//有记录,底部弹窗展示
// showPhoneHistory = true;
// setState(() {});
DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
if (value != null) {
_byValueToReqeust(value[0]);
}
}, title: '从通话记录选择客人电话', selecteds: [
// _getFirSelected(hourAndMinute, data),
// _getSecSelected(hourAndMinute)
]).then((value) {
print(value);
});
} else {
Utils.showToast('暂无通话记录!');
}
}
_byValueToReqeust(int index) {
setState(() {
showPhoneHistory = false;
UserHistoryEntity userHistoryEntity = detailModel.userHistorys[index];
detailModel.phoneController.text =
userHistoryEntity.phone != null ? userHistoryEntity.phone : '';
for (var item in detailModel.sexList) {
item['select'] = false;
if (item['title'] == userHistoryEntity.sexStr) {
item['select'] = true;
}
}
if ((nameStr != null && nameStr != '') &&
(userHistoryEntity.rname == '' || userHistoryEntity.rname == null)) {
} else {
nameStr = userHistoryEntity.rname;
}
_addNameSuffix(userHistoryEntity.rname, _nameSuffix());
_phoneNode.unfocus();
detailModel.userHistorys.clear();
});
}
@override
Widget build(BuildContext context) {
detailModel = Provider.of<NotebookDetailModel>(context, listen: true);
... ... @@ -728,50 +822,51 @@ class _EditReserverPageState extends State<EditReserverPage> {
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
setState(() {
showPhoneHistory = false;
UserHistoryEntity
userHistoryEntity =
detailModel
.userHistorys[
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'] ==
userHistoryEntity
.sexStr) {
item['select'] = true;
}
}
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
_addNameSuffix(
userHistoryEntity.rname,
_nameSuffix());
nameStr =
userHistoryEntity.rname;
_phoneNode.unfocus();
detailModel.userHistorys
.clear();
});
_byValueToReqeust(index);
// setState(() {
// showPhoneHistory = false;
// UserHistoryEntity
// userHistoryEntity =
// detailModel
// .userHistorys[
// 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'] ==
// userHistoryEntity
// .sexStr) {
// item['select'] = true;
// }
// }
// // _homeEnterModel.nameController.text =
// // _homeEnterModel
// // .userHistorys[index].rname +
// // _nameSuffix();
// _addNameSuffix(
// userHistoryEntity.rname,
// _nameSuffix());
// nameStr =
// userHistoryEntity.rname;
// _phoneNode.unfocus();
// detailModel.userHistorys
// .clear();
// });
},
child: Container(
width: double.infinity,
... ...
... ... @@ -40,6 +40,7 @@ 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';
import 'package:flutter_picker/flutter_picker.dart' as Picker;
typedef clickCallback = void Function(String value);
... ... @@ -531,8 +532,8 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
_notebookDetailChangeModel.nameController.text.endsWith(suffix)) {
return;
}
if (name != '') {
_notebookDetailChangeModel.nameController.text = name + suffix;
if (name != ''&& name != null) {
_notebookDetailChangeModel.nameController.text = name + suffix??'';
}
}
/**
... ... @@ -1053,27 +1054,154 @@ 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(() {});
// }
// }
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_notebookDetailChangeModel.userHistorys = [];
List<Picker.PickerItem<dynamic>> data = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
_notebookDetailChangeModel.userHistorys = [];
showPhoneHistory = false;
// setState(() {});
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_notebookDetailChangeModel.userHistorys.add(userHistoryEntity);
_notebookDetailChangeModel.userHistorys.add(UserHistoryEntity(
'', '', element.name ?? '', '1', element.number, '', '', ''));
String title = '';
title += ' ${element.number ?? ''}';
if (element.name != null && element.name != '') {
title += ' ${element.name}';
}
String stateStr = ''; //状态
if (element.callType.name == 'incoming' ||
element.callType.name == 'wifiIncoming' ||
element.callType.name == 'answeredExternally') {
stateStr = ' 呼入';
} else if (element.callType.name == 'outgoing' ||
element.callType.name == 'wifiOutgoing' ||
element.callType.name == 'voiceMail') {
stateStr = ' 呼出';
} else if (element.callType.name == 'missed') {
stateStr = ' 未接';
} else if (element.callType.name == 'rejected') {
stateStr = ' 拒接';
} else if (element.callType.name == 'blocked') {
stateStr = ' 拦截';
}
String sunString =
Utils.formatCallLogFromMill(element.timestamp.toString());
data.add(Picker.PickerItem(
text: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Row(
children: [
HEmptyView(30),
Text(title ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)),
Expanded(
child: Text(stateStr ?? '',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_26000000))),
],
)),
Container(
margin: EdgeInsets.only(right: w(15)),
child: Text(sunString ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)))
],
)));
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
if (data.length > 0) {
//有记录,底部弹窗展示
// showPhoneHistory = true;
// setState(() {});
DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
if (value != null) {
_byValueToReqeust(value[0]);
}
}, title: '从通话记录选择客人电话', selecteds: [
// _getFirSelected(hourAndMinute, data),
// _getSecSelected(hourAndMinute)
]).then((value) {
print(value);
});
} else {
Utils.showToast('暂无通话记录!');
}
}
_byValueToReqeust(int index) {
setState(() {
showPhoneHistory = false;
UserHistoryEntity userHistoryEntity =
_notebookDetailChangeModel.userHistorys[index];
_notebookDetailChangeModel.phoneController.text = userHistoryEntity.phone;
// if (userHistoryEntity.sex == null || userHistoryEntity.sex == '') {
// userHistoryEntity.sex = '1';
// }
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
for (var item in _notebookDetailChangeModel.sexList) {
item['select'] = false;
if (item['title'] == userHistoryEntity.sexStr) {
item['select'] = true;
}
}
_addNameSuffix(userHistoryEntity.rname, _nameSuffix());
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.clear();
});
}
_openAddressBook() async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
... ... @@ -1967,67 +2095,68 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
setState(() {
showPhoneHistory = false;
UserHistoryEntity
userHistoryEntity =
_notebookDetailChangeModel
.userHistorys[index];
_notebookDetailChangeModel
.phoneController.text =
userHistoryEntity.phone;
if (userHistoryEntity.sex ==
null ||
userHistoryEntity.sex ==
'') {
userHistoryEntity.sex = '1';
}
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
for (var item
in _notebookDetailChangeModel
.sexList) {
item['select'] = false;
if (item['title'] ==
userHistoryEntity
.sexStr) {
item['select'] = true;
}
}
_addNameSuffix(
userHistoryEntity.rname,
_nameSuffix());
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
.clear();
});
_byValueToReqeust(index);
// setState(() {
// showPhoneHistory = false;
// UserHistoryEntity
// userHistoryEntity =
// _notebookDetailChangeModel
// .userHistorys[index];
// _notebookDetailChangeModel
// .phoneController.text =
// userHistoryEntity.phone;
// if (userHistoryEntity.sex ==
// null ||
// userHistoryEntity.sex ==
// '') {
// userHistoryEntity.sex = '1';
// }
// // _homeEnterModel.nameController.text =
// // _homeEnterModel
// // .userHistorys[index].rname +
// // _nameSuffix();
// for (var item
// in _notebookDetailChangeModel
// .sexList) {
// item['select'] = false;
// if (item['title'] ==
// userHistoryEntity
// .sexStr) {
// item['select'] = true;
// }
// }
// _addNameSuffix(
// userHistoryEntity.rname,
// _nameSuffix());
// 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
// .clear();
// });
},
child: Container(
width: double.infinity,
... ...
... ... @@ -1603,31 +1603,33 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
TextStyle(color: MyColours.color_999999, fontSize: font(14)),
),
])),
Container(
padding: EdgeInsets.only(left: w(13), top: w(10)),
child:
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
Text(
'最后修改',
overflow: TextOverflow.ellipsis,
style:
TextStyle(color: MyColours.color_515151, fontSize: font(14)),
),
// HEmptyView(40),
Expanded(
child: Text(
'${detailEntity.nick_name ?? ''}' +
' ' +
'${detailEntity.seller_user_phone ?? ''}' +
(detailEntity.up_date == null
? ''
: ' ${_getDateTime(detailEntity.up_date)}'),
// overflow: TextOverflow.ellipsis,
textAlign: TextAlign.right,
style:
TextStyle(color: MyColours.color_999999, fontSize: font(14)),
)),
])),
if (detailEntity.up_date != null)
Container(
padding: EdgeInsets.only(left: w(13), top: w(10)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'最后修改',
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(14)),
),
// HEmptyView(40),
Expanded(
child: Text(
'${detailEntity.nick_name ?? ''}' +
' ' +
'${detailEntity.seller_user_phone ?? ''}' +
(detailEntity.up_date == null
? ''
: ' ${_getDateTime(detailEntity.up_date)}'),
// overflow: TextOverflow.ellipsis,
textAlign: TextAlign.right,
style: TextStyle(
color: MyColours.color_999999, fontSize: font(14)),
)),
])),
Offstage(
offstage: (detailEntity.status == "4" && detailEntity.cancel != null)
? false
... ... @@ -3041,16 +3043,13 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
.rnameStr,
textColor: MyColours
.color_515151),
(detailEntity.status ==
"4" &&
(detailEntity.status == "4" &&
detailEntity
.cancel !=
null &&
(detailEntity
.phone ==
(detailEntity.phone ==
null ||
detailEntity
.phone ==
detailEntity.phone ==
''))
? SizedBox()
: InkWell(
... ... @@ -3098,7 +3097,12 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
: Utils.starPhone(detailEntity
.phone),
textColor: MyColours
.color_515151)),
.color_515151,
textColorR:
MyColours
.color_438E93,
imageName:
'phone_detail')),
(detailEntity.status ==
"4" &&
detailEntity
... ...
... ... @@ -267,18 +267,18 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
if (widget.initialIndex == 0 ||
widget.initialIndex == 1 && needRefreshTemp == false) return;
_initNotification();
Future.delayed(Duration(milliseconds: 30000), () {
//30000
ContactModel.getInstance().uploadLocalContact(context);
UserModel usermodel = Provider.of<UserModel>(context, listen: false);
if (needUpdate && !usermodel.downLoading) {
UpdateModelMy updateModel = new UpdateModelMy();
updateModel.checkUpdate(context, (version) {
updateModel.showUpdateDialog(context, version);
}, showToast: false);
}
});
// Future.delayed(Duration(milliseconds: 30000), () {
// //30000
// ContactModel.getInstance().uploadLocalContact(context);
// UserModel usermodel = Provider.of<UserModel>(context, listen: false);
// if (needUpdate && !usermodel.downLoading) {
// UpdateModelMy updateModel = new UpdateModelMy();
// updateModel.checkUpdate(context, (version) {
// updateModel.showUpdateDialog(context, version);
// }, showToast: false);
// }
// });
if (Utils.getAuthority(context, '消息中心')) {
timer = Timer.periodic(Duration(minutes: 3), (_) {
... ...
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
... ... @@ -11,14 +10,15 @@ import 'package:easy_contact_picker/easy_contact_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_picker/Picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_sms/flutter_sms.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/coupon_model.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/models/remark.dart';
import 'package:one_key/models/seller_phone_model.dart';
import 'package:one_key/models/user.dart';
import 'package:one_key/pages/detail/notebook_detail_change_page_f.dart';
import 'package:one_key/pages/online_check/photo_view_wiget.dart';
import 'package:one_key/provider/base_info_provider.dart';
... ... @@ -44,11 +44,14 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:one_key/models/table_list.dart' as t;
import 'package:sendsms/sendsms.dart';
import 'dart:ui' as ui;
import '../../app.dart';
import '../../constant/state.dart';
import '../../models/sms_info.dart';
import '../../models/user.dart';
import '../../models/user_history_entity.dart';
import '../../provider/SmsModel.dart';
import '../../provider/customer_provider.dart';
... ... @@ -56,6 +59,7 @@ import '../../provider/marketing_center_provider.dart';
import '../../provider/my_model.dart';
import '../../utils/screen_util.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
import 'package:flutter_picker/flutter_picker.dart' as Picker;
class InvicationPage extends StatefulWidget {
final String rid; //预订订单id
... ... @@ -593,7 +597,13 @@ class InvicationPageState extends State<InvicationPage>
_baseIndoProvider.userHistorys[index].rname, sexStr);
}
nameStr = _baseIndoProvider.userHistorys[index].rname;
if ((nameStr != '' && nameStr != null) &&
(_baseIndoProvider.userHistorys[index].rname == '' ||
_baseIndoProvider.userHistorys[index].rname == null)) {
} else {
nameStr = _baseIndoProvider.userHistorys[index].rname;
}
_phoneNode.unfocus();
_baseIndoProvider.userHistorys.clear();
});
... ... @@ -2159,17 +2169,23 @@ class InvicationPageState extends State<InvicationPage>
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),
)),
),
child: Row(children: [
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),
)),
),
HEmptyView(4),
Image.asset(Utils.getImgPath('quan_down_f'),
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28)),
]),
),
],
)
... ... @@ -2285,6 +2301,7 @@ class InvicationPageState extends State<InvicationPage>
fontSize: ScreenUtil().setSp(28),
),
),
HEmptyView(4),
Image.asset(Utils.getImgPath('quan_down_f'),
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28)),
... ... @@ -2325,6 +2342,7 @@ class InvicationPageState extends State<InvicationPage>
fontSize: ScreenUtil().setSp(28),
),
),
HEmptyView(4),
Image.asset(Utils.getImgPath('quan_down_f'),
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28)),
... ... @@ -3913,22 +3931,98 @@ class InvicationPageState extends State<InvicationPage>
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_baseIndoProvider.userHistorys = [];
List<Picker.PickerItem<dynamic>> data = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
_baseIndoProvider.userHistorys = [];
showPhoneHistory = false;
// setState(() {});
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_baseIndoProvider.userHistorys.add(userHistoryEntity);
_baseIndoProvider.userHistorys.add(UserHistoryEntity(
'', '', element.name ?? '', '1', element.number, '', '', ''));
String title = '';
title += ' ${element.number ?? ''}';
if (element.name != null && element.name != '') {
title += ' ${element.name}';
}
String stateStr = ''; //状态
if (element.callType.name == 'incoming' ||
element.callType.name == 'wifiIncoming' ||
element.callType.name == 'answeredExternally') {
stateStr = ' 呼入';
} else if (element.callType.name == 'outgoing' ||
element.callType.name == 'wifiOutgoing' ||
element.callType.name == 'voiceMail') {
stateStr = ' 呼出';
} else if (element.callType.name == 'missed') {
stateStr = ' 未接';
} else if (element.callType.name == 'rejected') {
stateStr = ' 拒接';
} else if (element.callType.name == 'blocked') {
stateStr = ' 拦截';
}
String sunString =
Utils.formatCallLogFromMill(element.timestamp.toString());
data.add(Picker.PickerItem(
text: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Row(
children: [
HEmptyView(30),
Text(title ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)),
Expanded(
child: Text(stateStr ?? '',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_26000000))),
],
)),
Container(
margin: EdgeInsets.only(right: w(15)),
child: Text(sunString ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)))
],
)));
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
if (data.length > 0) {
//有记录,底部弹窗展示
// showPhoneHistory = true;
// setState(() {});
DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
if (value != null) {
UserHistoryEntity userHistoryEntity =
_baseIndoProvider.userHistorys[value[0]];
sexStr = userHistoryEntity.sexStr;
sexSelectIndex = sexList.indexOf(sexStr);
_getIsMemberByPhone(userHistoryEntity.phone);
needHistory = true;
_showConfirmWidget(needHistory: true, index: value[0]);
}
}, title: '从通话记录选择客人电话', selecteds: [
// _getFirSelected(hourAndMinute, data),
// _getSecSelected(hourAndMinute)
]).then((value) {
print(value);
});
} else {
Utils.showToast('暂无通话记录!');
}
}
... ... @@ -4000,7 +4094,9 @@ class InvicationPageState extends State<InvicationPage>
_baseIndoProvider.nameController.text.endsWith(suffix)) {
return;
}
_baseIndoProvider.nameController.text = name + suffix;
if (name != '' && name != null) {
_baseIndoProvider.nameController.text = name + suffix??'';
}
}
//姓名后缀
... ...
... ... @@ -1491,39 +1491,41 @@ class _MyCustomerListPageState extends State<MyCustomerListPage>
child: Column(
children: [
Expanded(
child: Scrollbar(
isAlwaysShown: true, //设置滚动条常亮
controller: _scrollCrl, //必须设置一个controller
// ///添加进度条
child: SingleChildScrollView(
controller: _scrollCrl,
// primary: true,
// reverse: true,
// physics: BouncingScrollPhysics(),
// padding: EdgeInsets.only(
// bottom:
// MediaQuery.of(context).viewInsets.bottom),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(20),
// _managerWidget(),
// VEmptyView(30),
_activityWidget(state),
VEmptyView(40),
_labelWidget(state),
VEmptyView(40),
// 消费
// _consume(state),
// VEmptyView(40),
_advancedFilterWidget(state)
],
),
)),
),
child:
// Scrollbar(
// isAlwaysShown: true, //设置滚动条常亮
// controller: _scrollCrl, //必须设置一个controller
// // ///添加进度条
// child:
SingleChildScrollView(
controller: _scrollCrl,
// primary: true,
// reverse: true,
// physics: BouncingScrollPhysics(),
// padding: EdgeInsets.only(
// bottom:
// MediaQuery.of(context).viewInsets.bottom),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(20),
// _managerWidget(),
// VEmptyView(30),
_activityWidget(state),
VEmptyView(40),
_labelWidget(state),
VEmptyView(40),
// 消费
// _consume(state),
// VEmptyView(40),
_advancedFilterWidget(state)
],
),
)),
// ),
Row(
children: [
Container(
... ...
... ... @@ -1644,36 +1644,38 @@ class _CustomerListPageState extends State<CustomerListPage>
child: Column(
children: [
Expanded(
child: Scrollbar(
isAlwaysShown: true, //设置滚动条常亮
controller: _scrollCrl, //必须设置一个controller
// ///添加进度条
child: SingleChildScrollView(
controller: _scrollCrl,
// primary: true,
// reverse: true,
// physics: BouncingScrollPhysics(),
// padding: EdgeInsets.only(
// bottom:
// MediaQuery.of(context).viewInsets.bottom),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(20),
_managerWidget(state),
VEmptyView(40),
_activityWidget(state),
VEmptyView(40),
_labelWidget(state),
VEmptyView(40),
// _consume(state),
// VEmptyView(40),
_advancedFilterWidget(state)
],
),
)),
),
child:
// Scrollbar(
// isAlwaysShown: true, //设置滚动条常亮
// controller: _scrollCrl, //必须设置一个controller
// // ///添加进度条
// child:
SingleChildScrollView(
controller: _scrollCrl,
// primary: true,
// reverse: true,
// physics: BouncingScrollPhysics(),
// padding: EdgeInsets.only(
// bottom:
// MediaQuery.of(context).viewInsets.bottom),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(20),
_managerWidget(state),
VEmptyView(40),
_activityWidget(state),
VEmptyView(40),
_labelWidget(state),
VEmptyView(40),
// _consume(state),
// VEmptyView(40),
_advancedFilterWidget(state)
],
),
)),
// ),
Row(
children: [
Container(
... ...
... ... @@ -63,6 +63,7 @@ import '../../utils/screen_util.dart';
import '../../widgets/loading.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
import '../detail/notebook_detail_change_page_f.dart';
import 'package:flutter_picker/flutter_picker.dart' as Picker;
const scrollDuration = Duration(microseconds: 500);
... ... @@ -659,27 +660,159 @@ 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(() {});
// }
// }
_getCallLog() async {
Iterable<CallLogEntry> result = await CallLog.query();
_baseIndoProvider.userHistorys = [];
List<Picker.PickerItem<dynamic>> data = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
_baseIndoProvider.userHistorys = [];
showPhoneHistory = false;
// setState(() {});
object.forEach((element) {
UserHistoryEntity userHistoryEntity =
UserHistoryEntity(null, null, '', '', '', '', '', null);
userHistoryEntity.rname = element.name ?? '';
userHistoryEntity.phone = element.number ?? '';
_baseIndoProvider.userHistorys.add(userHistoryEntity);
_baseIndoProvider.userHistorys.add(UserHistoryEntity(
'', '', element.name ?? '', '1', element.number, '', '', ''));
String title = '';
title += ' ${element.number ?? ''}';
if (element.name != null && element.name != '') {
title += ' ${element.name}';
}
String stateStr = ''; //状态
if (element.callType.name == 'incoming' ||
element.callType.name == 'wifiIncoming' ||
element.callType.name == 'answeredExternally') {
stateStr = ' 呼入';
} else if (element.callType.name == 'outgoing' ||
element.callType.name == 'wifiOutgoing' ||
element.callType.name == 'voiceMail') {
stateStr = ' 呼出';
} else if (element.callType.name == 'missed') {
stateStr = ' 未接';
} else if (element.callType.name == 'rejected') {
stateStr = ' 拒接';
} else if (element.callType.name == 'blocked') {
stateStr = ' 拦截';
}
String sunString =
Utils.formatCallLogFromMill(element.timestamp.toString());
data.add(Picker.PickerItem(
text: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Row(
children: [
HEmptyView(30),
Text(title ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)),
Expanded(
child: Text(stateStr ?? '',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_26000000))),
],
)),
Container(
margin: EdgeInsets.only(right: w(15)),
child: Text(sunString ?? '',
style: TextStyle(
fontSize: font(16), color: MyColours.color_515151)))
],
)));
});
if (object.length > 0) {
//有记录
showPhoneHistory = true;
setState(() {});
if (data.length > 0) {
//有记录,底部弹窗展示
// showPhoneHistory = true;
// setState(() {});
DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
if (value != null) {
_byValueToReqeust(value[0]);
}
}, title: '从通话记录选择客人电话', selecteds: [
// _getFirSelected(hourAndMinute, data),
// _getSecSelected(hourAndMinute)
]).then((value) {
print(value);
});
} else {
Utils.showToast('暂无通话记录!');
}
}
_byValueToReqeust(int index) {
setState(() {
sexStr = '先生';
showPhoneHistory = false;
_baseIndoProvider.phoneController.text =
_baseIndoProvider.userHistorys[index].phone != null
? _baseIndoProvider.userHistorys[index].phone
: '';
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
for (var item in _baseIndoProvider.sexList) {
item['select'] = false;
if (item['title'] == _baseIndoProvider.userHistorys[index].sexStr) {
item['select'] = true;
sexSelectIndex = int.parse(item['code']) - 1;
sexStr = _baseIndoProvider.userHistorys[index].sexStr;
}
}
_addNameSuffix(_baseIndoProvider.userHistorys[index].rname, sexStr);
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();
});
}
_getContactData() async {
Contact contact = await _contactPicker.selectContactWithNative();
... ... @@ -1360,75 +1493,76 @@ class TableManagerPageState extends State<TableManagerPage> {
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
setState(() {
sexStr = '先生';
showPhoneHistory = false;
_baseIndoProvider.phoneController
.text = _baseIndoProvider
.userHistorys[index]
.phone !=
null
? _baseIndoProvider
.userHistorys[index].phone
: '';
// _homeEnterModel.nameController.text =
// _homeEnterModel
// .userHistorys[index].rname +
// _nameSuffix();
for (var item in _baseIndoProvider
.sexList) {
item['select'] = false;
if (item['title'] ==
_baseIndoProvider
.userHistorys[index]
.sexStr) {
item['select'] = true;
sexSelectIndex =
int.parse(item['code']) -
1;
sexStr = _baseIndoProvider
.userHistorys[index]
.sexStr;
}
}
_addNameSuffix(
_baseIndoProvider
.userHistorys[index]
.rname,
sexStr);
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();
});
_byValueToReqeust(index);
// setState(() {
// sexStr = '先生';
// showPhoneHistory = false;
// _baseIndoProvider.phoneController
// .text = _baseIndoProvider
// .userHistorys[index]
// .phone !=
// null
// ? _baseIndoProvider
// .userHistorys[index].phone
// : '';
// // _homeEnterModel.nameController.text =
// // _homeEnterModel
// // .userHistorys[index].rname +
// // _nameSuffix();
// for (var item in _baseIndoProvider
// .sexList) {
// item['select'] = false;
// if (item['title'] ==
// _baseIndoProvider
// .userHistorys[index]
// .sexStr) {
// item['select'] = true;
// sexSelectIndex =
// int.parse(item['code']) -
// 1;
// sexStr = _baseIndoProvider
// .userHistorys[index]
// .sexStr;
// }
// }
// _addNameSuffix(
// _baseIndoProvider
// .userHistorys[index]
// .rname,
// sexStr);
// 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();
// });
},
child: Container(
width: double.infinity,
... ...
... ... @@ -5621,7 +5621,8 @@ class DialogUtil {
}
//显示消息弹框
static showMessageDialog(BuildContext context,CollectStoreProvider collectStoreProvider) async {
static showMessageDialog(
BuildContext context, CollectStoreProvider collectStoreProvider) async {
MessageDialogModel messageModel =
Provider.of<MessageDialogModel>(context, listen: false);
if (messageModel.messages.isEmpty) return null;
... ... @@ -5743,8 +5744,8 @@ class DialogUtil {
)
: ListView.builder(
itemBuilder: (context, index) {
return MessageDialogItemF(
model.messages[index],collectStoreProvider);
return MessageDialogItemF(model.messages[index],
collectStoreProvider);
},
itemCount: model.messages.length,
shrinkWrap: true)
... ... @@ -6723,6 +6724,101 @@ class DialogUtil {
});
}
//显示通话记录UI
static Future<List<int>> showSelectCusmanWidgetDialog(BuildContext context,
List<PickerItem<dynamic>> data, ValueChanged valueChanged,
{List<int> selecteds,
Color cancelTextColor = const Color.fromRGBO(0, 0, 0, 0.6),
String title = '',
VoidCallback onCancel,
String cancelText = '取消'}) {
return Picker(
selecteds: selecteds,
adapter: PickerDataAdapter<dynamic>(data: data),
// adapter: PickerDataAdapter(data: [
// PickerItem(
// text: Icon(Icons.add),
// value: Icons.add,
// ),
// PickerItem(text: Icon(Icons.title), value: Icons.title, children: [
// PickerItem(text: Icon(Icons.more_vert)),
// PickerItem(text: Icon(Icons.ac_unit)),
// PickerItem(text: Icon(Icons.access_alarm)),
// PickerItem(text: Icon(Icons.account_balance)),
// ]),
// PickerItem(text: Icon(Icons.face), value: Icons.face, children: [
// PickerItem(text: Icon(Icons.add_circle_outline)),
// PickerItem(text: Icon(Icons.add_a_photo)),
// PickerItem(text: Icon(Icons.access_time)),
// PickerItem(text: Icon(Icons.adjust)),
// ]),
// PickerItem(
// text: Icon(Icons.linear_scale),
// value: Icons.linear_scale,
// children: [
// PickerItem(text: Icon(Icons.assistant_photo)),
// PickerItem(text: Icon(Icons.account_balance)),
// PickerItem(text: Icon(Icons.airline_seat_legroom_extra)),
// PickerItem(text: Icon(Icons.airport_shuttle)),
// PickerItem(text: Icon(Icons.settings_bluetooth)),
// ]),
// PickerItem(text: Icon(Icons.close), value: Icons.close),
// ]),
height: ScreenUtil().setWidth(480),
itemExtent: ScreenUtil().setWidth(80),
hideHeader: false,
diameterRatio: 1,
// textScaleFactor: 20,
// squeeze:1.4,
// magnification:0.1,
headerDecoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border(
bottom: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_E7E7E7),
)),
title: Text(
title,
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32)),
),
cancelText: cancelText,
cancelTextStyle:
TextStyle(color: cancelTextColor, fontSize: ScreenUtil().setSp(32)),
confirmText: "确定",
confirmTextStyle: TextStyle(
color: MyColours.color_438E93, fontSize: ScreenUtil().setSp(32)),
selectedTextStyle: TextStyle(
color: MyColours.color_515151, fontSize: ScreenUtil().setSp(32)),
textStyle: TextStyle(
color: Color.fromRGBO(0, 0, 0, 0.26),
fontSize: ScreenUtil().setSp(32)),
selectionOverlay: Container(
height: ScreenUtil().setWidth(80),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: ScreenUtil().setWidth(2),
color: Colors.transparent),
top: BorderSide(
width: ScreenUtil().setWidth(2),
color: Colors.transparent))),
),
onCancel: onCancel,
onConfirm: (Picker picker, List value) {
print(value.toString());
if (valueChanged != null) {
valueChanged(value);
}
}).showModal<List<int>>(context).then((value) {
LogUtil.v("value:${value.toString()}");
return value;
});
}
//显示选择客户经理弹框
static Future<List<int>> showSelectCusmanDialog(
BuildContext context, List<dynamic> data, ValueChanged valueChanged,
... ... @@ -6733,7 +6829,7 @@ class DialogUtil {
String cancelText = '取消'}) {
return Picker(
selecteds: selecteds,
adapter: PickerDataAdapter<String>(pickerdata: data),
adapter: PickerDataAdapter<String>(pickerData: data),
height: ScreenUtil().setWidth(480),
hideHeader: false,
headerDecoration: BoxDecoration(
... ... @@ -6876,7 +6972,7 @@ class DialogUtil {
// changeToFirst: true,
looping: true,
selecteds: selecteds,
adapter: PickerDataAdapter<String>(pickerdata: data),
adapter: PickerDataAdapter<String>(pickerData: data),
height: ScreenUtil().setWidth(480),
hideHeader: false,
builderHeader: (BuildContext context) {
... ...
... ... @@ -198,6 +198,30 @@ class Utils {
//
//时间转换
static String formatCallLogFromMill(String datestr) {
String date = '';
DateTime _strtimes = DateTime.fromMillisecondsSinceEpoch(int.parse(
datestr)); //首先先将字符串格式的时间转为DateTime类型,因为millisecondsSinceEpoch方法转换要求为该格式
DateTime dateNow = DateTime.now();
if (Utils.isOneDay(_strtimes, dateNow)) {
//今天
date = DateUtil.formatDate(_strtimes, format: DateFormats.h_m);
} else if (Utils.isOneDay(_strtimes, dateNow.add(Duration(days: -1)))) {
date = "昨天";
} else if (Utils.isOneDay(_strtimes, dateNow.add(Duration(days: 2)))) {
date = "后天 ";
} else {
date = Utils.addZeroNumber(_strtimes.month) +
"月" +
Utils.addZeroNumber(_strtimes.day) +
"日";
}
return date;
}
//时间转换
static String formatFromMill(String datestr) {
String date = '';
DateTime _strtimes = DateTime.fromMillisecondsSinceEpoch(
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/utils.dart';
import '../utils/screen_util.dart';
class RowMultiText extends StatelessWidget {
final String title;
... ... @@ -8,10 +11,14 @@ class RowMultiText extends StatelessWidget {
final TextAlign textAlign;
final Color textColor;
final Color bgColor;
final Color textColorR;
final String imageName;
RowMultiText(this.title, this.content,
{this.textAlign = TextAlign.right,
this.textColor = MyColours.color_828282,
this.bgColor = MyColours.color_ffffff});
this.textColorR = MyColours.color_353535,
this.bgColor = MyColours.color_ffffff,
this.imageName});
@override
Widget build(BuildContext context) {
... ... @@ -22,6 +29,7 @@ class RowMultiText extends StatelessWidget {
alignment: Alignment.center,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
... ... @@ -33,15 +41,26 @@ class RowMultiText extends StatelessWidget {
),
Expanded(
child: Container(
alignment: Alignment.centerRight,
margin: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
child: Text(content,
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(30)),
softWrap: true,
textAlign: this.textAlign),
),
alignment: Alignment.centerRight,
margin: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
if (imageName != null)
Container(
margin: EdgeInsets.only(right: w(2)),
child: Image.asset(
Utils.getImgPath(imageName),
width: w(20),
)),
Text(content,
style: TextStyle(
color: textColorR,
fontSize: ScreenUtil().setSp(30)),
softWrap: true,
textAlign: this.textAlign),
],
)),
)
],
),
... ...
... ... @@ -598,7 +598,7 @@ packages:
name: flutter_picker
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.3"
version: "2.1.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
... ...
... ... @@ -93,7 +93,7 @@ dependencies:
# url_launcher: ^5.4.2
url_launcher: ^6.0.9
# 滚轮选择器
flutter_picker: ^2.0.3
flutter_picker: ^2.1.0
# 网络状态
# connectivity: ^0.4.8
connectivity: ^3.0.6
... ...