Flutter Firebase数据库交互插件firebase_database_repository的使用

Flutter Firebase 数据库交互插件 firebase_database_repository 的使用

Firebase Repository for Flutter

Pub Version

使用此数据库适配器与 database_repository 集成。


使用纯 Dart?

使用 firedart_repository ,因为它不需要 Flutter SDK。


如何安装

dart pub add firebase_database_repository

如何使用

import 'package:firebase_database_repository/firebase_database_repository.dart';
import 'package:firebase_core/firebase_core.dart';

void main() async {
    // 您可以在您的 Firebase 项目设置中找到这些信息
    final myFirebaseConfig = {
        "apiKey": "SECRET",
        "authDomain": "[PROJECT].firebaseapp.com",
        "projectId": "[PROJECT]",
        "storageBucket": "[PROJECT].appspot.com",
        "messagingSenderId": "Foo",
        "appId": "Bar"
    };

    // 初始化 Firebase
    // 这里手动配置以方便理解
    final myFirebaseApp = await Firebase.initializeApp(
        options: FirebaseOptions.fromMap(myFirebaseConfig),
    );

    final myDatabaseAdapter = FirebaseDatabaseAdapter(firebaseApp: myFirebaseApp);
    
    // 注册一个要使用的数据库适配器
    DatabaseAdapterRegistry.register(myDatabaseAdapter);

    final repository = DatabaseRepository.fromRegistry(serializer: mySerializer, name: 'firebase');
    
    // 现在可以使用诸如 create() 等方法
}

完整示例

import 'package:firebase_database_repository/firebase_database_repository.dart';
import 'package:firebase_core/firebase_core.dart';

void main() async {
    // 您可以在您的 Firebase 项目设置中找到这些信息
    final myFirebaseConfig = {
        "apiKey": "SECRET",
        "authDomain": "[PROJECT].firebaseapp.com",
        "projectId": "[PROJECT]",
        "storageBucket": "[PROJECT].appspot.com",
        "messagingSenderId": "Foo",
        "appId": "Bar"
    };

    // 初始化 Firebase
    // 这里手动配置以方便理解
    final myFirebaseApp = await Firebase.initializeApp(
        options: FirebaseOptions.fromMap(myFirebaseConfig),
    );

    final myDatabaseAdapter = FirebaseDatabaseAdapter(firebaseApp: myFirebaseApp);
    
    // 注册一个要使用的数据库适配器
    DatabaseAdapterRegistry.register(myDatabaseAdapter);

    final repository = DatabaseRepository.fromRegistry(serializer: mySerializer, name: 'firebase');
    
    // 现在可以使用诸如 create() 等方法
}

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

1 回复

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


firebase_database_repository 是一个用于简化 Flutter 应用中与 Firebase Realtime Database 交互的插件。它提供了一种更高级别的抽象,使得开发者可以更轻松地进行数据库操作。以下是如何使用 firebase_database_repository 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 firebase_database_repository 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: latest_version
  firebase_database: latest_version
  firebase_database_repository: latest_version

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

2. 初始化 Firebase

在你的 Flutter 应用中,你需要初始化 Firebase。通常这是在 main.dart 文件中完成的:

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

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

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

3. 使用 firebase_database_repository

接下来,你可以在应用中使用 firebase_database_repository 来与 Firebase Realtime Database 进行交互。

创建 FirebaseDatabaseRepository 实例

首先,创建一个 FirebaseDatabaseRepository 实例:

import 'package:firebase_database_repository/firebase_database_repository.dart';

final databaseRepository = FirebaseDatabaseRepository();

读取数据

你可以使用 databaseRepository 来读取数据:

Future<void> readData() async {
  final snapshot = await databaseRepository.read('path/to/data');
  if (snapshot.exists) {
    print(snapshot.value);
  } else {
    print('No data found.');
  }
}

写入数据

你可以使用 databaseRepository 来写入数据:

Future<void> writeData() async {
  await databaseRepository.write('path/to/data', {'key': 'value'});
}

更新数据

你可以使用 databaseRepository 来更新数据:

Future<void> updateData() async {
  await databaseRepository.update('path/to/data', {'key': 'new value'});
}

删除数据

你可以使用 databaseRepository 来删除数据:

Future<void> deleteData() async {
  await databaseRepository.delete('path/to/data');
}

4. 监听数据变化

你还可以使用 databaseRepository 来监听数据的变化:

void listenToData() {
  databaseRepository.listen('path/to/data').listen((event) {
    print('Data changed: ${event.snapshot.value}');
  });
}

5. 处理错误

在使用 firebase_database_repository 时,建议你处理可能的错误:

Future<void> safeReadData() async {
  try {
    final snapshot = await databaseRepository.read('path/to/data');
    if (snapshot.exists) {
      print(snapshot.value);
    } else {
      print('No data found.');
    }
  } catch (e) {
    print('Error reading data: $e');
  }
}

6. 示例代码

以下是一个完整的示例代码,展示了如何使用 firebase_database_repository

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final databaseRepository = FirebaseDatabaseRepository();

  Future<void> readData() async {
    try {
      final snapshot = await databaseRepository.read('path/to/data');
      if (snapshot.exists) {
        print(snapshot.value);
      } else {
        print('No data found.');
      }
    } catch (e) {
      print('Error reading data: $e');
    }
  }

  Future<void> writeData() async {
    try {
      await databaseRepository.write('path/to/data', {'key': 'value'});
      print('Data written successfully.');
    } catch (e) {
      print('Error writing data: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firebase Database Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: readData,
              child: Text('Read Data'),
            ),
            ElevatedButton(
              onPressed: writeData,
              child: Text('Write Data'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部