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:package_info/package_info.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 addressBook=false; bool kg = false; final service = FlutterBackgroundService(); @override class _HomePageState extends State with WidgetsBindingObserver { @override void initState() { super.initState(); //页面初始化的时候,添加一个状态的监听者 WidgetsBinding.instance.addObserver(this); _listenForPermissionStatus(); setState(() {}); } @override void dispose() { super.dispose(); //页面销毁时移出监听者 WidgetsBinding.instance.removeObserver(this); } Future _listenForPermissionStatus() async { sms = await Permission.sms.request().isGranted; plone = await Permission.phone.request().isGranted; callLog = await Permission.callLog.request().isGranted; addressBook= await Permission.contacts.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 && addressBook && kg), child: GestureDetector( onTap: () { if (!(sms && plone && callLog && addressBook && kg)) { if (!(sms && plone && callLog && addressBook)) { Get.to(() => const PrivacyRightsPage(name: "权限说明")); // Get.to(()=>const TabNavigator(index: 1,)); } else { BotToast.showText(text: '功能开关未开启'); } } // 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 && addressBook) ? "必须权限没有授予,本APP无法正常使用" : "功能开关未开启,请到我的页面开启", style: TextStyle(color: const Color(0xFFFF3F3F), fontSize: 24.sp), ), !(sms && plone && callLog && addressBook) ? 32.wb : 0.wb, !(sms && plone && callLog && addressBook) ? 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: (){ Navigator.of(context) .push( MaterialPageRoute(builder: (_) => const PhoneSetPage()), ) .then((val) => _listenForPermissionStatus()); }, 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: () async{ // PackageInfo packageInfo = await PackageInfo.fromPlatform(); // String version = packageInfo.version;//版本号 // String buildNumber = packageInfo.buildNumber;//版本构建号 // print(version); // print(buildNumber); // 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, ), ), ], ))); } }