0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Isarで`NoSuchMethodError: class QueryBuilder has no instance method 'findAll'.`が出るときは、importが不足しているかも

Last updated at Posted at 2023-05-28

事象

Isarのドキュメントに従って以下のようなコードを書いていたら
findAll()の箇所で標題のNoSuchMethodErrorが出て、QueryBuilderにそんなメソッドはないと怒られた。

isar.users
  .where()
  .nameEqualTo('Taro')
  .findAll();  

たしかにコード補完でもfindAllは出てこず、公式のサンプルコード通りにやっているのになぜ?と混乱した

原因

上記クエリを記述しているファイル内でIsarをimportしていないのが原因だった。
ファイル構成としては以下のとおり。

  • ファイルA(プロバイダ): Isarをopenしてインスタンスを共有 ※ここでIsarをimport
  • ファイルB(リポジトリ): プロバイダからIsarのインスタンスを受け取って上記コードのように使用

ファイルBでもIsarをimportして解決した。

原因詳細

GitHubのIssueに同じ内容があったが、そこでもはっきりとは書かれていなかった。
https://github.com/isar/isar/issues/1094

Dartのimportはファイルごとにスコープを持つから〜みたいなことが書かれていたが、
isar.users.where().nameEqualTo('Taro')まではチェーンできているので
本質的には、IsarのQueryBuilderクラスがQueryクラスを作る仕組みとかそのへんがいろいろ関係してるんだろう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?