From c84b3b1fd877f900fc2ed253d56a8b0e486ec20e Mon Sep 17 00:00:00 2001 From: wylyl22 <2373073266@qq.com> Date: Tue, 13 Sep 2022 08:43:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 2 + lib/model/phone_num_model.dart | 14 +- lib/model/phone_num_model.g.dart | 1 + lib/providers/phone_num_provider.dart | 28 ++++ .../set/phone_num_list/call_records_list.dart | 108 +++++++++++--- lib/ui/home/set/specify_phone_page.dart | 133 +++++++++--------- lib/utils/user_tool.dart | 8 +- 7 files changed, 199 insertions(+), 95 deletions(-) create mode 100644 lib/providers/phone_num_provider.dart diff --git a/lib/main.dart b/lib/main.dart index 36ec7f6..e099efe 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,6 +14,7 @@ import 'package:get/get_navigation/src/root/get_material_app.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:power_logger/power_logger.dart'; +import 'package:project_telephony/providers/phone_num_provider.dart'; import 'package:project_telephony/providers/user_provider.dart'; import 'package:project_telephony/ui/home/call.dart'; @@ -71,6 +72,7 @@ class _MyAppState extends State { return MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => UserProvider()), + ChangeNotifierProvider(create: (context)=>PhoneNumProvider()), ], child: MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance.window), diff --git a/lib/model/phone_num_model.dart b/lib/model/phone_num_model.dart index 774be2b..d00c970 100644 --- a/lib/model/phone_num_model.dart +++ b/lib/model/phone_num_model.dart @@ -2,20 +2,22 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:equatable/equatable.dart'; part 'phone_num_model.g.dart'; - @JsonSerializable() + class PhoneNumModel extends Equatable{ - final String num; - final int time; - final String name; + final String? num; + final int? time; + final String? name; + bool state ; factory PhoneNumModel.fromJson(Map json) =>_$PhoneNumModelFromJson(json); - const PhoneNumModel({ + PhoneNumModel({ required this.name, required this.num, required this.time, + required this.state, }); @override - List get props => [num,time,name]; + List get props => [num,time,name,state]; } \ No newline at end of file diff --git a/lib/model/phone_num_model.g.dart b/lib/model/phone_num_model.g.dart index f91b707..4799a50 100644 --- a/lib/model/phone_num_model.g.dart +++ b/lib/model/phone_num_model.g.dart @@ -11,4 +11,5 @@ PhoneNumModel _$PhoneNumModelFromJson(Map json) => num: json['num'] as String, time: json['time'] as int, name: json['name'] as String, + state: json['state']as bool, ); diff --git a/lib/providers/phone_num_provider.dart b/lib/providers/phone_num_provider.dart new file mode 100644 index 0000000..9bf5397 --- /dev/null +++ b/lib/providers/phone_num_provider.dart @@ -0,0 +1,28 @@ +import 'package:call_log/call_log.dart'; +import 'package:flutter/material.dart'; + +import '../model/phone_num_model.dart'; +import '../utils/hive_store.dart'; + +class PhoneNumProvider extends ChangeNotifier{ + final List _phoneNum=[PhoneNumModel(num: "",time: 0,name: "", state:false)]; + List get phoneNum=>_phoneNum; + Future list(List phoneList) async{ + // await HiveStore.dataBox!.get(); + // final Iterable entries = await CallLog.query(); + + // for (CallLogEntry entrie in entries) { + // _phoneNum.add(PhoneNumModel( + // num: entrie.number, + // time: entrie.timestamp, + // name: entrie.name, + // state: false, + // )); + // // a.add(entrie.number); + // } + // final phoneList=_phoneNum.toSet(); + // final phoneList= HiveStore.dataBox?.get(phoneNum); + return ; + } + // Future +} \ No newline at end of file diff --git a/lib/ui/home/set/phone_num_list/call_records_list.dart b/lib/ui/home/set/phone_num_list/call_records_list.dart index 65caf7e..08768ae 100644 --- a/lib/ui/home/set/phone_num_list/call_records_list.dart +++ b/lib/ui/home/set/phone_num_list/call_records_list.dart @@ -1,10 +1,14 @@ import 'package:call_log/call_log.dart'; +import 'package:flustars/flustars.dart'; import 'package:flutter/material.dart'; -import 'package:project_telephony/ui/widget/plone_bottom.dart'; -import 'package:project_telephony/utils/headers.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; - +import 'package:project_telephony/base/base_style.dart'; +import 'package:project_telephony/utils/headers.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import '../../../../model/phone_num_model.dart'; +import '../../../widget/scaffold_theme_widget.dart'; + + class CallRecordsList extends StatefulWidget { const CallRecordsList({Key? key}) : super(key: key); @@ -15,28 +19,69 @@ class CallRecordsList extends StatefulWidget { class _CallRecordsListState extends State { List phoneNum = []; + List phoneNum2 = []; final EasyRefreshController _easyRefreshController = EasyRefreshController(); - List a = []; - int b = 0; + late bool notifications; + late bool trackHistory; + late bool instantOrders; + late SharedPreferences prefs; + List numList=[]; + + + + @override + void initState() { + // getList(); + getList(); + super.initState(); + } @override void dispose() { _easyRefreshController.dispose(); super.dispose(); } - + getList() async { + phoneNum.clear(); + final Iterable entries = await CallLog.query(); + for (CallLogEntry entrie in entries) { + if(!numList.contains(entrie.number)){ + numList.add(entrie.number!); + phoneNum.add(PhoneNumModel( + num: entrie.number, + time: entrie.timestamp, + name: entrie.name, + state: false, + )); + } + } + } @override Widget build(BuildContext context) { - return - Expanded( - child: EasyRefresh( - firstRefresh: true, - header: MaterialHeader(), - onRefresh: () async {}, - child: ListView.builder(itemBuilder: (context, index) { - return _getBox(phoneNum[index]); - }), - )); + var profileBuilder = FutureBuilder( + future: getList() , // a Future or null + builder: (BuildContext context, AsyncSnapshot snapshot) { + if(snapshot.connectionState==ConnectionState.done){ + return ListView.builder( + itemBuilder: (context, index) { + return _getBox(phoneNum[index]); + }, + itemCount: phoneNum.length, + ); + }else{ + return const SizedBox(); + } + }); +return ScaffoldThemeWidget( + bottom: '添加', + title: '从通话记录添加', + isBorder: true, + isOpacity: false, + onTap: () { + + }, + child: profileBuilder +); // Column( // children: [ // Container(width: 750.w, height: 1000.w, child: Text("") @@ -58,9 +103,32 @@ class _CallRecordsListState extends State { // ); } -_getBox(PhoneNumModel item){ - return ListTile( - title: Text(item.num), + _getBox(PhoneNumModel item) { + return CheckboxListTile( + onChanged: (bool? value) { + setState((){ + item.state = value!; + + }); + }, + value: item.state, + title: Text( + item.num!, + style: TextStyle(fontSize: 32.w, fontWeight: FontWeight.bold), + ), + subtitle: Row( + children: [ + Text( + DateUtil.formatDateMs(item.time! * 1000, format: 'MM/dd HH:mm'), + style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999), + ), + 30.wb, + Text( + item.name == null ? "" : item.name!, + style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999), + ) + ], + ), ); -} + } } diff --git a/lib/ui/home/set/specify_phone_page.dart b/lib/ui/home/set/specify_phone_page.dart index 3ec0df1..6e12ca6 100644 --- a/lib/ui/home/set/specify_phone_page.dart +++ b/lib/ui/home/set/specify_phone_page.dart @@ -1,14 +1,17 @@ +import 'package:call_log/call_log.dart'; +import 'package:flustars/flustars.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:project_telephony/ui/exclude/exclude_contacts_page.dart'; -import 'package:project_telephony/ui/home/home_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 '../../../base/base_style.dart'; -import '../../widget/plone_back_button.dart'; +import '../../../model/phone_num_model.dart'; + import '../../widget/scaffold_theme_widget.dart'; class SpecifyPhonePage extends StatefulWidget { @@ -27,78 +30,72 @@ class _SpecifyPhonePageState extends State { super.dispose(); } + @override Widget build(BuildContext context) { return ScaffoldThemeWidget(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("通话记录添加", "通过本机通话记录添加号码", () { - Get.to(() => ScaffoldThemeWidget( - bottom: '添加', - title: '从通话记录添加', - isBorder: true, - isOpacity: false, - onTap: () { }, - child: const CallRecordsList() - )); - }), - _getAddPhone("通迅录添加", "通过本机通讯录添加号码", () { - Get.to(() => (const ExcludeContactsPage())); - }), - _getAddPhone( - "添加单个或批量号码", "通过输入号码段添加批量号码", () {}), - ], - )), - 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 { - // await userProvider.updateUserInfo(); + 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("通话记录添加", "通过本机通话记录添加号码", () { + Get.to(() => const CallRecordsList()); + }), + _getAddPhone("通迅录添加", "通过本机通讯录添加号码", () { + Get.to(() => (const ExcludeContactsPage())); + }), + _getAddPhone( + "添加单个或批量号码", "通过输入号码段添加批量号码", () {}), + ], + )), + 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 { + // await userProvider.updateUserInfo(); - setState(() {}); - }, - child: ListView( - children: [ - _getNullList(), + setState(() {}); + }, + child: ListView( + children: [ + _getNullList(), - ], - )),); + ], + )),); // PloneBottom( // onTap: () { // showModalBottomSheet( diff --git a/lib/utils/user_tool.dart b/lib/utils/user_tool.dart index d664826..8ed08cb 100644 --- a/lib/utils/user_tool.dart +++ b/lib/utils/user_tool.dart @@ -1,10 +1,16 @@ // import 'package:project_telephony/providers/phone_provider.dart'; import 'package:provider/provider.dart'; +import '../providers/phone_num_provider.dart'; import '../providers/user_provider.dart'; import 'headers.dart'; class UserTool { static UserProvider userProvider = Provider.of(Get.context!, listen: false); - // static PhoneProvider phoneProvider=Provider.of(Get.context!, listen: false); +// static PhoneProvider phoneProvider=Provider.of(Get.context!, listen: false); +} + +class PhoneTool { + static PhoneNumProvider phoneNumProvider = + Provider.of(Get.context!, listen: false); }