首页 > 解决方案 > 如何在 Flutter 中导航到 iOS 原生添加联系人页面?

问题描述

我一直在寻找如何完成这项工作:我有一个带有“添加联系人”按钮的联系人列表。我的目标是在单击该按钮时打开本机添加联系人页面(主要用于 iOS)。

我知道如何从颤振中调用该方法,但我不知道如何使用 swift 进行调用添加联系人屏幕。

关于如何做到这一点的任何建议?

谢谢

标签: androidiosflutternativecontacts

解决方案


好的,所以我想通了。如果有人需要,代码如下:

import UIKit
import Flutter
import Contacts
import ContactsUI

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
      
      let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
      setUpMethodChannels(controller: controller)
      

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
    
    
    private func setUpMethodChannels(controller: FlutterViewController) {
        
        let contactChannel = FlutterMethodChannel(name: "com.flutter.contact_list/addContact",
                                                  binaryMessenger: controller.binaryMessenger)
        contactChannel.setMethodCallHandler({
              (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
             
            guard call.method == "AddContact" else {
                result(FlutterMethodNotImplemented)
                return
            }
            
            let con = CNContact()
            let mainVC = CNContactViewController(forNewContact: con)
            mainVC.delegate = controller
            let navigationController = UINavigationController(rootViewController: mainVC)
            self.window?.rootViewController?.present(navigationController, animated: true, completion: nil)
            })
        }
}

extension FlutterViewController : CNContactViewControllerDelegate, UINavigationControllerDelegate {
    
    public func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
            viewController.dismiss(animated: true, completion: nil)
    }    
}

推荐阅读