import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:project_telephony/constants/api.dart'; import 'package:project_telephony/model/network/api_client.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/ui/exclude/exclude_contacts_page.dart'; import 'package:project_telephony/ui/exclude/exclude_single_page.dart'; import 'package:project_telephony/ui/home/set/phone_num_list/call_records_list.dart'; import 'package:project_telephony/utils/headers.dart'; import 'package:project_telephony/ui/widget/plone_bottom.dart'; import 'package:project_telephony/utils/toast/cloud_toast.dart'; import '../../../base/base_style.dart'; import '../../../model/exclude_phone_model.dart'; import '../../widget/scaffold_theme_widget.dart'; import 'func/exclude_contacts_func.dart'; class SpecifyPhonePage extends StatefulWidget { const SpecifyPhonePage({Key? key}) : super(key: key); @override _SpecifyPhonePageState createState() => _SpecifyPhonePageState(); } class _SpecifyPhonePageState extends State { final EasyRefreshController _refreshController = EasyRefreshController(); List findList = []; @override void dispose() { _refreshController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return ScaffoldThemeWidget( wid: 196, title: "指定号码", bottom: '添加', onTap: () { showModalBottomSheet( builder: (BuildContext context) { return Container( width: double.infinity, height: 750.w, padding: EdgeInsets.symmetric(horizontal: 32.w), child: Column( children: [ 48.hb, Text( "添加号码", style: TextStyle( fontSize: 34.w, fontWeight: FontWeight.bold), ), Expanded( child: ListView( children: [ _getAddPhone("通话记录添加", "通过本机通话记录添加号码", () { Navigator.of(context) .push( MaterialPageRoute( builder: (_) => const CallRecordsList()), ) .then((val) => _getNullList()); // Get.to(() => const CallRecordsList()); }), _getAddPhone("通迅录添加", "通过本机通讯录添加号码", () async { if (await Permission.contacts.isDenied) { showDialog( context: context, builder: (context) { return AlertDialog( content: const Text('获取通讯录权限还未开启'), actions: [ ElevatedButton( onPressed: () { openAppSettings(); }, child: const Text("前往开启"), ), ], ); }); } else { Get.to(() => (const ExcludeContactsPage())); } }), _getAddPhone("添加单个或批量号码", "通过输入号码段添加批量号码", () { Get.to(() => (const ExcludeSinglePage())); }), ], )), PloneBottom( onTap: () { Navigator.pop(context); }, hPadding: 32, border: true, textColor: const Color(0xFF1890FF), color2: const Color(0xFFF9F9F9), color1: const Color(0xFFF9F9F9), text: "取消", ), 32.hb ], ), ); }, context: context); }, child: EasyRefresh( firstRefresh: true, controller: _refreshController, header: MaterialHeader(), // footer: MaterialFooter(), onRefresh: () async { findList = await ExcludeFunc.getContacts(); // await userProvider.updateUserInfo(); setState(() {}); }, child: findList.isEmpty ? _getNullList() : _getNum() // ListView( // children: [findList.isEmpty ? _getNullList() : _getNum()], // ) ), ); } _getNum() { return ListView.builder( itemBuilder: (context, index) { return _getNumContant(findList[index]); }, itemCount: findList.length, ); } _getNumContant(ExcludePhoneModel item) { return Container( margin: EdgeInsets.symmetric(horizontal: 16.w), child: ListTile( onTap: () { showDialog( context: context, builder: (context) { return CupertinoAlertDialog( title: Text( "修改名称", style: TextStyle( color: BaseStyle.color333333, fontSize: 34.sp), ), content: Column( children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "名称", style: TextStyle( fontSize: 28.sp, color: BaseStyle.color999999, ), ), 24.hb, CupertinoTextField( padding: EdgeInsets.symmetric( horizontal: 24.w, vertical: 20.w), decoration: BoxDecoration( border: Border.all(color: Colors.white), // borderRadius: BorderRadius.all( // Radius.circular(4.w) // ), color: const Color(0xFFF9F9F9)), placeholderStyle: const TextStyle(color: BaseStyle.color333333), placeholder: item.remark, onChanged: (value) {}, ), 20.hb, Text( "号码", style: TextStyle( fontSize: 28.sp, color: BaseStyle.color999999, ), ), 24.hb, CupertinoTextField( padding: EdgeInsets.symmetric( horizontal: 24.w, vertical: 20.w), decoration: BoxDecoration( border: Border.all(color: Colors.white), // borderRadius: BorderRadius.all( // Radius.circular(4.w) // ), color: const Color(0xFFF9F9F9)), placeholder: item.phone, onChanged: (value) {}, ), 82.hb, // _getUpdate("爸爸", "123123123"), PloneBottom( blM: false, border: true, color1: const Color(0xFF1890FF), color2: const Color(0xFF74BCFF), onTap: () {}, text: "保存", ) ], ), ], ), ); }); }, title: Text( item.phone, style: TextStyle( fontSize: 32.sp, color: BaseStyle.color333333, fontWeight: FontWeight.bold)), subtitle: Text( item.address, style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999), ), trailing: TextButton( style: ButtonStyle( side: MaterialStateProperty.all( BorderSide(width: 2.w, color: const Color(0xFFE8E8E8)))), onPressed: () async { var res = await apiClient.request(API.exclude.find, data: {item.id}); if (res.code == 0) { _refreshController.callRefresh(); CloudToast.show(res.msg); } else { CloudToast.show(res.msg); } }, child: Text( "删除", style: TextStyle(fontSize: 28.sp, color: BaseStyle.color333333), ), ), ), ); } _getAddPhone(String title, String text, VoidCallback widget) { return GestureDetector( onTap: widget, child: ListTile( title: Text( title, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.bold), ), subtitle: Text( text, style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999), ), trailing: const Icon(Icons.chevron_right), ), ); } _getNullList() { return Column( mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, children: [ 490.hb, Image.asset( Assets.icons.nullphonelist.path, width: 240.w, height: 212.w, fit: BoxFit.fill, ), 48.hb, Text( "这里是空的", style: TextStyle( color: const Color(0xFF999999), fontWeight: FontWeight.bold, fontSize: 36.sp), ), 16.hb, Text( "还没有添加指定号码", style: TextStyle(color: const Color(0xFF999999), fontSize: 28.sp), ), 490.hb, ], ); } }