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

发布于 1周前 作者 ionicwang 来自 Flutter

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

Postgrest Dart

Dart客户端用于PostgREST,这个库的目标是提供一个类似于“ORM”的RESTful接口。

pub package pub test

文档

官方文档可以在Supabase网站上找到:

许可证

本仓库采用MIT许可证。

致谢


使用示例

下面是一个完整的Flutter应用示例,展示了如何使用postgrest插件与PostgREST服务器进行交互。此示例演示了如何连接到Supabase API并执行简单的查询操作。

示例代码

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Postgrest Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Postgrest Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final supabaseUrl = 'https://your-supabase-url.supabase.co'; // 替换为你的Supabase URL
  final supabaseKey = 'your-supabase-key'; // 替换为你的Supabase API Key
  List<dynamic> countries = [];

  Future<void> fetchCountries() async {
    try {
      final client = PostgrestClient(
        '$supabaseUrl/rest/v1',
        headers: {'apikey': supabaseKey},
        schema: 'public',
      );

      final response = await client.from('countries').select();
      setState(() {
        countries = response;
      });
    } on PostgrestException catch (e) {
      // 处理Postgrest错误
      print('Error code: ${e.code}');
      print('Error message: ${e.message}');
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: countries.isNotEmpty
            ? ListView.builder(
                itemCount: countries.length,
                itemBuilder: (context, index) {
                  final country = countries[index];
                  return ListTile(
                    title: Text(country['name']),
                    subtitle: Text(country['capital']),
                  );
                },
              )
            : CircularProgressIndicator(),
      ),
    );
  }
}

说明

  1. 环境准备:确保你已经在Supabase创建了一个项目,并获取了supabaseUrlsupabaseKey

  2. 依赖添加:在pubspec.yaml中添加postgrest依赖:

    dependencies:
      flutter:
        sdk: flutter
      postgrest: ^0.8.0 # 根据实际情况选择版本
    
  3. 运行应用:将上述代码保存为main.dart,并在Flutter环境中运行。该应用会连接到Supabase API,从countries表中获取数据,并显示在屏幕上。

错误处理

在实际开发中,建议对API调用进行更详细的错误处理,包括但不限于网络异常、权限问题等。你可以根据业务需求调整错误处理逻辑。

希望这个示例能帮助你更好地理解和使用postgrest插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用postgrest插件与PostgreSQL数据库进行交互的代码案例。postgrest插件允许你通过PostgREST API与PostgreSQL数据库进行RESTful交互。

首先,确保你已经在你的pubspec.yaml文件中添加了postgrest依赖项:

dependencies:
  flutter:
    sdk: flutter
  postgrest: ^x.y.z  # 请替换为最新版本号

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

1. 配置PostgREST客户端

你需要创建一个PostgREST客户端实例,通常在你的应用启动时进行配置。

import 'package:postgrest/postgrest.dart';
import 'package:dart_http_client/dart_http_client.dart';

PostgrestClient client;

void configurePostgrestClient() {
  final httpClient = HttpClient();
  client = PostgrestClient(
    httpClient,
    baseUrl: Uri.parse('https://your-postgrest-endpoint.com'),
    headers: {
      'Authorization': 'Bearer your-auth-token',  // 根据你的认证机制调整
      'Content-Type': 'application/json',
      'Accept': 'application/vnd.pgrst.object+json',
    },
  );
}

2. 查询数据

下面是一个从数据库中查询数据的例子。假设我们有一个名为users的表。

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

void fetchUsers() async {
  try {
    final response = await client.from('users').select().execute();
    final users = response.data;
    print(users);  // 打印查询结果
  } catch (e) {
    print('Error fetching users: $e');
  }
}

3. 插入数据

插入数据的操作如下。我们假设users表有nameemail两个字段。

void insertUser() async {
  try {
    final newUser = {
      'name': 'John Doe',
      'email': 'john.doe@example.com',
    };
    final response = await client.from('users').insert(newUser).execute();
    print('Inserted user ID: ${response.data[0]['id']}');
  } catch (e) {
    print('Error inserting user: $e');
  }
}

4. 更新数据

更新数据的操作如下。我们假设我们要更新users表中某个用户的email字段。

void updateUserEmail() async {
  try {
    final userIdToUpdate = 1;  // 替换为实际的用户ID
    final updatedFields = {
      'email': 'john.newemail@example.com',
    };
    final response = await client
      .from('users')
      .eq('id', userIdToUpdate)
      .update(updatedFields)
      .execute();
    print('Updated user: ${response.data}');
  } catch (e) {
    print('Error updating user email: $e');
  }
}

5. 删除数据

删除数据的操作如下。我们假设我们要删除users表中某个用户。

void deleteUser() async {
  try {
    final userIdToDelete = 1;  // 替换为实际的用户ID
    final response = await client
      .from('users')
      .eq('id', userIdToDelete)
      .delete()
      .execute();
    print('Deleted user: ${response.statusCode}');
  } catch (e) {
    print('Error deleting user: $e');
  }
}

6. 在Flutter UI中调用这些方法

你可以在你的Flutter UI中调用这些方法,例如在按钮点击事件中:

void _onFetchUsersButtonPressed() {
  fetchUsers();
}

void _onInsertUserButtonPressed() {
  insertUser();
}

// 其他按钮点击事件...

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('PostgREST Flutter Example'),
    ),
    body: Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        children: [
          ElevatedButton(
            onPressed: _onFetchUsersButtonPressed,
            child: Text('Fetch Users'),
          ),
          ElevatedButton(
            onPressed: _onInsertUserButtonPressed,
            child: Text('Insert User'),
          ),
          // 其他按钮...
        ],
      ),
    ),
  );
}

确保你在应用启动时调用configurePostgrestClient方法以配置PostgREST客户端。

注意事项

  1. 安全性:不要在客户端代码中硬编码敏感信息,如API密钥或数据库凭据。考虑使用环境变量或安全的存储机制。
  2. 错误处理:在生产代码中,你应该有更健壮的错误处理机制,而不是简单地打印错误。
  3. 依赖管理:确保你使用的postgrest插件版本与你的Flutter版本兼容。

希望这个代码案例能帮助你在Flutter中与PostgREST和PostgreSQL进行交互!

回到顶部