羊をめぐるブログ

趣味の色々について書きます

flutterで内蔵辞書検索(iOS)

はじめに

flutterで内蔵辞書検索 on iOSを実装してみたので,その備忘録を書きます.

方法

以下の手順で行いました

  1. iOS側で辞書検索のためのmethodを実装

  2. flutter側からmethod channelで呼び出す

単純ッ

実装

iOS側の実装

iOSでは内蔵辞書検索のためのAPIとしてUIReferenceLibraryViewControllerが用意されています

Apple Developer Documentation

こちらのapiは,単語を引数として受け取り,内蔵辞書に対する検索結果のViewControllerを返すという動作をします.辞書内に複数見つかった場合はリスト表示され,見つからなかった場合はNot Foundが表示されます.

あくまで辞書の検索結果のページを返すだけであり,検索結果をデータとして取得して弄るなどのことはできないようです(著作権のせい?).

ただ,MacOS用なのででiOSでは使えないのですが,swift自体にはDCSCopyTextDefinitionという検索結果をデータとして得られそうなAPIが用意されているみたいです.

Apple Developer Documentation

とりあえず,今回はflutterからUIReferenceLibraryViewControllerを呼び出せるようにiOS側に実装します.method channelの実装は以下を参考にしました

FlutterでiOSのネイティブコードを呼び出す - Qiita

以下をmethod channelで呼び出します

    func searchDictionary(result: FlutterResult, controller: FlutterViewController, queryWord: String){
        let ref: UIReferenceLibraryViewController = UIReferenceLibraryViewController(term: queryWord)
        controller.present(ref, animated: true, completion: nil)
    }

}

flutter側

iOS側に書いたmethodを呼び出すだけなので省略.

実際の動作

実際に使ってみると,レスポンスは遅いですが,辞書検索の結果が表示されることがわかります. iOSが検索窓などで提供してる辞書検索は一瞬で結果が出るのに,なぜアプリからだとこんなに遅いんだ

streamable.com

その他

内蔵辞書検索機能は,それだけを提供するような単純なアプリだとrejectになるとドキュメントや以下のブログにて言及されています

Apple Developer Documentation [iOS] 内蔵辞書機能を使うとリジェクトされる? | Cocoamix.jp

どの程度シンプルだとrejectになってしまうのかはわかりませんが,サブ機能程度にしておいた方が落ち込む危険性が低そうです