Flutter数据库交互插件nanc_api_supabase的使用

Flutter数据库交互插件nanc_api_supabase的使用

本文将详细介绍如何在Flutter项目中使用nanc_api_supabase插件来与Supabase进行数据库交互。通过该插件,您可以直接从Nanc界面管理Supabase中的所有数据,包括创建新记录、新表以及定义它们之间的关系等。

使用步骤

1. 添加依赖

首先,在您的pubspec.yaml文件中添加nanc_api_supabase依赖:

dependencies:
  nanc_api_supabase: ^1.0.0

然后运行以下命令以安装依赖:

flutter pub get

2. 初始化插件

在Flutter项目的入口文件(如main.dart)中初始化nanc_api_supabase插件,并配置Supabase的相关信息。例如:

import 'package:flutter/material.dart';
import 'package:nanc_api_supabase/nanc_api_supabase.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final supabase = SupabaseClient(
    'https://your-project-id.supabase.co', // 替换为您的Supabase项目URL
    'your-api-key', // 替换为您的Supabase API密钥
  );

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeNancApi();
  }

  Future<void> initializeNancApi() async {
    await NancApi.init(supabase);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nanc API Supabase 示例'),
      ),
      body: Center(
        child: Text('初始化完成!'),
      ),
    );
  }
}

3. 创建新记录

接下来,我们将演示如何使用nanc_api_supabase插件在Supabase中创建新记录。假设我们有一个名为users的表,我们将向该表插入一条新记录。

Future<void> createNewRecord() async {
  try {
    final response = await NancApi.insert(
      table: 'users',
      fields: {
        'name': 'John Doe',
        'email': 'john.doe@example.com',
        'age': 30,
      },
    );
    print('新记录已创建: $response');
  } catch (e) {
    print('创建记录失败: $e');
  }
}

4. 查询数据

现在,我们将展示如何查询Supabase中的数据。例如,查询users表中的所有记录:

Future<void> fetchRecords() async {
  try {
    final response = await NancApi.select(
      table: 'users',
    );
    print('查询结果: $response');
  } catch (e) {
    print('查询失败: $e');
  }
}

5. 更新记录

接下来,我们将演示如何更新Supabase中的现有记录。例如,我们将更新users表中ID为1的记录:

Future<void> updateRecord() async {
  try {
    final response = await NancApi.update(
      table: 'users',
      fields: {'age': 31},
      condition: 'id = 1',
    );
    print('记录已更新: $response');
  } catch (e) {
    print('更新记录失败: $e');
  }
}

6. 删除记录

最后,我们将展示如何删除Supabase中的记录。例如,删除users表中ID为1的记录:

Future<void> deleteRecord() async {
  try {
    final response = await NancApi.delete(
      table: 'users',
      condition: 'id = 1',
    );
    print('记录已删除: $response');
  } catch (e) {
    print('删除记录失败: $e');
  }
}

完整示例代码

import 'package:flutter/material.dart';
import 'package:nanc_api_supabase/nanc_api_supabase.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final supabase = SupabaseClient(
    'https://your-project-id.supabase.co', // 替换为您的Supabase项目URL
    'your-api-key', // 替换为您的Supabase API密钥
  );

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeNancApi();
  }

  Future<void> initializeNancApi() async {
    await NancApi.init(supabase);
  }

  Future<void> createNewRecord() async {
    try {
      final response = await NancApi.insert(
        table: 'users',
        fields: {
          'name': 'John Doe',
          'email': 'john.doe@example.com',
          'age': 30,
        },
      );
      print('新记录已创建: $response');
    } catch (e) {
      print('创建记录失败: $e');
    }
  }

  Future<void> fetchRecords() async {
    try {
      final response = await NancApi.select(
        table: 'users',
      );
      print('查询结果: $response');
    } catch (e) {
      print('查询失败: $e');
    }
  }

  Future<void> updateRecord() async {
    try {
      final response = await NancApi.update(
        table: 'users',
        fields: {'age': 31},
        condition: 'id = 1',
      );
      print('记录已更新: $response');
    } catch (e) {
      print('更新记录失败: $e');
    }
  }

  Future<void> deleteRecord() async {
    try {
      final response = await NancApi.delete(
        table: 'users',
        condition: 'id = 1',
      );
      print('记录已删除: $response');
    } catch (e) {
      print('删除记录失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nanc API Supabase 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: createNewRecord,
              child: Text('创建新记录'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: fetchRecords,
              child: Text('查询记录'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: updateRecord,
              child: Text('更新记录'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: deleteRecord,
              child: Text('删除记录'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter数据库交互插件nanc_api_supabase的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库交互插件nanc_api_supabase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nanc_api_supabase 是一个用于在 Flutter 应用中与 Supabase 数据库进行交互的插件。Supabase 是一个开源的 Firebase 替代品,提供了数据库、身份验证、存储等功能。nanc_api_supabase 插件简化了与 Supabase 的交互过程,使得开发者可以更轻松地在 Flutter 应用中使用 Supabase。

安装 nanc_api_supabase

首先,你需要在 pubspec.yaml 文件中添加 nanc_api_supabase 依赖:

dependencies:
  flutter:
    sdk: flutter
  nanc_api_supabase: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

初始化 Supabase

在使用 nanc_api_supabase 之前,你需要初始化 Supabase 客户端。你可以在 main.dart 文件中进行初始化:

import 'package:flutter/material.dart';
import 'package:nanc_api_supabase/nanc_api_supabase.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Supabase
  await Supabase.initialize(
    url: 'https://your-supabase-url.supabase.co',
    anonKey: 'your-anon-key',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Supabase Demo',
      home: HomeScreen(),
    );
  }
}

使用 nanc_api_supabase 进行数据库操作

1. 查询数据

你可以使用 Supabase.instance.client 来执行查询操作。例如,查询 todos 表中的所有数据:

import 'package:flutter/material.dart';
import 'package:nanc_api_supabase/nanc_api_supabase.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  List<Map<String, dynamic>> todos = [];

  @override
  void initState() {
    super.initState();
    fetchTodos();
  }

  Future<void> fetchTodos() async {
    final response = await Supabase.instance.client.from('todos').select().execute();
    if (response.error == null) {
      setState(() {
        todos = response.data as List<Map<String, dynamic>>;
      });
    } else {
      print('Error fetching todos: ${response.error?.message}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Todos'),
      ),
      body: ListView.builder(
        itemCount: todos.length,
        itemBuilder: (context, index) {
          final todo = todos[index];
          return ListTile(
            title: Text(todo['title']),
            subtitle: Text(todo['description']),
          );
        },
      ),
    );
  }
}

2. 插入数据

你可以使用 insert 方法向表中插入数据:

Future<void> addTodo(String title, String description) async {
  final response = await Supabase.instance.client.from('todos').insert([
    {
      'title': title,
      'description': description,
    }
  ]).execute();

  if (response.error != null) {
    print('Error adding todo: ${response.error?.message}');
  } else {
    fetchTodos(); // 重新获取数据以更新 UI
  }
}

3. 更新数据

你可以使用 update 方法来更新表中的数据:

Future<void> updateTodo(int id, String title, String description) async {
  final response = await Supabase.instance.client.from('todos').update({
    'title': title,
    'description': description,
  }).eq('id', id).execute();

  if (response.error != null) {
    print('Error updating todo: ${response.error?.message}');
  } else {
    fetchTodos(); // 重新获取数据以更新 UI
  }
}

4. 删除数据

你可以使用 delete 方法来删除表中的数据:

Future<void> deleteTodo(int id) async {
  final response = await Supabase.instance.client.from('todos').delete().eq('id', id).execute();

  if (response.error != null) {
    print('Error deleting todo: ${response.error?.message}');
  } else {
    fetchTodos(); // 重新获取数据以更新 UI
  }
}
回到顶部