|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
|
|
|
|
|
|
|
|
|
import 'package:project_telephony/model/hive/phone_model.dart';
|
|
|
|
|
import 'package:project_telephony/utils/headers.dart';
|
|
|
|
|
import 'package:project_telephony/utils/hive_store.dart';
|
|
|
|
|
|
|
|
|
|
import '../../base/base_style.dart';
|
|
|
|
|
|
|
|
|
|
import '../widget/plone_back_button.dart';
|
|
|
|
|
import '../widget/plone_bottom.dart';
|
|
|
|
|
import 'call_list_page.dart';
|
|
|
|
|
|
|
|
|
|
typedef NumList = Function(List<String> content);
|
|
|
|
|
|
|
|
|
|
class AddressBook extends StatefulWidget {
|
|
|
|
|
final NumList number;
|
|
|
|
|
|
|
|
|
|
const AddressBook({Key? key, required this.number}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
_AddressBookState createState() => _AddressBookState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _AddressBookState extends State<AddressBook> {
|
|
|
|
|
final EasyRefreshController _easyRefreshController = EasyRefreshController();
|
|
|
|
|
String phoneName = "";
|
|
|
|
|
List<PhoneModel> massList = [];
|
|
|
|
|
List<PhoneNum> phoneList = [];
|
|
|
|
|
List<String> NumList = [];
|
|
|
|
|
bool state=false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
// print("这是我的第二个类型${massList.runtimeType}");
|
|
|
|
|
// print(HiveStore.dataBox?.get("ml"));
|
|
|
|
|
massList = HiveStore.dataBox?.get("ml").cast<PhoneModel>();
|
|
|
|
|
// UserTool.phoneNumProvider.init();
|
|
|
|
|
// massList=HiveStore.dataBox?.get("ml").cast<PhoneModel>();
|
|
|
|
|
// List<dynamic> list<PhoneModel>
|
|
|
|
|
// massList= HiveStore.dataBox?.get("ml");
|
|
|
|
|
super.initState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void dispose() {
|
|
|
|
|
_easyRefreshController.dispose();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
|
|
|
|
resizeToAvoidBottomInset: false,
|
|
|
|
|
appBar: AppBar(
|
|
|
|
|
elevation: 0,
|
|
|
|
|
centerTitle: true,
|
|
|
|
|
title: Text(
|
|
|
|
|
'通讯录',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: BaseStyle.fontSize34,
|
|
|
|
|
color: BaseStyle.color333333,
|
|
|
|
|
fontWeight: FontWeight.bold),
|
|
|
|
|
),
|
|
|
|
|
// titleSpacing: 185.w,
|
|
|
|
|
actions: [
|
|
|
|
|
GestureDetector(
|
|
|
|
|
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: [
|
|
|
|
|
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: TextStyle(
|
|
|
|
|
fontSize: 28.sp,
|
|
|
|
|
color: BaseStyle.color999999),
|
|
|
|
|
placeholder: "请输入分组名称(10个字以内)",
|
|
|
|
|
onChanged: (value) {
|
|
|
|
|
phoneName = value;
|
|
|
|
|
setState(() {});
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
82.hb,
|
|
|
|
|
// _getUpdate("爸爸", "123123123"),
|
|
|
|
|
PloneBottom(
|
|
|
|
|
blM: false,
|
|
|
|
|
border: true,
|
|
|
|
|
color1: const Color(0xFF1890FF),
|
|
|
|
|
color2: const Color(0xFF74BCFF),
|
|
|
|
|
onTap: () async {
|
|
|
|
|
DateTime now = DateTime.now();
|
|
|
|
|
String nowTime =
|
|
|
|
|
"${now.year}-${now.month}-${now
|
|
|
|
|
.day} ${now.hour}:${now
|
|
|
|
|
.minute}:${now.millisecond}";
|
|
|
|
|
massList.add(PhoneModel(
|
|
|
|
|
time: nowTime,
|
|
|
|
|
phoneList: [],
|
|
|
|
|
state: false,
|
|
|
|
|
title: phoneName));
|
|
|
|
|
await HiveStore.dataBox
|
|
|
|
|
?.put("ml", massList);
|
|
|
|
|
// massList.add(MassListModel(
|
|
|
|
|
// state: false,
|
|
|
|
|
// list: [],
|
|
|
|
|
// title: phoneName,
|
|
|
|
|
// time: nowTime));
|
|
|
|
|
// // await
|
|
|
|
|
// Navigator.pop(context);
|
|
|
|
|
Get.back();
|
|
|
|
|
_easyRefreshController.callRefresh();
|
|
|
|
|
},
|
|
|
|
|
text: "保存",
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: EdgeInsets.only(top: 40.w, right: 32.w),
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
height: 28.w,
|
|
|
|
|
width: 120.w,
|
|
|
|
|
child: Text(
|
|
|
|
|
"添加分组",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
color: BaseStyle.color333333, fontSize: 28.sp),
|
|
|
|
|
),
|
|
|
|
|
)))
|
|
|
|
|
],
|
|
|
|
|
leading: const CloudBackButton(isSpecial: true),
|
|
|
|
|
backgroundColor: kForeGroundColor),
|
|
|
|
|
backgroundColor: Colors.white,
|
|
|
|
|
body: EasyRefresh(
|
|
|
|
|
firstRefresh: true,
|
|
|
|
|
header: MaterialHeader(),
|
|
|
|
|
controller: _easyRefreshController,
|
|
|
|
|
onRefresh: () async {
|
|
|
|
|
// UserTool.phoneNumProvider.init();
|
|
|
|
|
// massList=HiveStore.dataBox?.get("ml");
|
|
|
|
|
// massList=HiveStore.dataBox?.get("ml").cast<PhoneModel>();
|
|
|
|
|
// massList=HiveStore.dataBox?.get("ml").cast<List<PhoneModel>>();
|
|
|
|
|
setState(() {});
|
|
|
|
|
},
|
|
|
|
|
child: ListView.builder(
|
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
|
return _getBox(
|
|
|
|
|
massList[index], index, massList[index].phoneList!.length);
|
|
|
|
|
},
|
|
|
|
|
itemCount: massList.length,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
bottomNavigationBar: Padding(
|
|
|
|
|
padding: EdgeInsets.only(bottom: 24.w),
|
|
|
|
|
child: PloneBottom(
|
|
|
|
|
onTap: () {
|
|
|
|
|
widget.number(NumList);
|
|
|
|
|
Get.back();
|
|
|
|
|
},
|
|
|
|
|
// border: state,
|
|
|
|
|
opacity: 1,
|
|
|
|
|
text: "确定",
|
|
|
|
|
),
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_getBox(PhoneModel item, int index, int num) {
|
|
|
|
|
return CheckboxListTile(
|
|
|
|
|
onChanged: (bool? value) {
|
|
|
|
|
setState(() {
|
|
|
|
|
item.state = value!;
|
|
|
|
|
state=value;
|
|
|
|
|
if (item.state!) {
|
|
|
|
|
item.phoneList?.forEach((element) {
|
|
|
|
|
NumList.add(element.phone ?? "");
|
|
|
|
|
});
|
|
|
|
|
// item.phoneList!.map((e) => NumList.add(e.phone ??""));
|
|
|
|
|
} else {
|
|
|
|
|
item.phoneList?.forEach((element) {
|
|
|
|
|
NumList.remove(element.phone ?? "");
|
|
|
|
|
});
|
|
|
|
|
// item.phoneList!.map((e) => NumList.remove(e.phone ??""));
|
|
|
|
|
// phoneNum3.remove({"phone":num,"remark":name});
|
|
|
|
|
// phoneNum3.remove(ExcludePnModel(phone: num, remark: name)) ;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
value: item.state,
|
|
|
|
|
title: GestureDetector(
|
|
|
|
|
onTap: () {
|
|
|
|
|
Navigator.of(context)
|
|
|
|
|
.push(MaterialPageRoute(builder: (_) =>
|
|
|
|
|
CallListPage(
|
|
|
|
|
phoneNum: item.phoneList ?? [],
|
|
|
|
|
title: item.title ?? "",
|
|
|
|
|
index: index,
|
|
|
|
|
))).then((value) => _easyRefreshController.callRefresh());
|
|
|
|
|
print(index);
|
|
|
|
|
},
|
|
|
|
|
child: Text(
|
|
|
|
|
"${item.title}($num)",
|
|
|
|
|
style: TextStyle(fontSize: 32.w, fontWeight: FontWeight.bold),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
subtitle: Row(
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
item.time ?? "",
|
|
|
|
|
style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999),
|
|
|
|
|
),
|
|
|
|
|
// 30.wb,
|
|
|
|
|
// Text(
|
|
|
|
|
// item.name == null ? "" : item.name!,
|
|
|
|
|
// style: TextStyle(fontSize: 28.sp, color: BaseStyle.color999999),
|
|
|
|
|
// )
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|