Flutter数据库管理插件fire_flutter_db的使用

Flutter数据库管理插件fire_flutter_db的使用

这个Flutter插件,名为fire_flutter_db,提供了方便且流线化的访问方式来操作Firebase Authentication和Firestore。它简化了诸如通过电子邮件/密码进行用户认证和Google登录的任务,以及常见的Firestore操作,如获取单个文档、获取集合中的所有文档、流式数据更新等。通过其直观的方法,fire_flutter_db旨在通过无缝集成Firebase服务来增强您的开发体验。

特性

认证:

  • 使用电子邮件和密码登录。
  • 使用电子邮件和密码创建新用户。
  • 使用Google认证登录。

Firebase Firestore操作:

  • 通过ID查找单个文档。
  • 查找集合中的所有文档。
  • 从Firestore集合中获取数据流。
  • 从Firestore集合中检索数据。
  • 查找列表中的文档并将其作为数据流返回。

便利功能:

  • 访问当前用户。
  • 认证状态更改的数据流。

开始使用

前提条件

Flutter设置:

确保在系统上安装了Flutter。您可以在官方Flutter网站上找到安装指南。

Firebase账户:

如果您还没有Firebase账户,请创建一个。您可以在Firebase网站上免费注册。

@echo off

echo Firebase Login checking...
call firebase login
echo 添加Firebase插件到Flutter项目...
call firebase init
echo 添加Firebase插件到Flutter项目...
call flutter pub add firebase_core firebase_auth cloud_firestore
echo 运行Flutter项目...
call flutter run

要使用此脚本,请在项目目录中创建一个新的文本文件,命名为firebase_init.bat,并将上述代码粘贴进去。然后,您可以直接从命令行运行此文件以设置Firebase并为您的Flutter项目添加必要的插件。确保在运行此脚本之前已安装并配置好Firebase CLI和Flutter。

使用方法

import 'package:fire_flutter_db/fire_flutter_db.dart';

认证

// 初始化fire_flutter_db实例
final fireFlutterDb = FireFlutterDb();

// 使用电子邮件和密码登录
await fireFlutterDb.signInWithEmailAndPassword(email: 'example@email.com', password: 'password');

// 使用电子邮件和密码创建新用户
await fireFlutterDb.createUserWithEmailAndPassword(email: 'newuser@email.com', password: 'newpassword');

// 使用Google认证登录
await fireFlutterDb.signInWithGoogle();

Firestore操作

// 通过ID获取单个文档
Map<String, dynamic>? document = await fireFlutterDb.findOne('collectionName', 'documentId');

// 获取集合中的所有文档
List<dynamic>? documents = await fireFlutterDb.findAll('collectionName');

// 从Firestore集合中获取数据流
Stream<QuerySnapshot<Map<String, dynamic>>> stream = fireFlutterDb.getStreamData('collectionName');

// 从Firestore集合中检索数据
Map<String, dynamic> data = fireFlutterDb.getData('collectionName');

// 查找列表中的文档并将其作为数据流返回
Stream<List<Map<String, dynamic>>> docStream = fireFlutterDb.findStreamContainingList('collectionName', 'documentId', ['id1', 'id2']);

便利功能

// 访问当前用户
User? currentUser = fireFlutterDb.currentUser;

// 认证状态更改的数据流
Stream<User?> authStream = fireFlutterDb.authStateChanges;

这些示例展示了如何使用fire_flutter_db包执行常见的认证和Firestore操作,从而让开发者更容易地将Firebase服务集成到他们的Flutter应用程序中。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用fire_flutter_db插件来实现基本的认证和Firestore操作。

import 'package:fire_flutter_db/src/components/googleSigninButton.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fire_flutter_db/fire_flutter_db.dart'; // 导入fire_flutter_db包

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final FireFlutterDb _fireFlutterDb = FireFlutterDb(); // 初始化fire_flutter_db实例

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('FlutterFire Example'),
      ),
      body: SafeArea(
        child: Column(
          children: [
            ElevatedButton( // 按钮用于测试登录
              onPressed: () async {
                try {
                  await _fireFlutterDb.signInWithEmailAndPassword(email: 'example@email.com', password: 'password');
                  print("登录成功");
                } catch (e) {
                  print("登录失败: $e");
                }
              },
              child: Text('登录'),
            ),
            ElevatedButton( // 按钮用于测试创建用户
              onPressed: () async {
                try {
                  await _fireFlutterDb.createUserWithEmailAndPassword(email: 'newuser@email.com', password: 'newpassword');
                  print("用户创建成功");
                } catch (e) {
                  print("用户创建失败: $e");
                }
              },
              child: Text('创建用户'),
            ),
            ElevatedButton( // 按钮用于测试获取用户
              onPressed: () {
                User? user = _fireFlutterDb.currentUser;
                print("当前用户: ${user?.email}");
              },
              child: Text('获取当前用户'),
            ),
            ElevatedButton( // 按钮用于测试获取文档
              onPressed: () async {
                try {
                  Map<String, dynamic>? document = await _fireFlutterDb.findOne('collectionName', 'documentId');
                  print("文档: $document");
                } catch (e) {
                  print("获取文档失败: $e");
                }
              },
              child: Text('获取文档'),
            ),
            GoogleSigninButton(
              extraFuntion: null,
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用fire_flutter_db插件进行数据库管理的示例代码。fire_flutter_db是一个用于Flutter的数据库管理插件,虽然这个插件可能不是一个实际存在的库(因为在我最后的知识更新中并没有这个库),但我会基于假设其功能类似于其他流行的Flutter数据库插件(如floorsqflite)来展示一些代码示例。

首先,你需要确保你的pubspec.yaml文件中已经添加了fire_flutter_db依赖(如果它真的存在)。由于我们假设这个库,以下依赖项是假设性的:

dependencies:
  flutter:
    sdk: flutter
  fire_flutter_db: ^x.y.z  # 假设的版本号

然后运行flutter pub get来获取依赖。

数据库模型定义

假设你有一个简单的用户模型:

import 'package:fire_flutter_db/fire_flutter_db.dart';

@Entity(tableName: 'users')
class User {
  @PrimaryKey(autoGenerate: true)
  int? id;
  String name;
  int age;

  User({required this.name, required this.age});
}

数据库配置

接下来,你需要配置数据库:

import 'package:fire_flutter_db/fire_flutter_db.dart';
import 'user_model.dart';  // 假设用户模型在这个文件中

part 'database.g.dart';

@Database(version: 1, tables: [User])
abstract class MyDatabase extends FlutterDatabase {
  // 获取User表的Dao
  UserDao get userDao;
}

生成数据库代码

如果你使用的是像floor这样的库,你需要生成数据库访问对象(DAO)的代码。由于fire_flutter_db是假设的,你可能需要使用类似的构建器来生成代码。通常,你会在pubspec.yaml中添加一个构建器依赖,并在命令行中运行一个构建命令。但这里我们直接假设生成过程已经完成,并且生成了database.g.dart文件。

使用数据库

现在,你可以在你的应用中打开数据库并执行CRUD操作:

import 'package:flutter/material.dart';
import 'package:fire_flutter_db/fire_flutter_db.dart';
import 'database.dart';
import 'user_model.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Fire Flutter DB Example'),
        ),
        body: DatabaseExample(),
      ),
    );
  }
}

class DatabaseExample extends StatefulWidget {
  @override
  _DatabaseExampleState createState() => _DatabaseExampleState();
}

class _DatabaseExampleState extends State<DatabaseExample> {
  late MyDatabase _db;

  @override
  void initState() {
    super.initState();
    // 打开数据库
    _db = $FloorMyDatabase(); // 假设这是生成的数据库实例
    _db.database.open();
  }

  @override
  void dispose() {
    // 关闭数据库
    _db.database.close();
    super.dispose();
  }

  Future<void> insertUser() async {
    final user = User(name: 'John Doe', age: 30);
    await _db.userDao.insert(user);
  }

  Future<List<User>> getUsers() async {
    return _db.userDao.findAll();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: insertUser,
            child: Text('Insert User'),
          ),
          ElevatedButton(
            onPressed: () async {
              final users = await getUsers();
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text('Users: ${users.length}'),
                ),
              );
            },
            child: Text('Get Users'),
          ),
        ],
      ),
    );
  }
}

请注意,上述代码中的$FloorMyDatabase()是一个假设的实例化方法,实际使用中你需要根据fire_flutter_db(或类似库)的文档来正确实例化数据库。

由于fire_flutter_db可能并不实际存在,以上代码是一个基于类似库的假设示例。如果你确实在寻找一个具体的Flutter数据库管理插件,建议查看floorsqflitemoor等流行库。

回到顶部