FirebaseManager
⚠️ This README file may not be true, you should check the code and test it before you use it. (See the example is best for use it)
A way to manage Firebase easily in Flutter.
setup your application by FirebaseManager
steps:
- add the FirebaseManager library to your
pubspec.yamlfile of your project - run shell(after you add or remove login provider on firebase you should redo this):
firebase login
dart pub global activate flutterfire_cli
flutter pub add firebase_core
flutterfire configure
- change your main method like:
import 'package:firebase_manager/firebase_manager.dart';
import 'package:flutter/material.dart';
import 'firebase_options.dart';
void main() async {
fs.initApp(
options: DefaultFirebaseOptions.currentPlatform,
appName: 'your_app_name',
isDebug: false,
runApp: () async {
runApp(const MyApp());
});
}
- Switch on your using services on Firebase site, like Database, Authentication, Storage...
- if you use Authentication for Android do
cd android,./gradlew signingReportand copy your SHA1 and SHA-256 to yourFirebase > project settings
- if you use Authentication for Android do
- Build and fix your project errors, see Android Build Error
Android google auth
You should run ./gradlew signingReport on your Android folder.
If needed you should run before that:
eval "$(jenv init -)"
jenv add /Library/Java/JavaVirtualMachines/jdk-11.0.15.1.jdk/Contents/Home
jenv versions
jenv local oracle64-11.0.15.1
After ./gradlew signingReport finished you should copy the SHA1 and SHA-256 to your Firebase project settings.
After this, you should rerun flutterfire configure
Android Build Error
if need do this:
in android/app/build.gradle android{defaultConfig{...}} modify to minSdkVersion 19, add multiDexEnabled true.
in same file in dependencies{...} add implementation 'androidx.multidex:multidex:2.0.1'
in android/build.gradle buildscript{dependencies{...}} modify to classpath 'com.google.gms:google-services:4.3.14'
get all Firebase features by one instance
use FirebaseManager.share or fs, they are the same instance.
How to access Firebase storage?
Use fs.storage you can get an instance to access all features in Firebase storage
For example:
final file = await fs.storage.getFileAuto('a/b/c/d.jpg');
This example will auto-check the file that exists in the local directory, if not exist it will download the file from Firebase storage.
The feature of FilePool
There is a feature named FilePool in FirebaseManager, it keeps files on Firebase using the md5 file name,
Get a widget to show the image on the server by file
you can use FmFilePoolImage
firestore gets a random ID doc and gets the id
example:
final mainColl = fs.fireStore.getMainColl();
final doc = mainColl.getRandomNameDoc();
final id = doc.getID();
If you want to get a map(data) that includes ID
you can use FireDocgetIncludeIDMap()
MacOS
you should add this to your DebugProfile.entitlements and ReleaseProfile.entitlements
<key>com.apple.security.network.client</key>
<true/>
If you use json_serializable and Firestore
You can use @FirestoreDateTimeConverter() on your DateTime to convert a DateTime to a JSON serializable and save it to Firestore.
like this:
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:task_manager/dataset/firebase_util/firestore_date_time_converter.dart';
import 'package:cloud_firestore_platform_interface/cloud_firestore_platform_interface.dart';
part 'task_dataset.freezed.dart';
part 'task_dataset.g.dart';
@freezed
class TaskDataset with _$TaskDataset {
const factory TaskDataset({
required String task,
required bool isDone,
@FirestoreDateTimeConverter() required DateTime? createdAt,
bool? stared,
}) = _TaskDataset;
factory TaskDataset.fromJson(Map<String, dynamic> json) =>
_$TaskDatasetFromJson(json);
}
TODO
- link fm_firestore
- mssaging