😱
Supabaseからデータを取得できない!
いろんな記事や公式のドキュメントを参考にしているのに、Supabaseからデータを取得できない!
以下の記事を参考に、Flutterを使ってSupabaseから1回だけデータを取得したいと思っていました。
今回は、sample
というテーブルを用意して、str
というカラムにあるデータを取得しようと思います。
なので、記事を参考にすれば、データを取得するコードは以下のようになるはずです。
final sampleFutureProvider =
FutureProvider<List<Map<String, dynamic>>>((ref) async {
final response = Supabase.instance.client.from('sample_db').select('str');
return response;
});
しかし結果は以下の通り...
[]
空配列やないか!!!
URLやアノンキーは合っているし、コードも間違ってないはずだし何が違うの〜!!!???
解決策
以下の記事に解決方法がありました!
どうやらPolicyを作る必要があるようです。
実際にやってみた
- プロジェクトページに入って
Database
のページに遷移します。 - Policyを追加したいテーブルを選び、1番右のアイコンをクリックして、
View table
をクリックします。 -
Add RLS policy
をクリックします。 -
New Policy
をクリックします。
(No policies created yet
とあるので、まだPolicyが作られていないのがわかります) -
Get started quickly
をクリックします。準備されたテンプレートからポリシーを作ることができます。 -
Enable read access to everyone
を選んでUse this template
をクリックします。 - Policyの設定をします。今回はサンプルなので特に設定していませんが、ドキュメントを参照してお好みにカスタマイズしてください。設定が終わったら
Review
をクリックします。 - Policy作成に使用されるSQL文が表示されます。問題なければ
Save Policy
をクリックします。 - 先ほど設定したPolicyが確認できます。
おわりに
ここまでたどり着くのにめちゃくちゃ苦労しました。
ちゃんとPolicyのセットアップが必要だという事を、ドキュメントを読んで頭に入れておくのが重要ですね〜。
Discussion
すいませんね。Supabaseって、罠があるんですよ。
仕事で最近使ってるんですけど、他の人は許可の設定知らなくて、エラーの原因になってます。
私の記事真似する人多みたいなんですけど、公式チュートリアルや動画を先にやってみた方がいいですね。
僕はタイラーさんの動画や公式のチュートリアルをなん度もやって使い方に慣れました。
いえいえ、有益な記事を執筆いただきありがとうございます。
そうですね、先に公式のチュートリアルやドキュメントを取り組む/読む癖をつけといたほうがいいな〜と私も思いました。
チュートリアルも共有いただきありがとうございます!
Supabaseで困ったら、Xで投稿するとタイラーさん反応してくれるので、やってみるといいかもですね〜