前のページはこちら
Auth編でユーザー登録、ログイン、ログアウトが出来るようになりました。続いてsupabaseのデータベース操作を行ってみます。
DBテスト用のFlutterコード準備
supabase_repository.dartの準備
supabase_repository.dartに今度は下記をコピペしてください。(DB編から始める方は新しくファイルを作ってください)今後はここに追記していきます。
前回のAuthの完成コードに新しいDBUpdateとDBDataGetメソッド、またデータベース取得時に変換するクラスも追加しています(後で説明します)
import 'package:supabase_flutter/supabase_flutter.dart';
class GetUserData {
String name = '';
DateTime update = DateTime.now();
GetUserData.fromJson(Map<String, dynamic> json)
: name = json['username'],
update = DateTime.parse(json['updated_at']);
}
class SupabaseRepository {
static var AuthuserId = Supabase.instance.client.auth.currentUser;
static List<GetUserData> getUserDatas = [];
static Future<bool> SignUp({email, pass}) async {
var test = Supabase.instance.client.auth.currentUser;
try {
var supabaseAuth = Supabase.instance.client.auth;
var response = await supabaseAuth.signUp(email, pass);
if (response.error != null) {
print("エラーです" + response.error!.message);
throw new Exception(response.error);
}
print('アカウントが生成できました${response.user!.id}');
return true;
} catch (e) {
return false;
}
}
static Future<bool> LogIn({email, pass}) async {
try {
var supabaseAuth = Supabase.instance.client.auth;
var response = await supabaseAuth.signIn(email: email, password: pass);
if (response.error != null) {
print("エラーです" + response.error!.message);
throw new Exception(response.error);
}
return true;
} catch (e) {
return false;
}
}
static Future<bool> LogOut() async {
try {
var supabaseAuth = Supabase.instance.client.auth;
var response = await supabaseAuth.signOut();
if (response.error != null) {
print("エラーです" + response.error!.message);
throw new Exception(response.error);
}
return true;
} catch (e) {
return false;
}
}
static Future<bool> DBUpdate({name}) async {
return true;
}
static Future<bool> DBDataGet({findString}) async {
return true;
}
}
auth_page_view.dartの準備
テスト用の外観であるauth_page_view.dartはこちらをコピペしてください。
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'supabase_repository.dart';
class AuthPageView extends StatefulWidget {
const AuthPageView({Key? key}) : super(key: key);
@override
_AuthPageViewState createState() => _AuthPageViewState();
}
class _AuthPageViewState extends State<AuthPageView> {
TextEditingController _emailController = TextEditingController();
TextEditingController _passController = TextEditingController();
TextEditingController _nameController = TextEditingController();
//Supabase.instance.client.auth.currentUser!.email;
Widget build(BuildContext context) {
return ListView(
padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 12),
children: [
const SizedBox(height: 18),
Text('${Supabase.instance.client.auth.currentUser?.email}'),
const SizedBox(height: 18),
TextFormField(
controller: _emailController,
decoration: const InputDecoration(labelText: 'Email'),
),
TextFormField(
controller: _passController,
decoration: const InputDecoration(labelText: 'Pass'),
),
const SizedBox(height: 18),
ElevatedButton(
onPressed: () async {
var _res = await SupabaseRepository.LogIn(
email: _emailController.text,
pass: _passController.text,
);
print('ログイン終了');
setState(() {});
},
child: Text('ログイン'),
),
const SizedBox(height: 18),
ElevatedButton(
onPressed: () async {
var _res = await SupabaseRepository.SignUp(
email: _emailController.text,
pass: _passController.text,
);
print('アカウント作成終了');
},
child: Text('アカウント作成'),
),
const SizedBox(height: 18),
ElevatedButton(
onPressed: () async {
var _res = await SupabaseRepository.LogOut();
print('ログアウト');
setState(() {});
},
child: Text('ログアウト'),
),
const SizedBox(height: 30),
TextFormField(
controller: _nameController,
decoration:
const InputDecoration(labelText: '変更する名前(ログイン後)もしくは名前検索文字列'),
),
const SizedBox(height: 18),
ElevatedButton(
onPressed: () async {
var _res = await SupabaseRepository.DBUpdate(
name: _nameController.text,
);
print('作成終了');
},
child: Text('名前変更'),
),
const SizedBox(height: 30),
ElevatedButton(
onPressed: () async {
var _res = await SupabaseRepository.DBDataGet(
findString: _nameController.text,
);
print('データゲット完了');
setState(() {});
},
child: Text('データゲット'),
),
Column(
children: SupabaseRepository.getUserDatas
.map((GetUserData item) => Row(
children: [
Text(item.name),
Text(':'),
Text(item.update.toString()),
],
))
.toList())
],
);
}
}main.dart
main.dartはAuth編と変わりません。下記のコードとなります。
「url」と「anonKey」は自分のAPIURLとAPIキーを入れます。
自分のAPIURLと自分のAPIキーの確認方法はこちらです → APIキーとAPIURL(ソースコードをgitにアップする方は要注意の部分も必ず読んでください)
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'auth_page_view.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
!!確認:gitにアップする方は、これらの情報がgitにアップされない形に必ずしてください。
url: あなたのAPIURLを''で囲った文字列として入力します,
anonKey:
あなたのAPIキーを''で囲った文字列として入力します,
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('flutterとsupabase')),
body: AuthPageView(),
),
);
}
}
実行
このような画面になります。

次のページはこちら