Flutter Firebase核心功能集成插件inqvine_core_firebase的使用

Flutter Firebase核心功能集成插件inqvine_core_firebase的使用

inqvine_core_firebase 提供了与常见的 Firebase 服务无缝集成的功能。

平台支持

Android iOS MacOS Web Windows Linux
✔️ ✔️ ✔️ ✔️

开始使用

首先,按照以下教程配置您的项目以使用 Firebase。

https://codelabs.developers.google.com/codelabs/flutter-firebase#0

接下来,在您的 main.dart 文件中,在调用 [inqvine.registerInqvineServices] 之后,调用 [inqvineFirebase.registerInqvineFirebaseServices] 来注册所有服务在您的定位器中。

配置

  • 要使用 [InqvineAuthService.loginWithEmailAndPassword],您必须在 Firebase 中启用此身份验证提供程序。
  • 要使用 [InqvineAdminService],您需要启用 cloud_firestore 并在名为 admin_users 的集合中为用户创建一个文档。
Inqvine Admin Service 规则

要启用 [InqvineAdminService],请将以下内容添加到您的 firestore.rules 文件中。

function isAdminUser() {
    return isLoggedIn() && exists(/databases/$(database)/documents/admin_users/$(request.auth.uid));
}

match /admin_users/{document} {
    allow read: if isAdminUser() || request.resource.data.name == request.auth.uid;
    allow write: if false;
}
Inqvine System Service 规则

要启用 [InqvineSystemService],请将以下内容添加到您的 firestore.rules 文件中。

match /system_status/{document} {
    allow read: if true;
    allow write: if false;
}

Inqvine Auth Service

  • logout(断开与 Firebase 的连接并设置当前用户为 null)
  • loginWithEmailAndPassword(使用用户的电子邮件和密码进行身份验证)
  • signUpWithEmailPassword(使用用户的电子邮件和密码创建用户)

Inqvine Admin Service

  • isAdmin(用户是否在 admin_user 集合中存在记录)

Inqvine System Service

  • applicationStatus(系统的当前状态)
  • downtimeBuilder(当应用程序离线时构建覆盖层,如果您的基本框架包装在 [InqvineDowntimeOverlay] 中)

完整示例 Demo

以下是一个完整的示例,演示如何使用 inqvine_core_firebase 插件。

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

void main() async {
  // 初始化 Firebase
  WidgetsFlutterBinding.ensureInitialized();
  await inqvine.registerInqvineServices();
  await inqvineFirebase.registerInqvineFirebaseServices();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  // 登录
                  final result = await InqvineAuthService.loginWithEmailAndPassword(
                    email: 'test@example.com',
                    password: 'password123',
                  );
                  print(result);
                },
                child: Text('Login'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // 注册
                  final result = await InqvineAuthService.signUpWithEmailPassword(
                    email: 'test@example.com',
                    password: 'password123',
                  );
                  print(result);
                },
                child: Text('Sign Up'),
              ),
              ElevatedButton(
                onPressed: () async {
                  // 获取系统状态
                  final status = await InqvineSystemService.applicationStatus();
                  print(status);
                },
                child: Text('Get Application Status'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter Firebase核心功能集成插件inqvine_core_firebase的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Firebase核心功能集成插件inqvine_core_firebase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


inqvine_core_firebase 是一个用于集成 Firebase 核心功能的 Flutter 插件。它简化了 Firebase 在 Flutter 应用中的集成,并提供了一些常用的功能,如身份验证、云存储、实时数据库、Firestore、云消息传递等。

以下是如何在 Flutter 项目中使用 inqvine_core_firebase 插件的步骤和核心功能:


1. 添加依赖

pubspec.yaml 文件中添加 inqvine_core_firebase 依赖:

dependencies:
  flutter:
    sdk: flutter
  inqvine_core_firebase: ^latest_version

运行 flutter pub get 以安装依赖。


2. 配置 Firebase

在使用 inqvine_core_firebase 之前,需要先在 Firebase 控制台中创建项目并配置 Flutter 应用。

Android 配置

  1. android/app 目录下找到 build.gradle 文件,确保 minSdkVersion 至少为 21。
  2. 下载 google-services.json 文件并将其放在 android/app 目录下。

iOS 配置

  1. 在 Xcode 中打开 iOS 项目。
  2. 下载 GoogleService-Info.plist 文件并将其添加到 ios/Runner 目录下。

3. 初始化 Firebase

main.dart 中初始化 Firebase:

import 'package:inqvine_core_firebase/inqvine_core_firebase.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await InqvineCoreFirebase.initialize(); // 初始化 Firebase
  runApp(MyApp());
}

4. 使用核心功能

inqvine_core_firebase 提供了以下核心功能:

a. 身份验证 (Authentication)

  • 用户注册、登录、注销:
final authService = InqvineCoreFirebase.authentication;

// 注册用户
await authService.registerWithEmailAndPassword(email: 'user@example.com', password: 'password123');

// 登录用户
await authService.signInWithEmailAndPassword(email: 'user@example.com', password: 'password123');

// 注销用户
await authService.signOut();

b. 实时数据库 (Realtime Database)

  • 读取和写入数据:
final databaseService = InqvineCoreFirebase.database;

// 写入数据
await databaseService.setData(path: 'users/user1', data: {'name': 'John Doe', 'age': 25});

// 读取数据
final data = await databaseService.getData(path: 'users/user1');
print(data);

c. Firestore

  • 添加和查询文档:
final firestoreService = InqvineCoreFirebase.firestore;

// 添加文档
await firestoreService.addDocument(collection: 'users', data: {'name': 'Jane Doe', 'age': 30});

// 查询文档
final documents = await firestoreService.getDocuments(collection: 'users');
print(documents);

d. 云存储 (Cloud Storage)

  • 上传和下载文件:
final storageService = InqvineCoreFirebase.storage;

// 上传文件
final file = File('path/to/local/file.txt');
await storageService.uploadFile(path: 'uploads/file.txt', file: file);

// 下载文件
final url = await storageService.getDownloadUrl(path: 'uploads/file.txt');
print(url);

e. 云消息传递 (Cloud Messaging)

  • 接收消息:
final messagingService = InqvineCoreFirebase.messaging;

// 获取 FCM Token
final token = await messagingService.getToken();
print('FCM Token: $token');

// 监听消息
messagingService.onMessage.listen((message) {
  print('Received message: $message');
});

5. 处理错误

在使用 Firebase 功能时,可能会遇到错误。可以通过 try-catch 捕获并处理异常:

try {
  await authService.registerWithEmailAndPassword(email: 'user@example.com', password: 'password123');
} catch (e) {
  print('Error: $e');
}

6. 示例代码

以下是一个完整的示例,展示如何使用 inqvine_core_firebase 进行用户注册和登录:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await InqvineCoreFirebase.initialize();
  runApp(MyApp());
}

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

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

class _FirebaseAuthExampleState extends State<FirebaseAuthExample> {
  final authService = InqvineCoreFirebase.authentication;
  final emailController = TextEditingController();
  final passwordController = TextEditingController();

  Future<void> _register() async {
    try {
      await authService.registerWithEmailAndPassword(
        email: emailController.text,
        password: passwordController.text,
      );
      print('User registered successfully');
    } catch (e) {
      print('Error: $e');
    }
  }

  Future<void> _login() async {
    try {
      await authService.signInWithEmailAndPassword(
        email: emailController.text,
 password: passwordController.text,
      );
      print('User logged in successfully');
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Firebase Auth Example')),
      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: _register,
              child: Text('Register'),
            ),
            ElevatedButton(
              onPressed: _login,
              child: Text('Login'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部