Commit 6f0ee03c56990cfe0f8c8cf72732e8b67dd888b2

Authored by wdn127929
1 parent 96319ce5

通话记录UI变更

@@ -18,19 +18,19 @@ if (flutterRoot == null) { @@ -18,19 +18,19 @@ if (flutterRoot == null) {
18 18
19 19
20 20
21 -def flutterVersionCode = "515" 21 +def flutterVersionCode = "516"
22 if (flutterVersionCode == null) { 22 if (flutterVersionCode == null) {
23 - flutterVersionCode = '515' 23 + flutterVersionCode = '516'
24 24
25 25
26 26
27 } 27 }
28 28
29 29
30 -def flutterVersionName = "5.1.5" 30 +def flutterVersionName = "5.1.6"
31 31
32 if (flutterVersionName == null) { 32 if (flutterVersionName == null) {
33 - flutterVersionName = '5.1.5' 33 + flutterVersionName = '5.1.6'
34 34
35 35
36 } 36 }
@@ -28,6 +28,7 @@ import '../../models/user_history_entity.dart'; @@ -28,6 +28,7 @@ import '../../models/user_history_entity.dart';
28 import '../../utils/screen_util.dart'; 28 import '../../utils/screen_util.dart';
29 import '../../widgets/MyDivider.dart'; 29 import '../../widgets/MyDivider.dart';
30 import '../../widgets/special_text/my_extended_text_selection_controls.dart'; 30 import '../../widgets/special_text/my_extended_text_selection_controls.dart';
  31 +import 'package:flutter_picker/flutter_picker.dart' as Picker;
31 32
32 /** 33 /**
33 * 填写预订联系人页面 34 * 填写预订联系人页面
@@ -159,7 +160,7 @@ class _EditReserverPageState extends State<EditReserverPage> { @@ -159,7 +160,7 @@ class _EditReserverPageState extends State<EditReserverPage> {
159 return; 160 return;
160 } 161 }
161 if (name != '') { 162 if (name != '') {
162 - detailModel.nameController.text = name + suffix; 163 + detailModel.nameController.text = name + suffix??'';
163 } 164 }
164 } 165 }
165 166
@@ -214,25 +215,118 @@ class _EditReserverPageState extends State<EditReserverPage> { @@ -214,25 +215,118 @@ class _EditReserverPageState extends State<EditReserverPage> {
214 215
215 _getCallLog() async { 216 _getCallLog() async {
216 Iterable<CallLogEntry> result = await CallLog.query(); 217 Iterable<CallLogEntry> result = await CallLog.query();
217 - detailModel.userHistorys = []; 218 + List<Picker.PickerItem<dynamic>> data = [];
218 219
219 List<CallLogEntry> object = Utils.removeDuplicates(result.toList()); 220 List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
220 221
221 print(object); 222 print(object);
  223 +
  224 + detailModel.userHistorys = [];
  225 + showPhoneHistory = false;
  226 + // setState(() {});
  227 +
222 object.forEach((element) { 228 object.forEach((element) {
223 - UserHistoryEntity userHistoryEntity =  
224 - UserHistoryEntity(null, null, '', '', '', '', '', null);  
225 - userHistoryEntity.rname = element.name ?? '';  
226 - userHistoryEntity.phone = element.number ?? '';  
227 - detailModel.userHistorys.add(userHistoryEntity); 229 + detailModel.userHistorys.add(UserHistoryEntity(
  230 + '', '', element.name ?? '', '1', element.number, '', '', ''));
  231 +
  232 + String title = '';
  233 + title += ' ${element.number ?? ''}';
  234 + if (element.name != null && element.name != '') {
  235 + title += ' ${element.name}';
  236 + }
  237 +
  238 + String stateStr = ''; //状态
  239 +
  240 + if (element.callType.name == 'incoming' ||
  241 + element.callType.name == 'wifiIncoming' ||
  242 + element.callType.name == 'answeredExternally') {
  243 + stateStr = ' 呼入';
  244 + } else if (element.callType.name == 'outgoing' ||
  245 + element.callType.name == 'wifiOutgoing' ||
  246 + element.callType.name == 'voiceMail') {
  247 + stateStr = ' 呼出';
  248 + } else if (element.callType.name == 'missed') {
  249 + stateStr = ' 未接';
  250 + } else if (element.callType.name == 'rejected') {
  251 + stateStr = ' 拒接';
  252 + } else if (element.callType.name == 'blocked') {
  253 + stateStr = ' 拦截';
  254 + }
  255 +
  256 + String sunString =
  257 + Utils.formatCallLogFromMill(element.timestamp.toString());
  258 +
  259 + data.add(Picker.PickerItem(
  260 + text: Row(
  261 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  262 + children: [
  263 + Expanded(
  264 + child: Row(
  265 + children: [
  266 + HEmptyView(30),
  267 + Text(title ?? '',
  268 + style: TextStyle(
  269 + fontSize: font(16), color: MyColours.color_515151)),
  270 + Expanded(
  271 + child: Text(stateStr ?? '',
  272 + style: TextStyle(
  273 + fontSize: font(16),
  274 + color: MyColours.color_26000000))),
  275 + ],
  276 + )),
  277 + Container(
  278 + margin: EdgeInsets.only(right: w(15)),
  279 + child: Text(sunString ?? '',
  280 + style: TextStyle(
  281 + fontSize: font(16), color: MyColours.color_515151)))
  282 + ],
  283 + )));
228 }); 284 });
229 - if (object.length > 0) {  
230 - //有记录  
231 - showPhoneHistory = true;  
232 - setState(() {}); 285 + if (data.length > 0) {
  286 + //有记录,底部弹窗展示
  287 + // showPhoneHistory = true;
  288 + // setState(() {});
  289 + DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
  290 + if (value != null) {
  291 + _byValueToReqeust(value[0]);
  292 + }
  293 + }, title: '从通话记录选择客人电话', selecteds: [
  294 + // _getFirSelected(hourAndMinute, data),
  295 + // _getSecSelected(hourAndMinute)
  296 + ]).then((value) {
  297 + print(value);
  298 + });
  299 + } else {
  300 + Utils.showToast('暂无通话记录!');
233 } 301 }
234 } 302 }
235 303
  304 + _byValueToReqeust(int index) {
  305 + setState(() {
  306 + showPhoneHistory = false;
  307 + UserHistoryEntity userHistoryEntity = detailModel.userHistorys[index];
  308 + detailModel.phoneController.text =
  309 + userHistoryEntity.phone != null ? userHistoryEntity.phone : '';
  310 + for (var item in detailModel.sexList) {
  311 + item['select'] = false;
  312 + if (item['title'] == userHistoryEntity.sexStr) {
  313 + item['select'] = true;
  314 + }
  315 + }
  316 +
  317 + if ((nameStr != null && nameStr != '') &&
  318 + (userHistoryEntity.rname == '' || userHistoryEntity.rname == null)) {
  319 + } else {
  320 + nameStr = userHistoryEntity.rname;
  321 + }
  322 +
  323 + _addNameSuffix(userHistoryEntity.rname, _nameSuffix());
  324 +
  325 + _phoneNode.unfocus();
  326 + detailModel.userHistorys.clear();
  327 + });
  328 + }
  329 +
236 @override 330 @override
237 Widget build(BuildContext context) { 331 Widget build(BuildContext context) {
238 detailModel = Provider.of<NotebookDetailModel>(context, listen: true); 332 detailModel = Provider.of<NotebookDetailModel>(context, listen: true);
@@ -728,50 +822,51 @@ class _EditReserverPageState extends State<EditReserverPage> { @@ -728,50 +822,51 @@ class _EditReserverPageState extends State<EditReserverPage> {
728 itemBuilder: (context, index) { 822 itemBuilder: (context, index) {
729 return GestureDetector( 823 return GestureDetector(
730 onTap: () { 824 onTap: () {
731 - setState(() {  
732 - showPhoneHistory = false;  
733 - UserHistoryEntity  
734 - userHistoryEntity =  
735 - detailModel  
736 - .userHistorys[  
737 - index];  
738 - if (userHistoryEntity.sex ==  
739 - null ||  
740 - userHistoryEntity.sex ==  
741 - '') {  
742 - userHistoryEntity.sex =  
743 - '1';  
744 - }  
745 - detailModel.phoneController  
746 - .text =  
747 - userHistoryEntity  
748 - .phone !=  
749 - null  
750 - ? userHistoryEntity  
751 - .phone  
752 - : '';  
753 - for (var item in detailModel  
754 - .sexList) {  
755 - item['select'] = false;  
756 - if (item['title'] ==  
757 - userHistoryEntity  
758 - .sexStr) {  
759 - item['select'] = true;  
760 - }  
761 - }  
762 - // _homeEnterModel.nameController.text =  
763 - // _homeEnterModel  
764 - // .userHistorys[index].rname +  
765 - // _nameSuffix();  
766 - _addNameSuffix(  
767 - userHistoryEntity.rname,  
768 - _nameSuffix());  
769 - nameStr =  
770 - userHistoryEntity.rname;  
771 - _phoneNode.unfocus();  
772 - detailModel.userHistorys  
773 - .clear();  
774 - }); 825 + _byValueToReqeust(index);
  826 + // setState(() {
  827 + // showPhoneHistory = false;
  828 + // UserHistoryEntity
  829 + // userHistoryEntity =
  830 + // detailModel
  831 + // .userHistorys[
  832 + // index];
  833 + // if (userHistoryEntity.sex ==
  834 + // null ||
  835 + // userHistoryEntity.sex ==
  836 + // '') {
  837 + // userHistoryEntity.sex =
  838 + // '1';
  839 + // }
  840 + // detailModel.phoneController
  841 + // .text =
  842 + // userHistoryEntity
  843 + // .phone !=
  844 + // null
  845 + // ? userHistoryEntity
  846 + // .phone
  847 + // : '';
  848 + // for (var item in detailModel
  849 + // .sexList) {
  850 + // item['select'] = false;
  851 + // if (item['title'] ==
  852 + // userHistoryEntity
  853 + // .sexStr) {
  854 + // item['select'] = true;
  855 + // }
  856 + // }
  857 + // // _homeEnterModel.nameController.text =
  858 + // // _homeEnterModel
  859 + // // .userHistorys[index].rname +
  860 + // // _nameSuffix();
  861 + // _addNameSuffix(
  862 + // userHistoryEntity.rname,
  863 + // _nameSuffix());
  864 + // nameStr =
  865 + // userHistoryEntity.rname;
  866 + // _phoneNode.unfocus();
  867 + // detailModel.userHistorys
  868 + // .clear();
  869 + // });
775 }, 870 },
776 child: Container( 871 child: Container(
777 width: double.infinity, 872 width: double.infinity,
@@ -40,6 +40,7 @@ import 'package:easy_contact_picker/easy_contact_picker.dart'; @@ -40,6 +40,7 @@ import 'package:easy_contact_picker/easy_contact_picker.dart';
40 import '../../models/user_history_entity.dart'; 40 import '../../models/user_history_entity.dart';
41 import '../../utils/screen_util.dart'; 41 import '../../utils/screen_util.dart';
42 import '../../widgets/special_text/my_extended_text_selection_controls.dart'; 42 import '../../widgets/special_text/my_extended_text_selection_controls.dart';
  43 +import 'package:flutter_picker/flutter_picker.dart' as Picker;
43 44
44 typedef clickCallback = void Function(String value); 45 typedef clickCallback = void Function(String value);
45 46
@@ -531,8 +532,8 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> { @@ -531,8 +532,8 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
531 _notebookDetailChangeModel.nameController.text.endsWith(suffix)) { 532 _notebookDetailChangeModel.nameController.text.endsWith(suffix)) {
532 return; 533 return;
533 } 534 }
534 - if (name != '') {  
535 - _notebookDetailChangeModel.nameController.text = name + suffix; 535 + if (name != ''&& name != null) {
  536 + _notebookDetailChangeModel.nameController.text = name + suffix??'';
536 } 537 }
537 } 538 }
538 /** 539 /**
@@ -1053,27 +1054,154 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> { @@ -1053,27 +1054,154 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
1053 ); 1054 );
1054 } 1055 }
1055 1056
  1057 + // _getCallLog() async {
  1058 + // Iterable<CallLogEntry> result = await CallLog.query();
  1059 + // _notebookDetailChangeModel.userHistorys = [];
  1060 +
  1061 + // List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
  1062 +
  1063 + // print(object);
  1064 + // object.forEach((element) {
  1065 + // UserHistoryEntity userHistoryEntity =
  1066 + // UserHistoryEntity(null, null, '', '', '', '', '', null);
  1067 + // userHistoryEntity.rname = element.name ?? '';
  1068 + // userHistoryEntity.phone = element.number ?? '';
  1069 + // _notebookDetailChangeModel.userHistorys.add(userHistoryEntity);
  1070 + // });
  1071 + // if (object.length > 0) {
  1072 + // //有记录
  1073 + // showPhoneHistory = true;
  1074 + // setState(() {});
  1075 + // }
  1076 + // }
1056 _getCallLog() async { 1077 _getCallLog() async {
1057 Iterable<CallLogEntry> result = await CallLog.query(); 1078 Iterable<CallLogEntry> result = await CallLog.query();
1058 - _notebookDetailChangeModel.userHistorys = []; 1079 + List<Picker.PickerItem<dynamic>> data = [];
1059 1080
1060 List<CallLogEntry> object = Utils.removeDuplicates(result.toList()); 1081 List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
1061 1082
1062 print(object); 1083 print(object);
  1084 +
  1085 + _notebookDetailChangeModel.userHistorys = [];
  1086 + showPhoneHistory = false;
  1087 + // setState(() {});
  1088 +
1063 object.forEach((element) { 1089 object.forEach((element) {
1064 - UserHistoryEntity userHistoryEntity =  
1065 - UserHistoryEntity(null, null, '', '', '', '', '', null);  
1066 - userHistoryEntity.rname = element.name ?? '';  
1067 - userHistoryEntity.phone = element.number ?? '';  
1068 - _notebookDetailChangeModel.userHistorys.add(userHistoryEntity); 1090 + _notebookDetailChangeModel.userHistorys.add(UserHistoryEntity(
  1091 + '', '', element.name ?? '', '1', element.number, '', '', ''));
  1092 +
  1093 + String title = '';
  1094 + title += ' ${element.number ?? ''}';
  1095 + if (element.name != null && element.name != '') {
  1096 + title += ' ${element.name}';
  1097 + }
  1098 +
  1099 + String stateStr = ''; //状态
  1100 +
  1101 + if (element.callType.name == 'incoming' ||
  1102 + element.callType.name == 'wifiIncoming' ||
  1103 + element.callType.name == 'answeredExternally') {
  1104 + stateStr = ' 呼入';
  1105 + } else if (element.callType.name == 'outgoing' ||
  1106 + element.callType.name == 'wifiOutgoing' ||
  1107 + element.callType.name == 'voiceMail') {
  1108 + stateStr = ' 呼出';
  1109 + } else if (element.callType.name == 'missed') {
  1110 + stateStr = ' 未接';
  1111 + } else if (element.callType.name == 'rejected') {
  1112 + stateStr = ' 拒接';
  1113 + } else if (element.callType.name == 'blocked') {
  1114 + stateStr = ' 拦截';
  1115 + }
  1116 +
  1117 + String sunString =
  1118 + Utils.formatCallLogFromMill(element.timestamp.toString());
  1119 +
  1120 + data.add(Picker.PickerItem(
  1121 + text: Row(
  1122 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  1123 + children: [
  1124 + Expanded(
  1125 + child: Row(
  1126 + children: [
  1127 + HEmptyView(30),
  1128 + Text(title ?? '',
  1129 + style: TextStyle(
  1130 + fontSize: font(16), color: MyColours.color_515151)),
  1131 + Expanded(
  1132 + child: Text(stateStr ?? '',
  1133 + style: TextStyle(
  1134 + fontSize: font(16),
  1135 + color: MyColours.color_26000000))),
  1136 + ],
  1137 + )),
  1138 + Container(
  1139 + margin: EdgeInsets.only(right: w(15)),
  1140 + child: Text(sunString ?? '',
  1141 + style: TextStyle(
  1142 + fontSize: font(16), color: MyColours.color_515151)))
  1143 + ],
  1144 + )));
1069 }); 1145 });
1070 - if (object.length > 0) {  
1071 - //有记录  
1072 - showPhoneHistory = true;  
1073 - setState(() {}); 1146 + if (data.length > 0) {
  1147 + //有记录,底部弹窗展示
  1148 + // showPhoneHistory = true;
  1149 + // setState(() {});
  1150 + DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
  1151 + if (value != null) {
  1152 + _byValueToReqeust(value[0]);
  1153 + }
  1154 + }, title: '从通话记录选择客人电话', selecteds: [
  1155 + // _getFirSelected(hourAndMinute, data),
  1156 + // _getSecSelected(hourAndMinute)
  1157 + ]).then((value) {
  1158 + print(value);
  1159 + });
  1160 + } else {
  1161 + Utils.showToast('暂无通话记录!');
1074 } 1162 }
1075 } 1163 }
1076 1164
  1165 + _byValueToReqeust(int index) {
  1166 + setState(() {
  1167 + showPhoneHistory = false;
  1168 + UserHistoryEntity userHistoryEntity =
  1169 + _notebookDetailChangeModel.userHistorys[index];
  1170 + _notebookDetailChangeModel.phoneController.text = userHistoryEntity.phone;
  1171 + // if (userHistoryEntity.sex == null || userHistoryEntity.sex == '') {
  1172 + // userHistoryEntity.sex = '1';
  1173 + // }
  1174 + // _homeEnterModel.nameController.text =
  1175 + // _homeEnterModel
  1176 + // .userHistorys[index].rname +
  1177 + // _nameSuffix();
  1178 + for (var item in _notebookDetailChangeModel.sexList) {
  1179 + item['select'] = false;
  1180 + if (item['title'] == userHistoryEntity.sexStr) {
  1181 + item['select'] = true;
  1182 + }
  1183 + }
  1184 + _addNameSuffix(userHistoryEntity.rname, _nameSuffix());
  1185 + if (userHistoryEntity.rname == null || userHistoryEntity.rname == '') {
  1186 + nameStr = _notebookDetailChangeModel.nameController.text;
  1187 + if (nameStr.endsWith('女士')) {
  1188 + nameStr = nameStr.replaceAll('女士', '');
  1189 + }
  1190 + if (nameStr.endsWith('先生')) {
  1191 + nameStr = nameStr.replaceAll('先生', '');
  1192 + }
  1193 + if (nameStr.endsWith('公司')) {
  1194 + nameStr = nameStr.replaceAll('公司', '');
  1195 + }
  1196 + } else {
  1197 + nameStr = userHistoryEntity.rname;
  1198 + }
  1199 +
  1200 + _phoneNode.unfocus();
  1201 + _notebookDetailChangeModel.userHistorys.clear();
  1202 + });
  1203 + }
  1204 +
1077 _openAddressBook() async { 1205 _openAddressBook() async {
1078 if (!(await checkContactPermission())) { 1206 if (!(await checkContactPermission())) {
1079 PermissionStatus permissionStatus = await contactPermissionStatus(); 1207 PermissionStatus permissionStatus = await contactPermissionStatus();
@@ -1967,67 +2095,68 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> { @@ -1967,67 +2095,68 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
1967 itemBuilder: (context, index) { 2095 itemBuilder: (context, index) {
1968 return GestureDetector( 2096 return GestureDetector(
1969 onTap: () { 2097 onTap: () {
1970 - setState(() {  
1971 - showPhoneHistory = false;  
1972 - UserHistoryEntity  
1973 - userHistoryEntity =  
1974 - _notebookDetailChangeModel  
1975 - .userHistorys[index];  
1976 - _notebookDetailChangeModel  
1977 - .phoneController.text =  
1978 - userHistoryEntity.phone;  
1979 - if (userHistoryEntity.sex ==  
1980 - null ||  
1981 - userHistoryEntity.sex ==  
1982 - '') {  
1983 - userHistoryEntity.sex = '1';  
1984 - }  
1985 - // _homeEnterModel.nameController.text =  
1986 - // _homeEnterModel  
1987 - // .userHistorys[index].rname +  
1988 - // _nameSuffix();  
1989 - for (var item  
1990 - in _notebookDetailChangeModel  
1991 - .sexList) {  
1992 - item['select'] = false;  
1993 - if (item['title'] ==  
1994 - userHistoryEntity  
1995 - .sexStr) {  
1996 - item['select'] = true;  
1997 - }  
1998 - }  
1999 - _addNameSuffix(  
2000 - userHistoryEntity.rname,  
2001 - _nameSuffix());  
2002 - if (userHistoryEntity.rname ==  
2003 - null ||  
2004 - userHistoryEntity.rname ==  
2005 - '') {  
2006 - nameStr =  
2007 - _notebookDetailChangeModel  
2008 - .nameController.text;  
2009 - if (nameStr.endsWith('女士')) {  
2010 - nameStr = nameStr  
2011 - .replaceAll('女士', '');  
2012 - }  
2013 - if (nameStr.endsWith('先生')) {  
2014 - nameStr = nameStr  
2015 - .replaceAll('先生', '');  
2016 - }  
2017 - if (nameStr.endsWith('公司')) {  
2018 - nameStr = nameStr  
2019 - .replaceAll('公司', '');  
2020 - }  
2021 - } else {  
2022 - nameStr =  
2023 - userHistoryEntity.rname;  
2024 - }  
2025 -  
2026 - _phoneNode.unfocus();  
2027 - _notebookDetailChangeModel  
2028 - .userHistorys  
2029 - .clear();  
2030 - }); 2098 + _byValueToReqeust(index);
  2099 + // setState(() {
  2100 + // showPhoneHistory = false;
  2101 + // UserHistoryEntity
  2102 + // userHistoryEntity =
  2103 + // _notebookDetailChangeModel
  2104 + // .userHistorys[index];
  2105 + // _notebookDetailChangeModel
  2106 + // .phoneController.text =
  2107 + // userHistoryEntity.phone;
  2108 + // if (userHistoryEntity.sex ==
  2109 + // null ||
  2110 + // userHistoryEntity.sex ==
  2111 + // '') {
  2112 + // userHistoryEntity.sex = '1';
  2113 + // }
  2114 + // // _homeEnterModel.nameController.text =
  2115 + // // _homeEnterModel
  2116 + // // .userHistorys[index].rname +
  2117 + // // _nameSuffix();
  2118 + // for (var item
  2119 + // in _notebookDetailChangeModel
  2120 + // .sexList) {
  2121 + // item['select'] = false;
  2122 + // if (item['title'] ==
  2123 + // userHistoryEntity
  2124 + // .sexStr) {
  2125 + // item['select'] = true;
  2126 + // }
  2127 + // }
  2128 + // _addNameSuffix(
  2129 + // userHistoryEntity.rname,
  2130 + // _nameSuffix());
  2131 + // if (userHistoryEntity.rname ==
  2132 + // null ||
  2133 + // userHistoryEntity.rname ==
  2134 + // '') {
  2135 + // nameStr =
  2136 + // _notebookDetailChangeModel
  2137 + // .nameController.text;
  2138 + // if (nameStr.endsWith('女士')) {
  2139 + // nameStr = nameStr
  2140 + // .replaceAll('女士', '');
  2141 + // }
  2142 + // if (nameStr.endsWith('先生')) {
  2143 + // nameStr = nameStr
  2144 + // .replaceAll('先生', '');
  2145 + // }
  2146 + // if (nameStr.endsWith('公司')) {
  2147 + // nameStr = nameStr
  2148 + // .replaceAll('公司', '');
  2149 + // }
  2150 + // } else {
  2151 + // nameStr =
  2152 + // userHistoryEntity.rname;
  2153 + // }
  2154 +
  2155 + // _phoneNode.unfocus();
  2156 + // _notebookDetailChangeModel
  2157 + // .userHistorys
  2158 + // .clear();
  2159 + // });
2031 }, 2160 },
2032 child: Container( 2161 child: Container(
2033 width: double.infinity, 2162 width: double.infinity,
@@ -1603,31 +1603,33 @@ class NotebookDetailPageState extends State<NotebookDetailPage> { @@ -1603,31 +1603,33 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
1603 TextStyle(color: MyColours.color_999999, fontSize: font(14)), 1603 TextStyle(color: MyColours.color_999999, fontSize: font(14)),
1604 ), 1604 ),
1605 ])), 1605 ])),
1606 - Container(  
1607 - padding: EdgeInsets.only(left: w(13), top: w(10)),  
1608 - child:  
1609 - Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [  
1610 - Text(  
1611 - '最后修改',  
1612 - overflow: TextOverflow.ellipsis,  
1613 - style:  
1614 - TextStyle(color: MyColours.color_515151, fontSize: font(14)),  
1615 - ),  
1616 - // HEmptyView(40),  
1617 - Expanded(  
1618 - child: Text(  
1619 - '${detailEntity.nick_name ?? ''}' +  
1620 - ' ' +  
1621 - '${detailEntity.seller_user_phone ?? ''}' +  
1622 - (detailEntity.up_date == null  
1623 - ? ''  
1624 - : ' ${_getDateTime(detailEntity.up_date)}'),  
1625 - // overflow: TextOverflow.ellipsis,  
1626 - textAlign: TextAlign.right,  
1627 - style:  
1628 - TextStyle(color: MyColours.color_999999, fontSize: font(14)),  
1629 - )),  
1630 - ])), 1606 + if (detailEntity.up_date != null)
  1607 + Container(
  1608 + padding: EdgeInsets.only(left: w(13), top: w(10)),
  1609 + child: Row(
  1610 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  1611 + children: [
  1612 + Text(
  1613 + '最后修改',
  1614 + overflow: TextOverflow.ellipsis,
  1615 + style: TextStyle(
  1616 + color: MyColours.color_515151, fontSize: font(14)),
  1617 + ),
  1618 + // HEmptyView(40),
  1619 + Expanded(
  1620 + child: Text(
  1621 + '${detailEntity.nick_name ?? ''}' +
  1622 + ' ' +
  1623 + '${detailEntity.seller_user_phone ?? ''}' +
  1624 + (detailEntity.up_date == null
  1625 + ? ''
  1626 + : ' ${_getDateTime(detailEntity.up_date)}'),
  1627 + // overflow: TextOverflow.ellipsis,
  1628 + textAlign: TextAlign.right,
  1629 + style: TextStyle(
  1630 + color: MyColours.color_999999, fontSize: font(14)),
  1631 + )),
  1632 + ])),
1631 Offstage( 1633 Offstage(
1632 offstage: (detailEntity.status == "4" && detailEntity.cancel != null) 1634 offstage: (detailEntity.status == "4" && detailEntity.cancel != null)
1633 ? false 1635 ? false
@@ -3041,16 +3043,13 @@ class NotebookDetailPageState extends State<NotebookDetailPage> { @@ -3041,16 +3043,13 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
3041 .rnameStr, 3043 .rnameStr,
3042 textColor: MyColours 3044 textColor: MyColours
3043 .color_515151), 3045 .color_515151),
3044 - (detailEntity.status ==  
3045 - "4" && 3046 + (detailEntity.status == "4" &&
3046 detailEntity 3047 detailEntity
3047 .cancel != 3048 .cancel !=
3048 null && 3049 null &&
3049 - (detailEntity  
3050 - .phone == 3050 + (detailEntity.phone ==
3051 null || 3051 null ||
3052 - detailEntity  
3053 - .phone == 3052 + detailEntity.phone ==
3054 '')) 3053 ''))
3055 ? SizedBox() 3054 ? SizedBox()
3056 : InkWell( 3055 : InkWell(
@@ -3098,7 +3097,12 @@ class NotebookDetailPageState extends State<NotebookDetailPage> { @@ -3098,7 +3097,12 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
3098 : Utils.starPhone(detailEntity 3097 : Utils.starPhone(detailEntity
3099 .phone), 3098 .phone),
3100 textColor: MyColours 3099 textColor: MyColours
3101 - .color_515151)), 3100 + .color_515151,
  3101 + textColorR:
  3102 + MyColours
  3103 + .color_438E93,
  3104 + imageName:
  3105 + 'phone_detail')),
3102 (detailEntity.status == 3106 (detailEntity.status ==
3103 "4" && 3107 "4" &&
3104 detailEntity 3108 detailEntity
@@ -267,18 +267,18 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver { @@ -267,18 +267,18 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
267 if (widget.initialIndex == 0 || 267 if (widget.initialIndex == 0 ||
268 widget.initialIndex == 1 && needRefreshTemp == false) return; 268 widget.initialIndex == 1 && needRefreshTemp == false) return;
269 _initNotification(); 269 _initNotification();
270 - Future.delayed(Duration(milliseconds: 30000), () {  
271 - //30000  
272 - ContactModel.getInstance().uploadLocalContact(context);  
273 - UserModel usermodel = Provider.of<UserModel>(context, listen: false);  
274 -  
275 - if (needUpdate && !usermodel.downLoading) {  
276 - UpdateModelMy updateModel = new UpdateModelMy();  
277 - updateModel.checkUpdate(context, (version) {  
278 - updateModel.showUpdateDialog(context, version);  
279 - }, showToast: false);  
280 - }  
281 - }); 270 + // Future.delayed(Duration(milliseconds: 30000), () {
  271 + // //30000
  272 + // ContactModel.getInstance().uploadLocalContact(context);
  273 + // UserModel usermodel = Provider.of<UserModel>(context, listen: false);
  274 +
  275 + // if (needUpdate && !usermodel.downLoading) {
  276 + // UpdateModelMy updateModel = new UpdateModelMy();
  277 + // updateModel.checkUpdate(context, (version) {
  278 + // updateModel.showUpdateDialog(context, version);
  279 + // }, showToast: false);
  280 + // }
  281 + // });
282 282
283 if (Utils.getAuthority(context, '消息中心')) { 283 if (Utils.getAuthority(context, '消息中心')) {
284 timer = Timer.periodic(Duration(minutes: 3), (_) { 284 timer = Timer.periodic(Duration(minutes: 3), (_) {
1 import 'dart:async'; 1 import 'dart:async';
2 import 'dart:convert'; 2 import 'dart:convert';
3 import 'dart:io'; 3 import 'dart:io';
4 -import 'dart:typed_data';  
5 import 'dart:ui'; 4 import 'dart:ui';
6 5
7 import 'package:cached_network_image/cached_network_image.dart'; 6 import 'package:cached_network_image/cached_network_image.dart';
@@ -11,14 +10,15 @@ import 'package:easy_contact_picker/easy_contact_picker.dart'; @@ -11,14 +10,15 @@ import 'package:easy_contact_picker/easy_contact_picker.dart';
11 import 'package:flutter/material.dart'; 10 import 'package:flutter/material.dart';
12 import 'package:flutter/rendering.dart'; 11 import 'package:flutter/rendering.dart';
13 import 'package:flutter/services.dart'; 12 import 'package:flutter/services.dart';
  13 +import 'package:flutter_picker/Picker.dart';
14 import 'package:flutter_screenutil/flutter_screenutil.dart'; 14 import 'package:flutter_screenutil/flutter_screenutil.dart';
15 import 'package:flutter_sms/flutter_sms.dart'; 15 import 'package:flutter_sms/flutter_sms.dart';
16 -import 'package:one_key/constant/state.dart'; 16 +
17 import 'package:one_key/models/coupon_model.dart'; 17 import 'package:one_key/models/coupon_model.dart';
18 import 'package:one_key/models/notebook_detail.dart'; 18 import 'package:one_key/models/notebook_detail.dart';
19 import 'package:one_key/models/remark.dart'; 19 import 'package:one_key/models/remark.dart';
20 import 'package:one_key/models/seller_phone_model.dart'; 20 import 'package:one_key/models/seller_phone_model.dart';
21 -import 'package:one_key/models/user.dart'; 21 +
22 import 'package:one_key/pages/detail/notebook_detail_change_page_f.dart'; 22 import 'package:one_key/pages/detail/notebook_detail_change_page_f.dart';
23 import 'package:one_key/pages/online_check/photo_view_wiget.dart'; 23 import 'package:one_key/pages/online_check/photo_view_wiget.dart';
24 import 'package:one_key/provider/base_info_provider.dart'; 24 import 'package:one_key/provider/base_info_provider.dart';
@@ -44,11 +44,14 @@ import 'package:permission_handler/permission_handler.dart'; @@ -44,11 +44,14 @@ import 'package:permission_handler/permission_handler.dart';
44 import 'package:provider/provider.dart'; 44 import 'package:provider/provider.dart';
45 import 'package:one_key/models/table_list.dart' as t; 45 import 'package:one_key/models/table_list.dart' as t;
46 import 'package:sendsms/sendsms.dart'; 46 import 'package:sendsms/sendsms.dart';
  47 +
47 import 'dart:ui' as ui; 48 import 'dart:ui' as ui;
48 49
49 import '../../app.dart'; 50 import '../../app.dart';
50 51
  52 +import '../../constant/state.dart';
51 import '../../models/sms_info.dart'; 53 import '../../models/sms_info.dart';
  54 +import '../../models/user.dart';
52 import '../../models/user_history_entity.dart'; 55 import '../../models/user_history_entity.dart';
53 import '../../provider/SmsModel.dart'; 56 import '../../provider/SmsModel.dart';
54 import '../../provider/customer_provider.dart'; 57 import '../../provider/customer_provider.dart';
@@ -56,6 +59,7 @@ import '../../provider/marketing_center_provider.dart'; @@ -56,6 +59,7 @@ import '../../provider/marketing_center_provider.dart';
56 import '../../provider/my_model.dart'; 59 import '../../provider/my_model.dart';
57 import '../../utils/screen_util.dart'; 60 import '../../utils/screen_util.dart';
58 import '../../widgets/special_text/my_extended_text_selection_controls.dart'; 61 import '../../widgets/special_text/my_extended_text_selection_controls.dart';
  62 +import 'package:flutter_picker/flutter_picker.dart' as Picker;
59 63
60 class InvicationPage extends StatefulWidget { 64 class InvicationPage extends StatefulWidget {
61 final String rid; //预订订单id 65 final String rid; //预订订单id
@@ -593,7 +597,13 @@ class InvicationPageState extends State<InvicationPage> @@ -593,7 +597,13 @@ class InvicationPageState extends State<InvicationPage>
593 _baseIndoProvider.userHistorys[index].rname, sexStr); 597 _baseIndoProvider.userHistorys[index].rname, sexStr);
594 } 598 }
595 599
596 - nameStr = _baseIndoProvider.userHistorys[index].rname; 600 + if ((nameStr != '' && nameStr != null) &&
  601 + (_baseIndoProvider.userHistorys[index].rname == '' ||
  602 + _baseIndoProvider.userHistorys[index].rname == null)) {
  603 + } else {
  604 + nameStr = _baseIndoProvider.userHistorys[index].rname;
  605 + }
  606 +
597 _phoneNode.unfocus(); 607 _phoneNode.unfocus();
598 _baseIndoProvider.userHistorys.clear(); 608 _baseIndoProvider.userHistorys.clear();
599 }); 609 });
@@ -2159,17 +2169,23 @@ class InvicationPageState extends State<InvicationPage> @@ -2159,17 +2169,23 @@ class InvicationPageState extends State<InvicationPage>
2159 onTap: () async { 2169 onTap: () async {
2160 _getCallLog(); 2170 _getCallLog();
2161 }, 2171 },
2162 - child: Container(  
2163 - // color: Colors.red,  
2164 - // width: ScreenUtil().setWidth(64) * 2,  
2165 - height: ScreenUtil().setWidth(48),  
2166 - alignment: Alignment.centerLeft,  
2167 - child: Text('通话记录',  
2168 - style: TextStyle(  
2169 - color: MyColours.color_515151,  
2170 - fontSize: ScreenUtil().setSp(28),  
2171 - )),  
2172 - ), 2172 + child: Row(children: [
  2173 + Container(
  2174 + // color: Colors.red,
  2175 + // width: ScreenUtil().setWidth(64) * 2,
  2176 + height: ScreenUtil().setWidth(48),
  2177 + alignment: Alignment.centerLeft,
  2178 + child: Text('通话记录',
  2179 + style: TextStyle(
  2180 + color: MyColours.color_515151,
  2181 + fontSize: ScreenUtil().setSp(28),
  2182 + )),
  2183 + ),
  2184 + HEmptyView(4),
  2185 + Image.asset(Utils.getImgPath('quan_down_f'),
  2186 + width: ScreenUtil().setWidth(28),
  2187 + height: ScreenUtil().setWidth(28)),
  2188 + ]),
2173 ), 2189 ),
2174 ], 2190 ],
2175 ) 2191 )
@@ -2285,6 +2301,7 @@ class InvicationPageState extends State<InvicationPage> @@ -2285,6 +2301,7 @@ class InvicationPageState extends State<InvicationPage>
2285 fontSize: ScreenUtil().setSp(28), 2301 fontSize: ScreenUtil().setSp(28),
2286 ), 2302 ),
2287 ), 2303 ),
  2304 + HEmptyView(4),
2288 Image.asset(Utils.getImgPath('quan_down_f'), 2305 Image.asset(Utils.getImgPath('quan_down_f'),
2289 width: ScreenUtil().setWidth(28), 2306 width: ScreenUtil().setWidth(28),
2290 height: ScreenUtil().setWidth(28)), 2307 height: ScreenUtil().setWidth(28)),
@@ -2325,6 +2342,7 @@ class InvicationPageState extends State<InvicationPage> @@ -2325,6 +2342,7 @@ class InvicationPageState extends State<InvicationPage>
2325 fontSize: ScreenUtil().setSp(28), 2342 fontSize: ScreenUtil().setSp(28),
2326 ), 2343 ),
2327 ), 2344 ),
  2345 + HEmptyView(4),
2328 Image.asset(Utils.getImgPath('quan_down_f'), 2346 Image.asset(Utils.getImgPath('quan_down_f'),
2329 width: ScreenUtil().setWidth(28), 2347 width: ScreenUtil().setWidth(28),
2330 height: ScreenUtil().setWidth(28)), 2348 height: ScreenUtil().setWidth(28)),
@@ -3913,22 +3931,98 @@ class InvicationPageState extends State<InvicationPage> @@ -3913,22 +3931,98 @@ class InvicationPageState extends State<InvicationPage>
3913 3931
3914 _getCallLog() async { 3932 _getCallLog() async {
3915 Iterable<CallLogEntry> result = await CallLog.query(); 3933 Iterable<CallLogEntry> result = await CallLog.query();
3916 - _baseIndoProvider.userHistorys = []; 3934 + List<Picker.PickerItem<dynamic>> data = [];
3917 3935
3918 List<CallLogEntry> object = Utils.removeDuplicates(result.toList()); 3936 List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
3919 3937
3920 print(object); 3938 print(object);
  3939 +
  3940 + _baseIndoProvider.userHistorys = [];
  3941 + showPhoneHistory = false;
  3942 + // setState(() {});
  3943 +
3921 object.forEach((element) { 3944 object.forEach((element) {
3922 - UserHistoryEntity userHistoryEntity =  
3923 - UserHistoryEntity(null, null, '', '', '', '', '', null);  
3924 - userHistoryEntity.rname = element.name ?? '';  
3925 - userHistoryEntity.phone = element.number ?? '';  
3926 - _baseIndoProvider.userHistorys.add(userHistoryEntity); 3945 + _baseIndoProvider.userHistorys.add(UserHistoryEntity(
  3946 + '', '', element.name ?? '', '1', element.number, '', '', ''));
  3947 +
  3948 + String title = '';
  3949 + title += ' ${element.number ?? ''}';
  3950 + if (element.name != null && element.name != '') {
  3951 + title += ' ${element.name}';
  3952 + }
  3953 +
  3954 + String stateStr = ''; //状态
  3955 +
  3956 + if (element.callType.name == 'incoming' ||
  3957 + element.callType.name == 'wifiIncoming' ||
  3958 + element.callType.name == 'answeredExternally') {
  3959 + stateStr = ' 呼入';
  3960 + } else if (element.callType.name == 'outgoing' ||
  3961 + element.callType.name == 'wifiOutgoing' ||
  3962 + element.callType.name == 'voiceMail') {
  3963 + stateStr = ' 呼出';
  3964 + } else if (element.callType.name == 'missed') {
  3965 + stateStr = ' 未接';
  3966 + } else if (element.callType.name == 'rejected') {
  3967 + stateStr = ' 拒接';
  3968 + } else if (element.callType.name == 'blocked') {
  3969 + stateStr = ' 拦截';
  3970 + }
  3971 +
  3972 + String sunString =
  3973 + Utils.formatCallLogFromMill(element.timestamp.toString());
  3974 +
  3975 + data.add(Picker.PickerItem(
  3976 + text: Row(
  3977 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  3978 + children: [
  3979 + Expanded(
  3980 + child: Row(
  3981 + children: [
  3982 + HEmptyView(30),
  3983 + Text(title ?? '',
  3984 + style: TextStyle(
  3985 + fontSize: font(16), color: MyColours.color_515151)),
  3986 + Expanded(
  3987 + child: Text(stateStr ?? '',
  3988 + style: TextStyle(
  3989 + fontSize: font(16),
  3990 + color: MyColours.color_26000000))),
  3991 + ],
  3992 + )),
  3993 + Container(
  3994 + margin: EdgeInsets.only(right: w(15)),
  3995 + child: Text(sunString ?? '',
  3996 + style: TextStyle(
  3997 + fontSize: font(16), color: MyColours.color_515151)))
  3998 + ],
  3999 + )));
3927 }); 4000 });
3928 - if (object.length > 0) {  
3929 - //有记录  
3930 - showPhoneHistory = true;  
3931 - setState(() {}); 4001 + if (data.length > 0) {
  4002 + //有记录,底部弹窗展示
  4003 + // showPhoneHistory = true;
  4004 + // setState(() {});
  4005 + DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
  4006 + if (value != null) {
  4007 + UserHistoryEntity userHistoryEntity =
  4008 + _baseIndoProvider.userHistorys[value[0]];
  4009 +
  4010 + sexStr = userHistoryEntity.sexStr;
  4011 +
  4012 + sexSelectIndex = sexList.indexOf(sexStr);
  4013 +
  4014 + _getIsMemberByPhone(userHistoryEntity.phone);
  4015 + needHistory = true;
  4016 + _showConfirmWidget(needHistory: true, index: value[0]);
  4017 + }
  4018 + }, title: '从通话记录选择客人电话', selecteds: [
  4019 + // _getFirSelected(hourAndMinute, data),
  4020 + // _getSecSelected(hourAndMinute)
  4021 + ]).then((value) {
  4022 + print(value);
  4023 + });
  4024 + } else {
  4025 + Utils.showToast('暂无通话记录!');
3932 } 4026 }
3933 } 4027 }
3934 4028
@@ -4000,7 +4094,9 @@ class InvicationPageState extends State<InvicationPage> @@ -4000,7 +4094,9 @@ class InvicationPageState extends State<InvicationPage>
4000 _baseIndoProvider.nameController.text.endsWith(suffix)) { 4094 _baseIndoProvider.nameController.text.endsWith(suffix)) {
4001 return; 4095 return;
4002 } 4096 }
4003 - _baseIndoProvider.nameController.text = name + suffix; 4097 + if (name != '' && name != null) {
  4098 + _baseIndoProvider.nameController.text = name + suffix??'';
  4099 + }
4004 } 4100 }
4005 4101
4006 //姓名后缀 4102 //姓名后缀
@@ -1491,39 +1491,41 @@ class _MyCustomerListPageState extends State<MyCustomerListPage> @@ -1491,39 +1491,41 @@ class _MyCustomerListPageState extends State<MyCustomerListPage>
1491 child: Column( 1491 child: Column(
1492 children: [ 1492 children: [
1493 Expanded( 1493 Expanded(
1494 - child: Scrollbar(  
1495 - isAlwaysShown: true, //设置滚动条常亮  
1496 - controller: _scrollCrl, //必须设置一个controller  
1497 -  
1498 - // ///添加进度条  
1499 - child: SingleChildScrollView(  
1500 - controller: _scrollCrl,  
1501 - // primary: true,  
1502 - // reverse: true,  
1503 - // physics: BouncingScrollPhysics(),  
1504 - // padding: EdgeInsets.only(  
1505 - // bottom:  
1506 - // MediaQuery.of(context).viewInsets.bottom),  
1507 - child: Column(  
1508 - crossAxisAlignment: CrossAxisAlignment.start,  
1509 - children: [  
1510 - VEmptyView(20),  
1511 - // _managerWidget(),  
1512 - // VEmptyView(30),  
1513 - _activityWidget(state),  
1514 - VEmptyView(40),  
1515 - _labelWidget(state),  
1516 - VEmptyView(40),  
1517 -  
1518 - // 消费  
1519 -  
1520 - // _consume(state),  
1521 - // VEmptyView(40),  
1522 - _advancedFilterWidget(state)  
1523 - ],  
1524 - ),  
1525 - )),  
1526 - ), 1494 + child:
  1495 + // Scrollbar(
  1496 + // isAlwaysShown: true, //设置滚动条常亮
  1497 + // controller: _scrollCrl, //必须设置一个controller
  1498 +
  1499 + // // ///添加进度条
  1500 + // child:
  1501 + SingleChildScrollView(
  1502 + controller: _scrollCrl,
  1503 + // primary: true,
  1504 + // reverse: true,
  1505 + // physics: BouncingScrollPhysics(),
  1506 + // padding: EdgeInsets.only(
  1507 + // bottom:
  1508 + // MediaQuery.of(context).viewInsets.bottom),
  1509 + child: Column(
  1510 + crossAxisAlignment: CrossAxisAlignment.start,
  1511 + children: [
  1512 + VEmptyView(20),
  1513 + // _managerWidget(),
  1514 + // VEmptyView(30),
  1515 + _activityWidget(state),
  1516 + VEmptyView(40),
  1517 + _labelWidget(state),
  1518 + VEmptyView(40),
  1519 +
  1520 + // 消费
  1521 +
  1522 + // _consume(state),
  1523 + // VEmptyView(40),
  1524 + _advancedFilterWidget(state)
  1525 + ],
  1526 + ),
  1527 + )),
  1528 + // ),
1527 Row( 1529 Row(
1528 children: [ 1530 children: [
1529 Container( 1531 Container(
@@ -1644,36 +1644,38 @@ class _CustomerListPageState extends State<CustomerListPage> @@ -1644,36 +1644,38 @@ class _CustomerListPageState extends State<CustomerListPage>
1644 child: Column( 1644 child: Column(
1645 children: [ 1645 children: [
1646 Expanded( 1646 Expanded(
1647 - child: Scrollbar(  
1648 - isAlwaysShown: true, //设置滚动条常亮  
1649 - controller: _scrollCrl, //必须设置一个controller  
1650 -  
1651 - // ///添加进度条  
1652 - child: SingleChildScrollView(  
1653 - controller: _scrollCrl,  
1654 - // primary: true,  
1655 - // reverse: true,  
1656 - // physics: BouncingScrollPhysics(),  
1657 - // padding: EdgeInsets.only(  
1658 - // bottom:  
1659 - // MediaQuery.of(context).viewInsets.bottom),  
1660 - child: Column(  
1661 - crossAxisAlignment: CrossAxisAlignment.start,  
1662 - children: [  
1663 - VEmptyView(20),  
1664 - _managerWidget(state),  
1665 - VEmptyView(40),  
1666 - _activityWidget(state),  
1667 - VEmptyView(40),  
1668 - _labelWidget(state),  
1669 - VEmptyView(40),  
1670 - // _consume(state),  
1671 - // VEmptyView(40),  
1672 - _advancedFilterWidget(state)  
1673 - ],  
1674 - ),  
1675 - )),  
1676 - ), 1647 + child:
  1648 + // Scrollbar(
  1649 + // isAlwaysShown: true, //设置滚动条常亮
  1650 + // controller: _scrollCrl, //必须设置一个controller
  1651 +
  1652 + // // ///添加进度条
  1653 + // child:
  1654 + SingleChildScrollView(
  1655 + controller: _scrollCrl,
  1656 + // primary: true,
  1657 + // reverse: true,
  1658 + // physics: BouncingScrollPhysics(),
  1659 + // padding: EdgeInsets.only(
  1660 + // bottom:
  1661 + // MediaQuery.of(context).viewInsets.bottom),
  1662 + child: Column(
  1663 + crossAxisAlignment: CrossAxisAlignment.start,
  1664 + children: [
  1665 + VEmptyView(20),
  1666 + _managerWidget(state),
  1667 + VEmptyView(40),
  1668 + _activityWidget(state),
  1669 + VEmptyView(40),
  1670 + _labelWidget(state),
  1671 + VEmptyView(40),
  1672 + // _consume(state),
  1673 + // VEmptyView(40),
  1674 + _advancedFilterWidget(state)
  1675 + ],
  1676 + ),
  1677 + )),
  1678 + // ),
1677 Row( 1679 Row(
1678 children: [ 1680 children: [
1679 Container( 1681 Container(
@@ -63,6 +63,7 @@ import '../../utils/screen_util.dart'; @@ -63,6 +63,7 @@ import '../../utils/screen_util.dart';
63 import '../../widgets/loading.dart'; 63 import '../../widgets/loading.dart';
64 import '../../widgets/special_text/my_extended_text_selection_controls.dart'; 64 import '../../widgets/special_text/my_extended_text_selection_controls.dart';
65 import '../detail/notebook_detail_change_page_f.dart'; 65 import '../detail/notebook_detail_change_page_f.dart';
  66 +import 'package:flutter_picker/flutter_picker.dart' as Picker;
66 67
67 const scrollDuration = Duration(microseconds: 500); 68 const scrollDuration = Duration(microseconds: 500);
68 69
@@ -659,27 +660,159 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -659,27 +660,159 @@ class TableManagerPageState extends State<TableManagerPage> {
659 } 660 }
660 } 661 }
661 662
  663 + // _getCallLog() async {
  664 + // Iterable<CallLogEntry> result = await CallLog.query();
  665 + // _baseIndoProvider.userHistorys = [];
  666 +
  667 + // List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
  668 +
  669 + // print(object);
  670 + // object.forEach((element) {
  671 + // UserHistoryEntity userHistoryEntity =
  672 + // UserHistoryEntity(null, null, '', '', '', '', '', null);
  673 + // userHistoryEntity.rname = element.name ?? '';
  674 + // userHistoryEntity.phone = element.number ?? '';
  675 + // _baseIndoProvider.userHistorys.add(userHistoryEntity);
  676 + // });
  677 + // if (object.length > 0) {
  678 + // //有记录
  679 + // showPhoneHistory = true;
  680 + // setState(() {});
  681 + // }
  682 + // }
  683 +
662 _getCallLog() async { 684 _getCallLog() async {
663 Iterable<CallLogEntry> result = await CallLog.query(); 685 Iterable<CallLogEntry> result = await CallLog.query();
664 - _baseIndoProvider.userHistorys = []; 686 + List<Picker.PickerItem<dynamic>> data = [];
665 687
666 List<CallLogEntry> object = Utils.removeDuplicates(result.toList()); 688 List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
667 689
668 print(object); 690 print(object);
  691 +
  692 + _baseIndoProvider.userHistorys = [];
  693 + showPhoneHistory = false;
  694 + // setState(() {});
  695 +
669 object.forEach((element) { 696 object.forEach((element) {
670 - UserHistoryEntity userHistoryEntity =  
671 - UserHistoryEntity(null, null, '', '', '', '', '', null);  
672 - userHistoryEntity.rname = element.name ?? '';  
673 - userHistoryEntity.phone = element.number ?? '';  
674 - _baseIndoProvider.userHistorys.add(userHistoryEntity); 697 + _baseIndoProvider.userHistorys.add(UserHistoryEntity(
  698 + '', '', element.name ?? '', '1', element.number, '', '', ''));
  699 +
  700 + String title = '';
  701 + title += ' ${element.number ?? ''}';
  702 + if (element.name != null && element.name != '') {
  703 + title += ' ${element.name}';
  704 + }
  705 +
  706 + String stateStr = ''; //状态
  707 +
  708 + if (element.callType.name == 'incoming' ||
  709 + element.callType.name == 'wifiIncoming' ||
  710 + element.callType.name == 'answeredExternally') {
  711 + stateStr = ' 呼入';
  712 + } else if (element.callType.name == 'outgoing' ||
  713 + element.callType.name == 'wifiOutgoing' ||
  714 + element.callType.name == 'voiceMail') {
  715 + stateStr = ' 呼出';
  716 + } else if (element.callType.name == 'missed') {
  717 + stateStr = ' 未接';
  718 + } else if (element.callType.name == 'rejected') {
  719 + stateStr = ' 拒接';
  720 + } else if (element.callType.name == 'blocked') {
  721 + stateStr = ' 拦截';
  722 + }
  723 +
  724 + String sunString =
  725 + Utils.formatCallLogFromMill(element.timestamp.toString());
  726 +
  727 + data.add(Picker.PickerItem(
  728 + text: Row(
  729 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  730 + children: [
  731 + Expanded(
  732 + child: Row(
  733 + children: [
  734 + HEmptyView(30),
  735 + Text(title ?? '',
  736 + style: TextStyle(
  737 + fontSize: font(16), color: MyColours.color_515151)),
  738 + Expanded(
  739 + child: Text(stateStr ?? '',
  740 + style: TextStyle(
  741 + fontSize: font(16),
  742 + color: MyColours.color_26000000))),
  743 + ],
  744 + )),
  745 + Container(
  746 + margin: EdgeInsets.only(right: w(15)),
  747 + child: Text(sunString ?? '',
  748 + style: TextStyle(
  749 + fontSize: font(16), color: MyColours.color_515151)))
  750 + ],
  751 + )));
675 }); 752 });
676 - if (object.length > 0) {  
677 - //有记录  
678 - showPhoneHistory = true;  
679 - setState(() {}); 753 + if (data.length > 0) {
  754 + //有记录,底部弹窗展示
  755 + // showPhoneHistory = true;
  756 + // setState(() {});
  757 + DialogUtil.showSelectCusmanWidgetDialog(context, data, (value) {
  758 + if (value != null) {
  759 + _byValueToReqeust(value[0]);
  760 + }
  761 + }, title: '从通话记录选择客人电话', selecteds: [
  762 + // _getFirSelected(hourAndMinute, data),
  763 + // _getSecSelected(hourAndMinute)
  764 + ]).then((value) {
  765 + print(value);
  766 + });
  767 + } else {
  768 + Utils.showToast('暂无通话记录!');
680 } 769 }
681 } 770 }
682 771
  772 + _byValueToReqeust(int index) {
  773 + setState(() {
  774 + sexStr = '先生';
  775 + showPhoneHistory = false;
  776 + _baseIndoProvider.phoneController.text =
  777 + _baseIndoProvider.userHistorys[index].phone != null
  778 + ? _baseIndoProvider.userHistorys[index].phone
  779 + : '';
  780 + // _homeEnterModel.nameController.text =
  781 + // _homeEnterModel
  782 + // .userHistorys[index].rname +
  783 + // _nameSuffix();
  784 + for (var item in _baseIndoProvider.sexList) {
  785 + item['select'] = false;
  786 + if (item['title'] == _baseIndoProvider.userHistorys[index].sexStr) {
  787 + item['select'] = true;
  788 + sexSelectIndex = int.parse(item['code']) - 1;
  789 + sexStr = _baseIndoProvider.userHistorys[index].sexStr;
  790 + }
  791 + }
  792 +
  793 + _addNameSuffix(_baseIndoProvider.userHistorys[index].rname, sexStr);
  794 + if (_baseIndoProvider.userHistorys[index].rname == null ||
  795 + _baseIndoProvider.userHistorys[index].rname == '') {
  796 + nameStr = _baseIndoProvider.nameController.text;
  797 +
  798 + if (nameStr.endsWith('女士')) {
  799 + nameStr = nameStr.replaceAll('女士', '');
  800 + }
  801 + if (nameStr.endsWith('先生')) {
  802 + nameStr = nameStr.replaceAll('先生', '');
  803 + }
  804 + if (nameStr.endsWith('公司')) {
  805 + nameStr = nameStr.replaceAll('公司', '');
  806 + }
  807 + } else {
  808 + nameStr = _baseIndoProvider.userHistorys[index].rname;
  809 + }
  810 +
  811 + _phoneNode.unfocus();
  812 + _baseIndoProvider.userHistorys.clear();
  813 + });
  814 + }
  815 +
683 _getContactData() async { 816 _getContactData() async {
684 Contact contact = await _contactPicker.selectContactWithNative(); 817 Contact contact = await _contactPicker.selectContactWithNative();
685 818
@@ -1360,75 +1493,76 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -1360,75 +1493,76 @@ class TableManagerPageState extends State<TableManagerPage> {
1360 itemBuilder: (context, index) { 1493 itemBuilder: (context, index) {
1361 return GestureDetector( 1494 return GestureDetector(
1362 onTap: () { 1495 onTap: () {
1363 - setState(() {  
1364 - sexStr = '先生';  
1365 - showPhoneHistory = false;  
1366 - _baseIndoProvider.phoneController  
1367 - .text = _baseIndoProvider  
1368 - .userHistorys[index]  
1369 - .phone !=  
1370 - null  
1371 - ? _baseIndoProvider  
1372 - .userHistorys[index].phone  
1373 - : '';  
1374 - // _homeEnterModel.nameController.text =  
1375 - // _homeEnterModel  
1376 - // .userHistorys[index].rname +  
1377 - // _nameSuffix();  
1378 - for (var item in _baseIndoProvider  
1379 - .sexList) {  
1380 - item['select'] = false;  
1381 - if (item['title'] ==  
1382 - _baseIndoProvider  
1383 - .userHistorys[index]  
1384 - .sexStr) {  
1385 - item['select'] = true;  
1386 - sexSelectIndex =  
1387 - int.parse(item['code']) -  
1388 - 1;  
1389 - sexStr = _baseIndoProvider  
1390 - .userHistorys[index]  
1391 - .sexStr;  
1392 - }  
1393 - }  
1394 -  
1395 - _addNameSuffix(  
1396 - _baseIndoProvider  
1397 - .userHistorys[index]  
1398 - .rname,  
1399 - sexStr);  
1400 - if (_baseIndoProvider  
1401 - .userHistorys[index]  
1402 - .rname ==  
1403 - null ||  
1404 - _baseIndoProvider  
1405 - .userHistorys[index]  
1406 - .rname ==  
1407 - '') {  
1408 - nameStr = _baseIndoProvider  
1409 - .nameController.text;  
1410 -  
1411 - if (nameStr.endsWith('女士')) {  
1412 - nameStr = nameStr.replaceAll(  
1413 - '女士', '');  
1414 - }  
1415 - if (nameStr.endsWith('先生')) {  
1416 - nameStr = nameStr.replaceAll(  
1417 - '先生', '');  
1418 - }  
1419 - if (nameStr.endsWith('公司')) {  
1420 - nameStr = nameStr.replaceAll(  
1421 - '公司', '');  
1422 - }  
1423 - } else {  
1424 - nameStr = _baseIndoProvider  
1425 - .userHistorys[index].rname;  
1426 - }  
1427 -  
1428 - _phoneNode.unfocus();  
1429 - _baseIndoProvider.userHistorys  
1430 - .clear();  
1431 - }); 1496 + _byValueToReqeust(index);
  1497 + // setState(() {
  1498 + // sexStr = '先生';
  1499 + // showPhoneHistory = false;
  1500 + // _baseIndoProvider.phoneController
  1501 + // .text = _baseIndoProvider
  1502 + // .userHistorys[index]
  1503 + // .phone !=
  1504 + // null
  1505 + // ? _baseIndoProvider
  1506 + // .userHistorys[index].phone
  1507 + // : '';
  1508 + // // _homeEnterModel.nameController.text =
  1509 + // // _homeEnterModel
  1510 + // // .userHistorys[index].rname +
  1511 + // // _nameSuffix();
  1512 + // for (var item in _baseIndoProvider
  1513 + // .sexList) {
  1514 + // item['select'] = false;
  1515 + // if (item['title'] ==
  1516 + // _baseIndoProvider
  1517 + // .userHistorys[index]
  1518 + // .sexStr) {
  1519 + // item['select'] = true;
  1520 + // sexSelectIndex =
  1521 + // int.parse(item['code']) -
  1522 + // 1;
  1523 + // sexStr = _baseIndoProvider
  1524 + // .userHistorys[index]
  1525 + // .sexStr;
  1526 + // }
  1527 + // }
  1528 +
  1529 + // _addNameSuffix(
  1530 + // _baseIndoProvider
  1531 + // .userHistorys[index]
  1532 + // .rname,
  1533 + // sexStr);
  1534 + // if (_baseIndoProvider
  1535 + // .userHistorys[index]
  1536 + // .rname ==
  1537 + // null ||
  1538 + // _baseIndoProvider
  1539 + // .userHistorys[index]
  1540 + // .rname ==
  1541 + // '') {
  1542 + // nameStr = _baseIndoProvider
  1543 + // .nameController.text;
  1544 +
  1545 + // if (nameStr.endsWith('女士')) {
  1546 + // nameStr = nameStr.replaceAll(
  1547 + // '女士', '');
  1548 + // }
  1549 + // if (nameStr.endsWith('先生')) {
  1550 + // nameStr = nameStr.replaceAll(
  1551 + // '先生', '');
  1552 + // }
  1553 + // if (nameStr.endsWith('公司')) {
  1554 + // nameStr = nameStr.replaceAll(
  1555 + // '公司', '');
  1556 + // }
  1557 + // } else {
  1558 + // nameStr = _baseIndoProvider
  1559 + // .userHistorys[index].rname;
  1560 + // }
  1561 +
  1562 + // _phoneNode.unfocus();
  1563 + // _baseIndoProvider.userHistorys
  1564 + // .clear();
  1565 + // });
1432 }, 1566 },
1433 child: Container( 1567 child: Container(
1434 width: double.infinity, 1568 width: double.infinity,
@@ -5621,7 +5621,8 @@ class DialogUtil { @@ -5621,7 +5621,8 @@ class DialogUtil {
5621 } 5621 }
5622 5622
5623 //显示消息弹框 5623 //显示消息弹框
5624 - static showMessageDialog(BuildContext context,CollectStoreProvider collectStoreProvider) async { 5624 + static showMessageDialog(
  5625 + BuildContext context, CollectStoreProvider collectStoreProvider) async {
5625 MessageDialogModel messageModel = 5626 MessageDialogModel messageModel =
5626 Provider.of<MessageDialogModel>(context, listen: false); 5627 Provider.of<MessageDialogModel>(context, listen: false);
5627 if (messageModel.messages.isEmpty) return null; 5628 if (messageModel.messages.isEmpty) return null;
@@ -5743,8 +5744,8 @@ class DialogUtil { @@ -5743,8 +5744,8 @@ class DialogUtil {
5743 ) 5744 )
5744 : ListView.builder( 5745 : ListView.builder(
5745 itemBuilder: (context, index) { 5746 itemBuilder: (context, index) {
5746 - return MessageDialogItemF(  
5747 - model.messages[index],collectStoreProvider); 5747 + return MessageDialogItemF(model.messages[index],
  5748 + collectStoreProvider);
5748 }, 5749 },
5749 itemCount: model.messages.length, 5750 itemCount: model.messages.length,
5750 shrinkWrap: true) 5751 shrinkWrap: true)
@@ -6723,6 +6724,101 @@ class DialogUtil { @@ -6723,6 +6724,101 @@ class DialogUtil {
6723 }); 6724 });
6724 } 6725 }
6725 6726
  6727 + //显示通话记录UI
  6728 + static Future<List<int>> showSelectCusmanWidgetDialog(BuildContext context,
  6729 + List<PickerItem<dynamic>> data, ValueChanged valueChanged,
  6730 + {List<int> selecteds,
  6731 + Color cancelTextColor = const Color.fromRGBO(0, 0, 0, 0.6),
  6732 + String title = '',
  6733 + VoidCallback onCancel,
  6734 + String cancelText = '取消'}) {
  6735 + return Picker(
  6736 + selecteds: selecteds,
  6737 + adapter: PickerDataAdapter<dynamic>(data: data),
  6738 + // adapter: PickerDataAdapter(data: [
  6739 + // PickerItem(
  6740 + // text: Icon(Icons.add),
  6741 + // value: Icons.add,
  6742 + // ),
  6743 + // PickerItem(text: Icon(Icons.title), value: Icons.title, children: [
  6744 + // PickerItem(text: Icon(Icons.more_vert)),
  6745 + // PickerItem(text: Icon(Icons.ac_unit)),
  6746 + // PickerItem(text: Icon(Icons.access_alarm)),
  6747 + // PickerItem(text: Icon(Icons.account_balance)),
  6748 + // ]),
  6749 + // PickerItem(text: Icon(Icons.face), value: Icons.face, children: [
  6750 + // PickerItem(text: Icon(Icons.add_circle_outline)),
  6751 + // PickerItem(text: Icon(Icons.add_a_photo)),
  6752 + // PickerItem(text: Icon(Icons.access_time)),
  6753 + // PickerItem(text: Icon(Icons.adjust)),
  6754 + // ]),
  6755 + // PickerItem(
  6756 + // text: Icon(Icons.linear_scale),
  6757 + // value: Icons.linear_scale,
  6758 + // children: [
  6759 + // PickerItem(text: Icon(Icons.assistant_photo)),
  6760 + // PickerItem(text: Icon(Icons.account_balance)),
  6761 + // PickerItem(text: Icon(Icons.airline_seat_legroom_extra)),
  6762 + // PickerItem(text: Icon(Icons.airport_shuttle)),
  6763 + // PickerItem(text: Icon(Icons.settings_bluetooth)),
  6764 + // ]),
  6765 + // PickerItem(text: Icon(Icons.close), value: Icons.close),
  6766 + // ]),
  6767 + height: ScreenUtil().setWidth(480),
  6768 + itemExtent: ScreenUtil().setWidth(80),
  6769 + hideHeader: false,
  6770 + diameterRatio: 1,
  6771 + // textScaleFactor: 20,
  6772 + // squeeze:1.4,
  6773 + // magnification:0.1,
  6774 + headerDecoration: BoxDecoration(
  6775 + color: MyColours.color_ffffff,
  6776 + border: Border(
  6777 + bottom: BorderSide(
  6778 + width: ScreenUtil().setWidth(2),
  6779 + color: MyColours.color_E7E7E7),
  6780 + )),
  6781 + title: Text(
  6782 + title,
  6783 + style: TextStyle(
  6784 + fontWeight: FontWeight.bold,
  6785 + color: MyColours.color_515151,
  6786 + fontSize: ScreenUtil().setSp(32)),
  6787 + ),
  6788 + cancelText: cancelText,
  6789 + cancelTextStyle:
  6790 + TextStyle(color: cancelTextColor, fontSize: ScreenUtil().setSp(32)),
  6791 + confirmText: "确定",
  6792 + confirmTextStyle: TextStyle(
  6793 + color: MyColours.color_438E93, fontSize: ScreenUtil().setSp(32)),
  6794 + selectedTextStyle: TextStyle(
  6795 + color: MyColours.color_515151, fontSize: ScreenUtil().setSp(32)),
  6796 + textStyle: TextStyle(
  6797 + color: Color.fromRGBO(0, 0, 0, 0.26),
  6798 + fontSize: ScreenUtil().setSp(32)),
  6799 + selectionOverlay: Container(
  6800 + height: ScreenUtil().setWidth(80),
  6801 + decoration: BoxDecoration(
  6802 + border: Border(
  6803 + bottom: BorderSide(
  6804 + width: ScreenUtil().setWidth(2),
  6805 + color: Colors.transparent),
  6806 + top: BorderSide(
  6807 + width: ScreenUtil().setWidth(2),
  6808 + color: Colors.transparent))),
  6809 + ),
  6810 + onCancel: onCancel,
  6811 + onConfirm: (Picker picker, List value) {
  6812 + print(value.toString());
  6813 + if (valueChanged != null) {
  6814 + valueChanged(value);
  6815 + }
  6816 + }).showModal<List<int>>(context).then((value) {
  6817 + LogUtil.v("value:${value.toString()}");
  6818 + return value;
  6819 + });
  6820 + }
  6821 +
6726 //显示选择客户经理弹框 6822 //显示选择客户经理弹框
6727 static Future<List<int>> showSelectCusmanDialog( 6823 static Future<List<int>> showSelectCusmanDialog(
6728 BuildContext context, List<dynamic> data, ValueChanged valueChanged, 6824 BuildContext context, List<dynamic> data, ValueChanged valueChanged,
@@ -6733,7 +6829,7 @@ class DialogUtil { @@ -6733,7 +6829,7 @@ class DialogUtil {
6733 String cancelText = '取消'}) { 6829 String cancelText = '取消'}) {
6734 return Picker( 6830 return Picker(
6735 selecteds: selecteds, 6831 selecteds: selecteds,
6736 - adapter: PickerDataAdapter<String>(pickerdata: data), 6832 + adapter: PickerDataAdapter<String>(pickerData: data),
6737 height: ScreenUtil().setWidth(480), 6833 height: ScreenUtil().setWidth(480),
6738 hideHeader: false, 6834 hideHeader: false,
6739 headerDecoration: BoxDecoration( 6835 headerDecoration: BoxDecoration(
@@ -6876,7 +6972,7 @@ class DialogUtil { @@ -6876,7 +6972,7 @@ class DialogUtil {
6876 // changeToFirst: true, 6972 // changeToFirst: true,
6877 looping: true, 6973 looping: true,
6878 selecteds: selecteds, 6974 selecteds: selecteds,
6879 - adapter: PickerDataAdapter<String>(pickerdata: data), 6975 + adapter: PickerDataAdapter<String>(pickerData: data),
6880 height: ScreenUtil().setWidth(480), 6976 height: ScreenUtil().setWidth(480),
6881 hideHeader: false, 6977 hideHeader: false,
6882 builderHeader: (BuildContext context) { 6978 builderHeader: (BuildContext context) {
@@ -198,6 +198,30 @@ class Utils { @@ -198,6 +198,30 @@ class Utils {
198 // 198 //
199 199
200 //时间转换 200 //时间转换
  201 + static String formatCallLogFromMill(String datestr) {
  202 + String date = '';
  203 + DateTime _strtimes = DateTime.fromMillisecondsSinceEpoch(int.parse(
  204 + datestr)); //首先先将字符串格式的时间转为DateTime类型,因为millisecondsSinceEpoch方法转换要求为该格式
  205 +
  206 + DateTime dateNow = DateTime.now();
  207 +
  208 + if (Utils.isOneDay(_strtimes, dateNow)) {
  209 + //今天
  210 + date = DateUtil.formatDate(_strtimes, format: DateFormats.h_m);
  211 + } else if (Utils.isOneDay(_strtimes, dateNow.add(Duration(days: -1)))) {
  212 + date = "昨天";
  213 + } else if (Utils.isOneDay(_strtimes, dateNow.add(Duration(days: 2)))) {
  214 + date = "后天 ";
  215 + } else {
  216 + date = Utils.addZeroNumber(_strtimes.month) +
  217 + "月" +
  218 + Utils.addZeroNumber(_strtimes.day) +
  219 + "日";
  220 + }
  221 + return date;
  222 + }
  223 +
  224 + //时间转换
201 static String formatFromMill(String datestr) { 225 static String formatFromMill(String datestr) {
202 String date = ''; 226 String date = '';
203 DateTime _strtimes = DateTime.fromMillisecondsSinceEpoch( 227 DateTime _strtimes = DateTime.fromMillisecondsSinceEpoch(
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 2 import 'package:flutter_screenutil/flutter_screenutil.dart';
3 import 'package:one_key/res/colors.dart'; 3 import 'package:one_key/res/colors.dart';
  4 +import 'package:one_key/utils/utils.dart';
  5 +
  6 +import '../utils/screen_util.dart';
4 7
5 class RowMultiText extends StatelessWidget { 8 class RowMultiText extends StatelessWidget {
6 final String title; 9 final String title;
@@ -8,10 +11,14 @@ class RowMultiText extends StatelessWidget { @@ -8,10 +11,14 @@ class RowMultiText extends StatelessWidget {
8 final TextAlign textAlign; 11 final TextAlign textAlign;
9 final Color textColor; 12 final Color textColor;
10 final Color bgColor; 13 final Color bgColor;
  14 + final Color textColorR;
  15 + final String imageName;
11 RowMultiText(this.title, this.content, 16 RowMultiText(this.title, this.content,
12 {this.textAlign = TextAlign.right, 17 {this.textAlign = TextAlign.right,
13 this.textColor = MyColours.color_828282, 18 this.textColor = MyColours.color_828282,
14 - this.bgColor = MyColours.color_ffffff}); 19 + this.textColorR = MyColours.color_353535,
  20 + this.bgColor = MyColours.color_ffffff,
  21 + this.imageName});
15 22
16 @override 23 @override
17 Widget build(BuildContext context) { 24 Widget build(BuildContext context) {
@@ -22,6 +29,7 @@ class RowMultiText extends StatelessWidget { @@ -22,6 +29,7 @@ class RowMultiText extends StatelessWidget {
22 alignment: Alignment.center, 29 alignment: Alignment.center,
23 child: Row( 30 child: Row(
24 crossAxisAlignment: CrossAxisAlignment.center, 31 crossAxisAlignment: CrossAxisAlignment.center,
  32 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
25 children: <Widget>[ 33 children: <Widget>[
26 Align( 34 Align(
27 alignment: Alignment.centerLeft, 35 alignment: Alignment.centerLeft,
@@ -33,15 +41,26 @@ class RowMultiText extends StatelessWidget { @@ -33,15 +41,26 @@ class RowMultiText extends StatelessWidget {
33 ), 41 ),
34 Expanded( 42 Expanded(
35 child: Container( 43 child: Container(
36 - alignment: Alignment.centerRight,  
37 - margin: EdgeInsets.only(left: ScreenUtil().setWidth(20)),  
38 - child: Text(content,  
39 - style: TextStyle(  
40 - color: MyColours.color_353535,  
41 - fontSize: ScreenUtil().setSp(30)),  
42 - softWrap: true,  
43 - textAlign: this.textAlign),  
44 - ), 44 + alignment: Alignment.centerRight,
  45 + margin: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
  46 + child: Row(
  47 + mainAxisAlignment: MainAxisAlignment.end,
  48 + children: [
  49 + if (imageName != null)
  50 + Container(
  51 + margin: EdgeInsets.only(right: w(2)),
  52 + child: Image.asset(
  53 + Utils.getImgPath(imageName),
  54 + width: w(20),
  55 + )),
  56 + Text(content,
  57 + style: TextStyle(
  58 + color: textColorR,
  59 + fontSize: ScreenUtil().setSp(30)),
  60 + softWrap: true,
  61 + textAlign: this.textAlign),
  62 + ],
  63 + )),
45 ) 64 )
46 ], 65 ],
47 ), 66 ),
@@ -598,7 +598,7 @@ packages: @@ -598,7 +598,7 @@ packages:
598 name: flutter_picker 598 name: flutter_picker
599 url: "https://pub.flutter-io.cn" 599 url: "https://pub.flutter-io.cn"
600 source: hosted 600 source: hosted
601 - version: "2.0.3" 601 + version: "2.1.0"
602 flutter_plugin_android_lifecycle: 602 flutter_plugin_android_lifecycle:
603 dependency: transitive 603 dependency: transitive
604 description: 604 description:
@@ -93,7 +93,7 @@ dependencies: @@ -93,7 +93,7 @@ dependencies:
93 # url_launcher: ^5.4.2 93 # url_launcher: ^5.4.2
94 url_launcher: ^6.0.9 94 url_launcher: ^6.0.9
95 # 滚轮选择器 95 # 滚轮选择器
96 - flutter_picker: ^2.0.3 96 + flutter_picker: ^2.1.0
97 # 网络状态 97 # 网络状态
98 # connectivity: ^0.4.8 98 # connectivity: ^0.4.8
99 connectivity: ^3.0.6 99 connectivity: ^3.0.6