You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

303 lines
9.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'dart:async';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:flutter_background_service/flutter_background_service.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:project_telephony/ui/home/content_connect_page.dart';
import 'package:project_telephony/ui/home/content_refuse_page.dart';
import 'package:project_telephony/ui/home/set/phone_set_page.dart';
import 'package:project_telephony/ui/user/privacy_rights_page.dart';
import 'package:project_telephony/ui/widget/appdialog.dart';
import 'package:project_telephony/ui/widget/plone_bottom.dart';
import 'package:project_telephony/utils/headers.dart';
import '../tab_navigator.dart';
import '../user/privacy_rights_page.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
bool sms = false;
bool plone = false;
bool kg = false;
final service = FlutterBackgroundService();
@override
class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
//页面初始化的时候,添加一个状态的监听者
WidgetsBinding.instance.addObserver(this);
_listenForPermissionStatus();
setState(() {});
}
@override
void dispose() {
super.dispose();
//页面销毁时移出监听者
WidgetsBinding.instance.removeObserver(this);
}
Future<void> _listenForPermissionStatus() async {
sms = await Permission.sms.request().isGranted;
plone = await Permission.phone.request().isGranted;
callLog = await Permission.callLog.request().isGranted;
kg = await service.isRunning();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
extendBodyBehindAppBar: true,
extendBody: true,
body: SafeArea(
child: Stack(
// fit: StackFit.expand,
children: [
Positioned(
top: 10.w,
child:
// Container(
// height: 722.w,
// width: 722.w,
// decoration: BoxDecoration(image: DecorationImage(image:AssetImage(Assets.images.homeBg.path),fit:BoxFit.fill)),
// child: _warning(),)
Image.asset(
Assets.images.homeBg.path,
height: 722.w,
width: 722.w,
),
),
Positioned(top: 48.w, child: _warning()),
// Positioned(child: PloneBottom(onTap: (){
// showDialog(context: context, builder: (context){
// return const AppDialog();
// });
//
// })),
Positioned(bottom: 64.w, child: _getBody()),
Align(
child: SizedBox(
width: double.infinity,
height: 1600.w,
),
)
],
),
));
}
// bool _getPermissions() {
// if(sms && plone){
// return true;
// }else{
// return false;
// }
// }
// String _text(){
// if(!(sms && plone && callLog && kg)){
// if(!(sms && plone && callLog )){
// return "";
// // return "必须权限没有授予本APP无法正常使用";
// }if(!kg){
// return "功能开关未开启";
// }
// }else{
// return "";
// }
// }
_warning() {
return Offstage(
offstage: (sms && plone && callLog && kg),
child: GestureDetector(
onTap: () {
if (!(sms && plone && callLog && kg)) {
if (!(sms && plone && callLog)) {
Get.to(() => const PrivacyRightsPage(name: "权限说明"));
// Get.to(()=>const TabNavigator(index: 1,));
} else {
BotToast.showText(text: '功能开关未开启');
}
}
// print();
// openAppSettings();
},
child: Container(
width: 622.w,
margin: EdgeInsets.symmetric(horizontal: 64.w),
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 20.w),
height: 88.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: const Color(0xFFFFF2F2),
border: Border.all(width: 1.w, color: const Color(0xFFFFC8C8))),
child: Row(
children: [
Image(
image: AssetImage(Assets.icons.horn.path),
width: 48.w,
height: 48.w,
),
16.wb,
Text(
!(sms && plone && callLog)
? "必须权限没有授予本APP无法正常使用"
: "功能开关未开启,请到我的页面开启",
style:
TextStyle(color: const Color(0xFFFF3F3F), fontSize: 24.sp),
),
!(sms && plone && callLog) ? 32.wb : 0.wb,
!(sms && plone && callLog)
? Image(
image: AssetImage(Assets.icons.right.path),
width: 28.w,
height: 28.w,
fit: BoxFit.fill,
)
: const SizedBox()
],
),
),
),
);
}
_getBody() {
return Container(
padding: EdgeInsets.symmetric(horizontal: 64.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"短信帮手",
style: TextStyle(
fontSize: 64.sp,
color: const Color(0xFF333333),
fontWeight: FontWeight.bold),
),
24.hb,
Text(
"希望能成为您的短信小助手",
style: TextStyle(fontSize: 32.sp, color: const Color(0xFF999999)),
),
48.hb,
_getSet(),
32.hb,
_getContainer("接听后", "编辑接听后发送的短信内容", Assets.images.answer.path,
const Color(0xFF74BCFF), const Color(0xFF1890FF)),
30.hb,
_getContainer("拒接/未接后", "编辑拒接/未接后发送的短信内容", Assets.images.refused.path,
const Color(0xFF72E4C8), const Color(0xFF13CA9D))
],
),
);
}
_getSet() {
return GestureDetector(
onTap: (){
Get.to(()=>const PhoneSetPage());
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: 42.w, vertical: 20.w),
decoration: BoxDecoration(
color: const Color(0xFFF2F9FF),
border: Border.all(color: const Color(0xFF1890FF), width: 2.w),
borderRadius: BorderRadius.circular(16.w)),
child: Row(
children: [
SizedBox(
width: 48.w,
height: 48.w,
child: Image.asset(Assets.icons.set.path),
),
16.wb,
Text(
"短信发送号码设置",
style: TextStyle(fontSize: 28.sp, color: const Color(0xFF1890FF)),
),
190.wb,
SizedBox(
width: 48.w,
height: 48.w,
child: const Icon(
Icons.chevron_right,
color: Color(0xFF1890FF),
),
),
],
),
),
);
}
_getContainer(String title, String text, String image, Color cl1, Color cl2) {
return GestureDetector(
onTap: () {
// print(title);
if (title == "接听后") {
Get.to(() => const ContentConnectPage());
} else {
Get.to(() => const ContentRefusePage());
// print("未接听");
}
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.w),
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [cl1, cl2])),
width: 622.w,
height: 192.w,
child: Row(
children: [
Container(
padding: EdgeInsets.only(top: 40.w, left: 50.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title,
style: TextStyle(
fontSize: 36.sp,
color: const Color(0xFFFFFFFF),
fontWeight: FontWeight.bold)),
16.hb,
Text(
text,
style: TextStyle(
fontSize: 27.sp,
color: const Color(0xFFFFFFFF).withOpacity(0.6)),
),
],
),
),
const Spacer(),
Padding(
padding: EdgeInsets.only(top: 40.w),
child: Image.asset(
image,
width: 166.w,
height: 152.w,
fit: BoxFit.fill,
),
),
],
)));
}
}