mirror of
https://github.com/Iconica-Development/flutter_timetable.git
synced 2025-05-18 19:43:43 +02:00
feat: add firebase timetable options
This commit is contained in:
parent
f031828067
commit
32b9f9f2c5
8 changed files with 52 additions and 14 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -29,6 +29,8 @@ pubspec.lock
|
|||
.packages
|
||||
build/
|
||||
.metadata
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
|
||||
android/
|
||||
ios/
|
||||
|
|
|
@ -16,7 +16,7 @@ class MyRosterModel extends TimetableEvent {
|
|||
|
||||
final myRosterServiceProvider = Provider(
|
||||
(ref) => FirebaseTimetableService<MyRosterModel>(
|
||||
options: FirebaseTimetableOptions(timelineCollectionName: 'roster'),
|
||||
options: FirebaseTimetableOptions(timetableCollectionName: 'roster'),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
@ -7,15 +7,23 @@ import 'package:flutter/material.dart';
|
|||
@immutable
|
||||
class FirebaseTimetableOptions {
|
||||
const FirebaseTimetableOptions({
|
||||
this.timelineCollectionName = 'timetable',
|
||||
this.timetableCollectionName = 'timetable',
|
||||
this.cachingStrategy = TimetableCachingStrategy.alwaysFetch,
|
||||
});
|
||||
// the collection reference name
|
||||
final String timetableCollectionName;
|
||||
|
||||
final String timelineCollectionName;
|
||||
/// Changes the Firebase Timetable Service to use different caching approaches
|
||||
final TimetableCachingStrategy cachingStrategy;
|
||||
}
|
||||
|
||||
enum FirebaseTimetableServiceStrategy {
|
||||
enum TimetableCachingStrategy {
|
||||
// Everytime the timetable is requested it will be fetched from the database
|
||||
alwaysFetch,
|
||||
// if you use fetchOnce the timetable events will be fetched only once
|
||||
fetchOnce,
|
||||
// will first be fetched and after that updates will be listened to
|
||||
fetchOnceAndListen,
|
||||
// if you use listen the timetable events will be updated in real time
|
||||
listen,
|
||||
}
|
||||
|
|
|
@ -1,23 +1,33 @@
|
|||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_timetable_firebase/src/config/firebase_timetable_options.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
|
||||
class FirebaseTimetableService<Event>
|
||||
class FirebaseTimetableService<Event extends TimetableEvent>
|
||||
with ChangeNotifier
|
||||
implements TimetableService<Event> {
|
||||
FirebaseTimetableService({
|
||||
required this.options,
|
||||
});
|
||||
FirebaseApp? app,
|
||||
options = const FirebaseTimetableOptions(),
|
||||
}) {
|
||||
var appInstance = app ?? Firebase.app();
|
||||
_db = FirebaseFirestore.instanceFor(app: appInstance);
|
||||
_options = options;
|
||||
}
|
||||
|
||||
final FirebaseTimetableOptions options;
|
||||
late FirebaseTimetableOptions _options;
|
||||
late FirebaseFirestore _db;
|
||||
|
||||
@override
|
||||
Future<void> addEvent(event) async {
|
||||
Future<void> addEvent(Event event) async {
|
||||
event.toJson();
|
||||
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> checkForConflict(event, DateTime day) async {
|
||||
Future<bool> checkForConflict(Event event, DateTime day) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
@ -27,12 +37,13 @@ class FirebaseTimetableService<Event>
|
|||
}
|
||||
|
||||
@override
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day) async {
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day,
|
||||
{String? category}) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
List<Event> getEventsForDay(DateTime day) {
|
||||
List<Event> getEventsForDay(DateTime day, {String? category}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ environment:
|
|||
flutter: ">=1.17.0"
|
||||
|
||||
dependencies:
|
||||
cloud_firestore: ^4.13.3
|
||||
firebase_core: ^2.24.0
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_timetable_interface:
|
||||
|
|
|
@ -12,6 +12,7 @@ class TimetableEvent {
|
|||
required this.end,
|
||||
required this.entityId,
|
||||
required this.eventId,
|
||||
this.category,
|
||||
});
|
||||
|
||||
/// The date at which the event starts
|
||||
|
@ -27,4 +28,18 @@ class TimetableEvent {
|
|||
/// The identifier of the entity that the event belongs to
|
||||
/// This is used to check for conflicts between entities
|
||||
final String entityId;
|
||||
|
||||
/// This can be used to filter events
|
||||
final String? category;
|
||||
|
||||
// tojson method and a factory fromJson contructor
|
||||
Map<String, dynamic> toJson() => {};
|
||||
|
||||
factory TimetableEvent.fromJson(String eventId, Map<String, dynamic> json) =>
|
||||
TimetableEvent(
|
||||
start: json['start'],
|
||||
end: json['end'],
|
||||
entityId: json[''],
|
||||
eventId: eventId,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
abstract class TimetableService<Event> with ChangeNotifier {
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day);
|
||||
List<Event> getEventsForDay(DateTime day);
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day, {String? category});
|
||||
List<Event> getEventsForDay(DateTime day, {String? category});
|
||||
Future<void> addEvent(Event event);
|
||||
Future<void> updateEvent(Event event);
|
||||
Future<void> deleteEvent(Event event);
|
||||
|
|
Loading…
Reference in a new issue