import 'dart:async'; import 'package:flustars/flustars.dart'; import 'package:flutter/material.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/utils/headers.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override _HomePageState createState() => _HomePageState(); } bool sms=false; bool plone=false; @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; setState(() {}); } @override void didChangeAppLifecycleState(AppLifecycleState state){ super.didChangeAppLifecycleState(state); switch (state){ //应用状态处于闲置状态,并且没有用户的输入事件, // 注意:这个状态切换到 前后台 会触发,所以流程应该是先冻结窗口,然后停止UI case AppLifecycleState.inactive: print("应用处于闲置状态,这种状态的应用应该假设他们可能在任何时候暂停 切换到后台会触发======"); break; case AppLifecycleState.resumed: print("应用进入前台——————————"); _listenForPermissionStatus(); break; case AppLifecycleState.paused: print("应用处于不可见状态 后台======"); break; case AppLifecycleState.detached: print("当前页面即将退出======"); break; } } @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(bottom: 64.w, child: _getBody()), Align(child: SizedBox(width: double.infinity,height: 1600.w,),) ], ), )); } bool _getPermissions() { if(sms && plone){ return true; }else{ return false; } } _warning() { return Offstage(offstage: (sms && plone) ,child: GestureDetector( onTap: (){ // print(); openAppSettings(); }, child: Container( 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("必须权限没有授予,本APP无法正常使用",style: TextStyle(color: const Color(0xFFFF3F3F),fontSize:24.sp ),) ,32.wb, Image(image: AssetImage(Assets.icons.right.path),width:28.w ,height: 28.w,fit:BoxFit.fill,) ],), ),),); } _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), ), 8.hb, Text( "希望能成为您的短信小助手", style: TextStyle(fontSize: 32.sp, color: const Color(0xFF999999)), ), 50.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)) ], ), ); } _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() ,Image.asset( image, width: 166.w, height: 152.w, fit: BoxFit.fill, ),],))); } }