add_urgent_contact_controller.dart 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter_contacts/flutter_contacts.dart';
  3. import 'package:get/get.dart';
  4. import 'package:get/get_core/src/get_main.dart';
  5. import 'package:injectable/injectable.dart';
  6. import 'package:location/base/base_controller.dart';
  7. import 'package:location/data/consts/error_code.dart';
  8. import 'package:location/data/repositories/urgent_contact_repository.dart';
  9. import 'package:location/handler/error_handler.dart';
  10. import 'package:location/utils/common_expand.dart';
  11. import 'package:location/utils/http_handler.dart';
  12. import 'package:permission_handler/permission_handler.dart';
  13. import '../../../dialog/common_confirm_dialog_impl.dart';
  14. import '../../../resource/string.gen.dart';
  15. import '../../../utils/de_bounce.dart';
  16. import '../../../utils/permission_util.dart';
  17. import '../../../utils/toast_util.dart';
  18. @injectable
  19. class AddUrgentContactController extends BaseController {
  20. final RxString _contactPhone = RxString("");
  21. final TextEditingController etController = TextEditingController();
  22. String get contactPhone => _contactPhone.value;
  23. final Debounce _debounce = Debounce(debounceTime: 500);
  24. final UrgentContactRepository urgentContactRepository;
  25. AddUrgentContactController(this.urgentContactRepository);
  26. @override
  27. void onReady() {
  28. etController.addListener(() {
  29. _contactPhone.value = etController.text;
  30. });
  31. }
  32. void back() {
  33. Get.back();
  34. }
  35. void onSelectContactClick() async {
  36. bool isGranted = await PermissionUtil.checkPermission(Permission.contacts);
  37. if (!isGranted) {
  38. requestContactsPermissionDialog(onConfirm: () async {
  39. isGranted = await PermissionUtil.requestPermission(Permission.contacts);
  40. if (isGranted) {
  41. _goContact();
  42. } else {
  43. ToastUtil.show(StringName.permissionRequestFail);
  44. }
  45. });
  46. } else {
  47. _goContact();
  48. }
  49. }
  50. void _goContact() async {
  51. final contact = await FlutterContacts.openExternalPick();
  52. if (contact != null) {
  53. final phones = contact.phones;
  54. if (phones.isNotEmpty) {
  55. etController.text = phones.first.number.trimAll();
  56. }
  57. }
  58. }
  59. @override
  60. void onClose() {
  61. super.onClose();
  62. etController.dispose();
  63. }
  64. void onAddClick() {
  65. if (contactPhone.length < 11) {
  66. return;
  67. }
  68. _debounce.onClick(() {
  69. urgentContactRepository.addContact(contactPhone).then((_) {
  70. ToastUtil.show(StringName.urgentContactAddSuccess);
  71. Get.back(result: true);
  72. }).catchError((e) {
  73. if (e is ServerErrorException) {
  74. if (e.code == ErrorCode.contactAlreadyAdded) {
  75. ToastUtil.show(StringName.urgentContactHasBeenAdded);
  76. } else {
  77. ErrorHandler.toastError(e);
  78. }
  79. } else {
  80. ErrorHandler.toastError(e);
  81. }
  82. });
  83. });
  84. }
  85. }