contact_controller.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:clean/base/base_controller.dart';
  4. import 'package:clean/module/contact/contact_state.dart';
  5. import 'package:flutter_contacts/flutter_contacts.dart';
  6. import 'package:path_provider/path_provider.dart';
  7. import 'package:permission_handler/permission_handler.dart';
  8. import '../../utils/toast_util.dart';
  9. class ContactController extends BaseController {
  10. @override
  11. Future<void> onInit() async {
  12. // TODO: implement onInit
  13. super.onInit();
  14. if (await Permission.contacts.request().isGranted) {
  15. await ContactState.loadContacts();
  16. // await restoreContacts();
  17. } else {
  18. ToastUtil.show("请先开启相册权限");
  19. }
  20. }
  21. Future<void> backUpContacts() async {
  22. // 获取所有联系人
  23. List<Contact> contacts = await FlutterContacts.getContacts(
  24. withProperties: true,
  25. withPhoto: true,
  26. );
  27. // 将联系人数据转换为 JSON
  28. List<Map<String, dynamic>> contactsJson =
  29. contacts.map((contact) => contact.toJson()).toList();
  30. try {
  31. final directory = await getApplicationDocumentsDirectory();
  32. final file = File('${directory.path}/contacts_backup.json');
  33. await file.writeAsString(jsonEncode(contactsJson));
  34. print('备份成功: ${file.path}');
  35. } catch (e) {
  36. print('备份失败: $e');
  37. }
  38. }
  39. Future<void> restoreContacts() async {
  40. try {
  41. // 获取所有联系人
  42. List<Contact> contacts = await FlutterContacts.getContacts(
  43. withProperties: true,
  44. withPhoto: true,
  45. );
  46. for (var contact in contacts) {
  47. await contact.delete();
  48. }
  49. final directory = await getApplicationDocumentsDirectory();
  50. // 从本地文件读取备份数据
  51. final file = File('${directory.path}/contacts_backup.json');
  52. String contactsJsonString = await file.readAsString();
  53. List<dynamic> contactsJson = jsonDecode(contactsJsonString);
  54. // 将 JSON 数据转换为联系人对象并写入通讯录
  55. for (var contactJson in contactsJson) {
  56. Contact contact = Contact.fromJson(contactJson);
  57. contact.id = "";
  58. await FlutterContacts.insertContact(contact);
  59. }
  60. print('恢复成功');
  61. } catch (e) {
  62. print('恢复失败: $e');
  63. }
  64. }
  65. void init() {}
  66. }