前のページはこちら
それでは、データの追加と変更を行います。
Contents
コード変更
supabase_repository.dartのDBUpdateを下記のように変更します。
static Future<bool> DBUpdate({name}) async {
try {
var supabase = Supabase.instance.client;
final updates = {
'id': supabase.auth.currentUser!.id,
'username': name,
'updated_at': DateTime.now().toIso8601String(),
};
final response =
await supabase.from('profiles').upsert(updates).execute();
if (response.error != null) {
print("エラーです" + response.error!.message);
throw new Exception(response.error);
}
return true;
} catch (e) {
return false;
}
}解説
データベースアクセスインスタンス生成
Auth用のアクセスインスタンスがSupabase.instance.client.authでしたが、DBアクセス用のインスタンスはSupabase.instance.clientそのものとなります。(この中にAuthも含まれている感じなんですかね)
var supabase = Supabase.instance.client;アップデートするためのMAP型オブジェクトを作る
supabaseのDBのアップデートをするためのMap<String, dynamic>オブジェクトを作ります。
final updates = {
'id': supabase.auth.currentUser!.id,
'username': name,
'updated_at': DateTime.now().toIso8601String(),
};
ログイン中のユーザーID
Key「id」にログイン中のIDを渡しています。
'id' : supabase.auth.currentUser!.id,文字列
Key「username 」には文字列を直接入れています。
'username ' : name,この「name」はこの関数が呼ばれる時に受け取っているもので、auth_page_view.dartが自身のテキストフィールドの内容を入れています。(興味があればご確認ください)
現在時刻(DateTime→TimeStampzコンバート含む)
Key「username 」に現在時刻を入れます。
が、今回は少し注意が必要です。supabase側で日付時間を表現するTimeStampzが型になっている場合、DartのDateTimeを入れる際はコンバートをする必要があります。『.toIso8601String()』を付ける事で変換が可能です。
'updated_at' : DateTime.now().toIso8601String()supabase.fromとupsert
最後に、作ったMAP型をsupabaseのprofilesに反映させます。
final response = await supabase.from('profiles').upsert(updates).execute();supabase.from(テーブル名文字列)がアクセスするテーブル指定です。
また『upsert』は、update+insertなコマンドです。指定したキーが無い場合は新しく追加され、そのキーを持つレコードがある場合は変更される柔軟な動きをします。
先ほどのコードで’profiles’というテーブルに対し、先ほど作ったMAPオブジェクトのupdatesを渡しupsertを実行してもらいます。さらにその結果をawaitで待ち、responseに結果が入れられます。
upsertの他にも純粋なupdateやinsertも存在するので、そのうち記事に書きたいです。
実行
ログインをした状態で、「名前変更」の上にあるテキストフィールドに文字を入れて「名前変更」を押すとログイン中のユーザーの名前が変更になります。(別のユーザーの名前を変更する場合は、そのユーザーのemailとパスワードを入れてログインをします)

今回は、下記のようなオペレーションをしてみました。
- test@test.com、test2@test.com、test3@test.comを作成
- test@test.comでログイン、「たなかいちろう」を入れて「名前変更」を押す(上のイメージ)
- test2@test.comでログイン、「すずきじろう」を入れて「名前変更」を押す
- test3@test.comでログイン、「たなかさぶろう」を入れて「名前変更」を押す
supabeseのコンソール画面でデータベースを確認すると、データが入っている事が確認できます。
また、Auth画面で確認できるUser UIDと今回のprofilesテーブルのidに入っているものが同一な事も確認が出来ます。

次のページはこちら