gizumo-oss / yamabico

音声コンテンツ配信サービスプラットフォーム
MIT License
2 stars 0 forks source link

Flutter x Supabase連携 #46

Open Takayyz opened 3 days ago

Takayyz commented 3 days ago
連携手順:AI問い合わせ結果

Supabaseを利用してFlutterアプリを開発するための手順をわかりやすく説明します。Supabaseは、Firebaseのオープンソースの代替として広く利用されています。以下に、FlutterアプリでSupabaseを利用するための基本的な手順を示します。 ### 前提条件 - DartとFlutter SDKがインストールされていること - Supabaseアカウントが作成されていること - 新しいFlutterプロジェクトが作成されていること ### 1. Supabaseプロジェクトのセットアップ 1. [Supabaseのウェブサイト](https://supabase.io/)にアクセスし、アカウントにログインします。 2. 「New Project」をクリックして新しいプロジェクトを作成します。 3. プロジェクトの詳細を入力し、「Create new project」をクリックします。 4. プロジェクトが作成されたら、プロジェクトの「API」タブに移動し、`URL`と`anon key`をメモしておきます。これらはFlutterアプリで必要になります。 ### 2. Flutterプロジェクトにsupabase_flutterパッケージを追加 1. `pubspec.yaml`ファイルを開き、以下の依存関係を追加します。 ```yaml dependencies: flutter: sdk: flutter supabase_flutter: ^2.5.6 # 最新バージョンを確認してください ``` 2. 依存関係をインストールします。 ```sh flutter pub get ``` ### 3. Supabaseの初期化 1. `lib/main.dart`ファイルを開き、Supabaseを初期化します。 ```dart import 'package:flutter/material.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Supabase.initialize( url: 'YOUR_SUPABASE_URL', anonKey: 'YOUR_SUPABASE_ANON_KEY', ); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Supabase Example', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Supabase Example'), ), body: Center( child: Text('Welcome to Supabase with Flutter!'), ), ); } } ``` ### 4. 認証の実装 1. Supabaseの認証を実装します。例えば、ユーザーのサインアップとログイン機能を追加します。 ```dart import 'package:flutter/material.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class AuthPage extends StatefulWidget { @override _AuthPageState createState() => _AuthPageState(); } class _AuthPageState extends State { final SupabaseClient supabase = Supabase.instance.client; final TextEditingController _emailController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); void _signUp() async { final response = await supabase.auth.signUp( _emailController.text, _passwordController.text, ); if (response.error == null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Signed up successfully! Please check your email to confirm.')), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Error: ${response.error!.message}')), ); } } void _signIn() async { final response = await supabase.auth.signIn( email: _emailController.text, password: _passwordController.text, ); if (response.error == null) { Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => MyHomePage()), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Error: ${response.error!.message}')), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Supabase Auth'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ TextField( controller: _emailController, decoration: InputDecoration(labelText: 'Email'), ), TextField( controller: _passwordController, decoration: InputDecoration(labelText: 'Password'), obscureText: true, ), SizedBox(height: 20), ElevatedButton( onPressed: _signUp, child: Text('Sign Up'), ), ElevatedButton( onPressed: _signIn, child: Text('Sign In'), ), ], ), ), ); } } ``` ### 5. データベースとの連携 1. Supabaseのデータベースとやり取りするためのコードを追加します。例えば、ユーザーのプロフィール情報を取得する例を示します。 ```dart import 'package:flutter/material.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class ProfilePage extends StatefulWidget { @override _ProfilePageState createState() => _ProfilePageState(); } class _ProfilePageState extends State { final SupabaseClient supabase = Supabase.instance.client; Map? profile; @override void initState() { super.initState(); _getProfile(); } void _getProfile() async { final response = await supabase .from('profiles') .select() .eq('id', supabase.auth.currentUser?.id) .single() .execute(); if (response.error == null && response.data != null) { setState(() { profile = response.data; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Profile'), ), body: profile == null ? Center(child: CircularProgressIndicator()) : Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Email: ${profile!['email']}'), SizedBox(height: 10), Text('Username: ${profile!['username']}'), ], ), ), ); } } ``` ### 6. 実行とデバッグ 1. アプリケーションを実行して、Supabaseとの連携が正常に行われていることを確認します。 ```sh flutter run ``` 以上が、FlutterアプリでSupabaseを利用するための基本的な手順です。Supabaseを使うことで、データベース、認証、リアルタイム機能などを簡単に統合できます。

Takayyz commented 3 days ago

🚀 仮実装 feature/#46

https://github.com/gizumo-oss/yamabico/assets/26898313/3327a37e-b5ac-4a2a-b0b9-612bbb0bf3b0