Интеграция Firebase

Firebase — это платформа для разработки мобильных и веб-приложений, предоставляемая Google. В этом разделе будет рассказано, как интегрировать Firebase во Flutter.


Обзор Firebase

Firebase предоставляет разнообразные серверные сервисы, включая аутентификацию, базу данных, хранилище, аналитику и многое другое.

СервисыОписание
Firebase AuthАутентификация пользователя
Cloud FirestoreОблачная база данных NoSQL
Realtime DatabaseRealtime Database
Cloud StorageОблачное файловое хранилище
Firebase AnalyticsАналитика данных приложения
Облачные функцииОблачные бессерверные функции

Установка и настройка

Добавить зависимость

dependencies:
  firebase_core: ^2.0.0
  firebase_auth: ^4.0.0
  cloud_firestore: ^4.0.0

Инициализация Firebase

Пример: инициализация Firebase

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

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

  // Инициализация Firebase
  await Firebase.initializeApp();

  runApp(const MyApp());
}

Firebase Auth - аутентификация пользователя

Пример: вход по электронной почте и паролю

import 'package:firebase_auth/firebase_auth.dart';

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  // Регистрация
  Future<User?> registerWithEmail(String email, String password) async {
    try {
      final credential = await _auth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );
      return credential.user;
    } on FirebaseAuthException catch (e) {
      print('Регистрация не удалась: ${e.message}');
      return null;
    }
  }

  // Вход
  Future<User?> signInWithEmail(String email, String password) async {
    try {
      final credential = await _auth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      return credential.user;
    } on FirebaseAuthException catch (e) {
      print('Ошибка входа: ${e.message}');
      return null;
    }
  }

  // Выход
  Future<void> signOut() async {
    await _auth.signOut();
  }

  // Отслеживать статус входа
  Stream<User?> get authStateChanges {
    return _auth.authStateChanges();
  }
}

Cloud Firestore - База данных

Пример: основные операции Firestore

import 'package:cloud_firestore/cloud_firestore.dart';

class FirestoreService {
  final FirebaseFirestore _db = FirebaseFirestore.instance;

  // Добавить документ
  Future<void> addUser(Map<String, dynamic> user) async {
    await _db.collection('users').add(user);
    // Или указать ID
    // await _db.collection('users').doc('user_id').set(user);
  }

  // Получить один документ
  Future<Map<String, dynamic>?> getUser(String id) async {
    final doc = await _db.collection('users').doc(id).get();
    return doc.data();
  }

  // Получить все документы в коллекции
  Future<List<Map<String, dynamic>>> getUsers() async {
    final snapshot = await _db.collection('users').get();
    return snapshot.docs.map((doc) => doc.data()).toList();
  }

  // Условный запрос
  Future<List<Map<String, dynamic>>> getUsersByAge(int age) async {
    final snapshot = await _db
        .collection('users')
        .where('age', isGreaterThanOrEqualTo: age)
        .get();
    return snapshot.docs.map((doc) => doc.data()).toList();
  }

  // Обновить документ
  Future<void> updateUser(String id, Map<String, dynamic> data) async {
    await _db.collection('users').doc(id).update(data);
  }

  // Удалить документ
  Future<void> deleteUser(String id) async {
    await _db.collection('users').doc(id).delete();
  }

  // Слушатель в реальном времени
  Stream<QuerySnapshot> watchUsers() {
    return _db.collection('users').snapshots();
  }
}

Firebase Storage - Файловое хранилище

Пример: загрузка файла

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

class StorageService {
  final FirebaseStorage _storage = FirebaseStorage.instance;

  // Загрузить файл
  Future<String?> uploadFile(File file, String path) async {
    try {
      final ref = _storage.ref().child(path);
      final result = await ref.putFile(file);
      return await result.ref.getDownloadURL();
    } on FirebaseException catch (e) {
      print('Ошибка загрузки: ${e.message}');
      return null;
    }
  }

  // URL-адрес для скачивания файла
  Future<String?> getDownloadURL(String path) async {
    try {
      final ref = _storage.ref().child(path);
      return await ref.getDownloadURL();
    } on FirebaseException catch (e) {
      print('Не удалось получить URL: ${e.message}');
      return null;
    }
  }

  // Удалить файл
  Future<void> deleteFile(String path) async {
    await _storage.ref().child(path).delete();
  }
}

Firebase предлагает мощные серверные сервисы и является лучшим выбором для быстрого создания серверной части для приложений Flutter.

Другие расширения