Commit aa3cbc24eafd6fe52c10c3883ec81ab8f28aaccb

Authored by wdn127929
2 parents 260c5709 b6a5186e

Merge branch 'v5.1.6+' into v5.1.6.2+

... ... @@ -16,6 +16,9 @@ class App {
// static GetIt getIt = GetIt.instance;
static bool isInstallWx = false;
static final GlobalKey<NavigatorState> navigatorKey =
new GlobalKey<NavigatorState>();
static initSp() async {
sp = await SharedPreferences.getInstance();
}
... ...
... ... @@ -142,6 +142,7 @@ Future<void> main() async {
});
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
... ... @@ -250,6 +251,7 @@ class MyAppState extends State<MyApp> {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '周到安排商家',
navigatorKey: App.navigatorKey,
// navigatorKey: App.getIt<NavigateService>().key,
//国际化
localizationsDelegates: const [
... ...
... ... @@ -25,6 +25,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import '../../models/user_history_entity.dart';
import '../../utils/call_log_utils.dart';
import '../../utils/screen_util.dart';
import '../../widgets/MyDivider.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
... ... @@ -214,13 +215,13 @@ class _EditReserverPageState extends State<EditReserverPage> {
}
_getCallLog() async {
try {
Iterable<CallLogEntry> result = await CallLog.query();
List<Picker.PickerItem<dynamic>> data = [];
List<Picker.PickerItem<dynamic>> data = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
Iterable<CallLogEntry> result = await CallLogUtils.getCallLog(context);
if (result != null) {
detailModel.userHistorys = [];
print(object);
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
detailModel.userHistorys = [];
showPhoneHistory = false;
... ... @@ -300,7 +301,7 @@ class _EditReserverPageState extends State<EditReserverPage> {
} else {
Utils.showToast('暂无通话记录!');
}
} catch (e) {}
}
}
_byValueToReqeust(int index) {
... ...
... ... @@ -38,6 +38,7 @@ import 'package:one_key/models/table_list.dart' as t;
import 'dart:convert' as convert;
import 'package:easy_contact_picker/easy_contact_picker.dart';
import '../../models/user_history_entity.dart';
import '../../utils/call_log_utils.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;
... ... @@ -1075,9 +1076,11 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
// }
// }
_getCallLog() async {
try {
Iterable<CallLogEntry> result = await CallLog.query();
List<Picker.PickerItem<dynamic>> data = [];
List<Picker.PickerItem<dynamic>> data = [];
Iterable<CallLogEntry> result = await CallLogUtils.getCallLog(context);
if (result != null) {
_notebookDetailChangeModel.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
... ... @@ -1161,9 +1164,6 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
} else {
Utils.showToast('暂无通话记录!');
}
} catch (e) {
print(e);
}
}
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:common_utils/common_utils.dart';
import 'package:device_info/device_info.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
... ... @@ -267,7 +268,7 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
if (widget.initialIndex == 0 ||
widget.initialIndex == 1 && needRefreshTemp == false) return;
_initNotification();
Future.delayed(Duration(milliseconds: 30000), () {
Future.delayed(Duration(minutes: 5), () {
//30000
ContactModel.getInstance().uploadLocalContact(context);
UserModel usermodel = Provider.of<UserModel>(context, listen: false);
... ... @@ -943,7 +944,22 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
}
//初始化信鸽推送
initPlatformState() {
initPlatformState() async {
//安卓弹窗提示使用通知权限目的,仅提示一次
//全局提示权限使用目的
// if (Platform.isAndroid) {
// DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
// AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
// if (androidInfo.manufacturer == 'HUAWEI') {
// if (!(App.sp.getBool("h_notification") ?? false)) {
// DialogUtil.showAuthorityDestination(context, 'h_notification',
// '通知权限使用说明', '在客户预订以及店内营销需要的时候,给您发送通知消息。');
// }
// }
// }
// App.sp.setBool("h_notification", true);
/// 开启DEBUG
XgFlutterPlugin().setEnableDebug(false);
... ...
... ... @@ -57,6 +57,7 @@ import '../../provider/SmsModel.dart';
import '../../provider/customer_provider.dart';
import '../../provider/marketing_center_provider.dart';
import '../../provider/my_model.dart';
import '../../utils/call_log_utils.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;
... ... @@ -3930,9 +3931,11 @@ class InvicationPageState extends State<InvicationPage>
}
_getCallLog() async {
try {
Iterable<CallLogEntry> result = await CallLog.query();
List<Picker.PickerItem<dynamic>> data = [];
List<Picker.PickerItem<dynamic>> data = [];
Iterable<CallLogEntry> result = await CallLogUtils.getCallLog(context);
if (result != null) {
_baseIndoProvider.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
... ... @@ -4025,7 +4028,7 @@ class InvicationPageState extends State<InvicationPage>
} else {
Utils.showToast('暂无通话记录!');
}
} catch (e) {}
}
}
_openAddressBook() async {
... ...
... ... @@ -59,6 +59,7 @@ import '../../provider/SmsModel.dart';
import '../../provider/marketing_center_provider.dart';
import '../../provider/remark_manager_model.dart';
import '../../provider/store_base_info_provider.dart';
import '../../utils/call_log_utils.dart';
import '../../utils/screen_util.dart';
import '../../widgets/loading.dart';
import '../../widgets/special_text/my_extended_text_selection_controls.dart';
... ... @@ -682,10 +683,15 @@ class TableManagerPageState extends State<TableManagerPage> {
// }
_getCallLog() async {
try {
Iterable<CallLogEntry> result = await CallLog.query();
List<Picker.PickerItem<dynamic>> data = [];
Iterable<CallLogEntry> result = await CallLogUtils.getCallLog(context);
if (result != null) {
_baseIndoProvider.userHistorys = [];
List<CallLogEntry> object = Utils.removeDuplicates(result.toList());
print(object);
... ... @@ -768,7 +774,7 @@ class TableManagerPageState extends State<TableManagerPage> {
} else {
Utils.showToast('暂无通话记录!');
}
} catch (e) {}
}
}
_byValueToReqeust(int index) {
... ... @@ -813,6 +819,7 @@ class TableManagerPageState extends State<TableManagerPage> {
_phoneNode.unfocus();
_baseIndoProvider.userHistorys.clear();
});
}
_getContactData() async {
... ...
import 'dart:io';
import 'package:call_log/call_log.dart';
import 'package:flutter/material.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:permission_handler/permission_handler.dart';
import 'misc.dart';
class CallLogUtils {
static Future<Iterable<CallLogEntry>> getCallLog(context) async {
try {
if (!(await checkPermission(Permission.phone))) {
String title = '通话记录和电话';
PermissionStatus status = await permissionStatus(Permission.phone);
if (status == PermissionStatus.permanentlyDenied) {
//用户选择不在弹出权限提示框
print('never');
// Navigator.pop(context);
DialogUtil.openAlertDialog(context, '未获得${title}权限',
"请在手机的权限管理里,将${title}权限开启", '去设置', 340.0, onTap: () {
openSetting();
Navigator.pop(context, '');
});
} else {
// 申请权限
bool canPhone = await checkPermission(Permission.phone);
if (canPhone) {
try {
//全局提示权限使用目的
if (Platform.isAndroid) {
DialogUtil.showAuthorityDestination(context, 'h_call',
'通话记录和电话权限使用说明', '直接从通话记录中获得客户电话号码,快速录入预订信息。');
}
Iterable<CallLogEntry> result = await CallLog.query();
return result;
} catch (e) {
print(e);
}
} else {
// Navigator.pop(context);
//拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
DialogUtil.openAlertDialog(context, '未获得${title}权限',
"请在手机的权限管理里,将${title}权限开启。", '去设置', 340.0, onTap: () {
openSetting();
Navigator.pop(context, '');
});
}
}
} else {
try {
//全局提示权限使用目的
if (Platform.isAndroid) {
DialogUtil.showAuthorityDestination(context, 'h_call',
'通话记录和电话权限使用说明', '直接从通话记录中获得客户电话号码,快速录入预订信息。');
}
Iterable<CallLogEntry> result = await CallLog.query();
return result;
} catch (e) {
print(e);
}
}
} catch (e) {
print(e);
return null;
}
}
}
... ...
... ... @@ -59,6 +59,64 @@ typedef ClickCallback = void Function(String value);
// };
class DialogUtil {
static showAuthorityDestination(
BuildContext context, String name, String title, String subTitle) {
Future.delayed(const Duration(seconds: 5), () {
Navigator.of(context).pop(true);
});
return showDialog(
context: context,
barrierDismissible: true,
anchorPoint:Offset(0,0),
builder: (BuildContext context) {
return StatefulBuilder(builder: (context, state) {
// locationState = state;
return Material(
color: Colors.transparent,
child: Column(mainAxisSize: MainAxisSize.min, children: [
VEmptyView(40),
Container(
// width: double.infinity,
margin: EdgeInsets.symmetric(horizontal: w(10)),
padding: EdgeInsets.symmetric(
horizontal: w(20), vertical: w(12)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(
r(5),
)),
child: Row(children: <Widget>[
Image.asset(
Utils.getImgPath(
'$name',
),
width: w(30)),
HEmptyView(68),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('$title',
style: TextStyle(
fontSize: font(16),
fontWeight: FontWeight.bold,
color: MyColours.color_E6000000)),
VEmptyView(20),
Text('$subTitle',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_26000000))
])),
]))
]));
});
});
;
}
//模块快过期提醒
static showSellerVersionEdateDialog(BuildContext context,
List<SellerVersionSunModel> showData, CustomCallBack callback,
... ...
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:permission_handler/permission_handler.dart';
import '../app.dart';
Future<bool> checkPermissionStorage() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
... ... @@ -33,6 +39,22 @@ Future<bool> checkPermission(Permission permissionGroup) async {
}
Future<bool> requestPermission(Permission permissionGroup) async {
//全局提示权限使用目的
if (Platform.isAndroid) {
//全局提示权限使用目的
BuildContext context = App.navigatorKey.currentState.overlay.context;
if (permissionGroup == Permission.storage) {
DialogUtil.showAuthorityDestination(
context, 'h_storage', '存储权限使用说明', '用于读取相册照片上传店铺门头照,包间照片等。');
} else if (permissionGroup == Permission.camera) {
DialogUtil.showAuthorityDestination(
context, 'h_camera', '相机权限使用说明', '用于上传店铺门头照,包间照片等。');
} else if (permissionGroup == Permission.location) {
DialogUtil.showAuthorityDestination(
context, 'h_location', '位置权限使用说明', '用于创建店铺时,获取店铺在地图上的位置,方便客户导航到咱们店铺');
}
}
final permissions = await [permissionGroup].request();
if (await permissionGroup.request().isGranted) {
print(true);
... ... @@ -57,6 +79,12 @@ Future<PermissionStatus> contactPermissionStatus() async {
}
Future<bool> requestContactPermission() async {
if (Platform.isAndroid) {
//全局提示权限使用目的
BuildContext context = App.navigatorKey.currentState.overlay.context;
DialogUtil.showAuthorityDestination(
context, 'h_contant', '通讯录权限使用说明', '直接从通讯录获得客户电话号码,快速录入预订信息。');
}
final permissions = await [Permission.contacts].request();
if (permissions[Permission.contacts] == PermissionStatus.granted) {
return true;
... ...