Flutter Firebase集成插件simple_firebase的使用

Flutter Firebase集成插件simple_firebase的使用

Feature Overview

组件 支持平台 支持方法
Authentication iOS, Android, Web, Windows* Email/Password, Google Sign-In, 注册, 登出
Firestore iOS, Android, Web, Windows* 创建, 读取, 更新, 删除, 实时观察更改
Realtime DB iOS, Android, Web, Windows* 创建, 读取, 更新, 删除, 实时观察更改
Storage iOS, Android, Web, Windows* 单个/多个图像上传, 获取下载URL, 检查文件是否存在

*部分功能可能存在问题,主要是在开始观察Firestore值时会打印警告。

Web对Realtime Database的支持未由Firebase默认提供,因此需要手动进行数据拉取。仅在必要时使用,并注意刷新时间。


配置

在使用Firebase简化器之前,请确保您的Firebase项目已正确设置并配置到Flutter应用程序中。

1. Firebase项目设置

创建一个Firebase项目:

  • 导航到Firebase控制台
  • 点击“添加项目”,然后按照提示创建新项目。

启用Firebase服务:

  • 认证:转到构建 > 认证并启用所需的登录方式(例如Email/Password, Google)。
  • Firestore:导航至构建 > Firestore数据库并创建数据库。
  • 实时数据库:转到构建 > 实时数据库并设置您的数据库。
  • 存储:导航至构建 > 存储并配置您的存储桶。

2. 添加Firebase配置文件

Android:

  • 在Firebase控制台中,转到项目设置 > 通用 > 您的应用 > 添加应用 > Android
  • 注册您的应用并下载google-services.json文件。
  • google-services.json文件放置在Flutter项目的android/app/目录下。

iOS:

  • 在Firebase控制台中,转到项目设置 > 通用 > 您的应用 > 添加应用 > iOS
  • 注册您的应用并下载GoogleService-Info.plist文件。
  • GoogleService-Info.plist文件放置在Flutter项目的ios/Runner/目录下。

3. 在您的应用中初始化Firebase

在您的main.dart中,在运行应用之前初始化Firebase:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_simplifier/firebase_simplifier.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firebase Simplifier Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

使用

Firebase简化器提供了各种实用工具来无缝管理Firebase服务。以下是每个服务的详细使用说明。


认证

Email & Password

import 'package:firebase_simplifier/firebase_simplifier.dart';
import 'package:firebase_auth/firebase_auth.dart';

// 初始化Auth助手
final Auth auth = Auth();

// 使用邮箱和密码登录
auth.signInWithEmail(email, password).then((user) => print(user?.email ?? '登录失败'));

// 注册新用户
auth.registerWithEmail(email, password).then((user) => print(user?.email ?? '注册失败'));

// 登出
auth.signOut().then((_) => print('用户已登出'));

Google Sign-In

import 'package:firebase_simplifier/firebase_simplifier.dart';
import 'package:firebase_auth/firebase_auth.dart';

// 初始化Auth助手
final Auth auth = Auth();

// 使用Google登录
auth.signInWithGoogle().then((user) => print(user?.email ?? 'Google登录失败'));

Firestore

import 'package:firebase_simplifier/firebase_simplifier.dart';

// 初始化Firestore助手
final SimpleFirestore firestore = SimpleFirestore();

// 向Firestore写入数据
firestore.writeData('collection/doc', data).then((success) => print(success ? '写入成功' : '写入失败'));

// 从Firestore读取数据
firestore.getData('collection/doc').then((data) => print(data ?? '未找到数据'));

// 从Firestore删除数据
firestore.deleteData('collection/doc').then((success) => print(success ? '删除成功' : '删除失败'));

// 创建唯一文档
firestore.createUniqueDocument('collection', data).then((docId) => print(docId ?? '创建失败'));

Realtime Database (RTDB)

import 'package:firebase_simplifier/firebase_simplifier.dart';
import 'package:firebase_auth/firebase_auth.dart';

// 初始化RTDB助手
final RTDB rtdb = RTDB(currentUser, 'https://your-database-url.firebaseio.com/');

// 向RTDB写入数据
rtdb.writeData('path', data).then((success) => print(success ? '写入成功' : '写入失败'));

// 从RTDB读取数据
rtdb.getData('path').then((data) => print(data ?? '未找到数据'));

// 更新RTDB中的数据
rtdb.updateData('path', data).then((success) => print(success ? '更新成功' : '更新失败'));

// 从RTDB删除数据
rtdb.deleteData('path').then((success) => print(success ? '删除成功' : '删除失败'));

// 观察RTDB中的实时数据变化
rtdb.observeRealtimeDBValue('path').then((notifier) => notifier.addListener(() => print(notifier.value)));

Firebase Storage

import 'package:firebase_simplifier/firebase_simplifier.dart';
import 'dart:io';

// 初始化Storage助手
final BucketStorage storage = BucketStorage();

// 上传单个图像
storage.uploadImage(file, userId).then((url) => print(url ?? '上传失败'));

// 上传多个图像
storage.uploadMultipleImages(files, userId).then((urls) => print(urls));

// 获取图像的下载URL
storage.getImageUrl('path').then((url) => print(url ?? '未找到URL'));

// 检查文件是否存在
storage.checkIfFileExists('path').then((exists) => print(exists ? '文件存在' : '文件不存在'));

// 使用ImagePicker选择图像
storage.pickImages().then((images) => print(images.isNotEmpty ? '已选择图像' : '未选择任何图像'));

示例

以下是一些演示如何在Flutter应用程序中使用Firebase简化器的示例实现。

示例1:认证流程

import 'package:flutter/material.dart';
import 'package:firebase_simplifier/firebase_simplifier.dart';
import 'package:firebase_auth/firebase_auth.dart';

class AuthExamplePage extends StatefulWidget {
  const AuthExamplePage({Key? key}) : super(key: key);

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

class _AuthExamplePageState extends State<AuthExamplePage> {
  final Auth _auth = Auth();
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  User? _user;

  @override
  void initState() {
    super.initState();
    _user = _auth.getCurrentUser();
  }

  Future<void> _signIn() async {
    User? user = await _auth.signInWithEmail(
      _emailController.text,
      _passwordController.text,
    );
    setState(() {
      _user = user;
    });
  }

  Future<void> _register() async {
    User? user = await _auth.registerWithEmail(
      _emailController.text,
      _passwordController.text,
    );
    setState(() {
      _user = user;
    });
  }

  Future<void> _signOut() async {
    await _auth.signOut();
    setState(() {
      _user = null;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('认证示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: _user == null
              ? Column(
                  children: [
                    TextField(
                      controller: _emailController,
                      decoration: InputDecoration(labelText: '邮箱'),
                    ),
                    TextField(
                      controller: _passwordController,
                      decoration: InputDecoration(labelText: '密码'),
                      obscureText: true,
                    ),
                    ElevatedButton(
                      onPressed: _signIn,
                      child: Text('登录'),
                    ),
                    ElevatedButton(
                      onPressed: _register,
                      child: Text('注册'),
                    ),
                  ],
                )
              : Column(
                  children: [
                    Text('已登录为 ${_user!.email}'),
                    ElevatedButton(
                      onPressed: _signOut,
                      child: Text('登出'),
                    ),
                  ],
                ),
        ));
  }
}

示例2:Firestore CRUD操作

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

class FirestoreExamplePage extends StatefulWidget {
  const FirestoreExamplePage({Key? key}) : super(key: key);

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

class _FirestoreExamplePageState extends State<FirestoreExamplePage> {
  final SimpleFirestore _firestore = SimpleFirestore();
  final String _collection = 'users';
  final String _docId = 'user123';
  Map<String, dynamic>? _userData;

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

  Future<void> _fetchUserData() async {
    Map<String, dynamic>? data = await _firestore.getData('$_collection/$_docId');
    setState(() {
      _userData = data;
    });
  }

  Future<void> _createOrUpdateUser() async {
    Map<String, dynamic> data = {
      'name': 'John Doe',
      'age': 30,
      'email': 'john.doe@example.com',
    };
    bool success = await _firestore.writeData('$_collection/$_docId', data);
    if (success) {
      print('用户数据写入成功。');
      _fetchUserData();
    } else {
      print('写入用户数据失败。');
    }
  }

  Future<void> _deleteUser() async {
    bool success = await _firestore.deleteData('$_collection/$_docId');
    if (success) {
      print('用户数据删除成功。');
      setState(() {
        _userData = null;
      });
    } else {
      print('删除用户数据失败。');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Firestore示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              _userData != null
                  ? Text('用户数据: $_userData')
                  : Text('无用户数据可用。'),
              ElevatedButton(
                onPressed: _createOrUpdateUser,
                child: Text('创建/更新用户'),
              ),
              ElevatedButton(
                onPressed: _deleteUser,
                child: Text('删除用户'),
              ),
            ],
          ),
        ));
  }
}

文档

包内提供了全面的文档以帮助您理解和充分利用其潜力。每个类和方法都有详细的文档,包含参数、返回值和使用示例的解释。

类及其职责

  • Auth: 处理Firebase认证任务,包括邮箱/密码和Google登录、注册、登出和密码重置。
  • SimpleFirestore: 简化Firestore操作,如读取、写入、更新、删除文档和观察实时更改。
  • RTDB: 管理Realtime Database操作,具有速率限制、CRUD功能和实时数据观察。
  • BucketStorage: 促进Firebase存储操作,包括上传单个/多个图像、获取下载URL和文件管理。

入门指南

  1. 初始化Firebase: 确保在main.dart中初始化Firebase。
  2. 配置Firebase: 添加必要的配置文件(google-services.json, GoogleService-Info.plist)。
  3. 使用助手类: 实例化并使用助手类(Auth, SimpleFirestore, RTDB, BucketStorage),如使用示例所示。

有关详细API引用,请参阅每个类文件中的内联文档。


贡献

欢迎贡献!如果您发现错误或有功能请求,请打开问题或提交拉取请求。

贡献步骤

  1. Fork仓库。
  2. 创建新分支:
    git checkout -b feature/YourFeatureName
    
  3. 提交更改:
    git commit -m "添加您的消息"
    
  4. 推送到分支:
    git push origin feature/YourFeatureName
    

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

1 回复

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


simple_firebase 是一个简化 Flutter 与 Firebase 集成的插件。它旨在减少样板代码,提供更简洁的 API 来使用 Firebase 的核心功能,如身份验证、Firestore 数据库、实时数据库、存储等。

以下是如何在 Flutter 项目中使用 simple_firebase 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  simple_firebase: ^0.0.1  # 请检查最新版本

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

2. 初始化 Firebase

在使用 Firebase 之前,你需要在 Flutter 项目中初始化 Firebase。通常,这一步在 main.dart 文件中完成。

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

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

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

3. 使用 Firebase 功能

simple_firebase 提供了简化的 API 来使用 Firebase 的各种功能。以下是一些常见的使用示例:

3.1 身份验证

simple_firebase 提供了简化的身份验证 API,例如登录、注册、注销等。

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

class AuthPage extends StatelessWidget {
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  Future<void> _signIn() async {
    try {
      await SimpleFirebaseAuth.signInWithEmailAndPassword(
        email: _emailController.text,
        password: _passwordController.text,
      );
      print('User signed in successfully');
    } catch (e) {
      print('Error signing in: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sign In'),
      ),
      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: _signIn,
              child: Text('Sign In'),
            ),
          ],
        ),
      ),
    );
  }
}

3.2 Firestore 数据库

simple_firebase 提供了简化的 Firestore API,用于读取和写入数据。

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

class FirestorePage extends StatelessWidget {
  final _nameController = TextEditingController();
  final _ageController = TextEditingController();

  Future<void> _addUser() async {
    try {
      await SimpleFirestore.collection('users').add({
        'name': _nameController.text,
        'age': int.parse(_ageController.text),
      });
      print('User added successfully');
    } catch (e) {
      print('Error adding user: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Add User'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _nameController,
              decoration: InputDecoration(labelText: 'Name'),
            ),
            TextField(
              controller: _ageController,
              decoration: InputDecoration(labelText: 'Age'),
              keyboardType: TextInputType.number,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _addUser,
              child: Text('Add User'),
            ),
          ],
        ),
      ),
    );
  }
}

3.3 实时数据库

simple_firebase 也支持 Firebase 实时数据库的操作。

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

class RealtimeDatabasePage extends StatelessWidget {
  final _messageController = TextEditingController();

  Future<void> _sendMessage() async {
    try {
      await SimpleRealtimeDatabase.ref('messages').push().set({
        'text': _messageController.text,
        'timestamp': DateTime.now().toIso8601String(),
      });
      print('Message sent successfully');
    } catch (e) {
      print('Error sending message: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Send Message'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _messageController,
              decoration: InputDecoration(labelText: 'Message'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _sendMessage,
              child: Text('Send Message'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部