mirror of
https://github.com/Iconica-Development/flutter_timetable.git
synced 2025-05-18 19:43:43 +02:00
feat: add firebase service for fetching timetable events
This commit is contained in:
parent
651ed33cfc
commit
f031828067
16 changed files with 200 additions and 6 deletions
23
packages/flutter_timetable_firebase/example/lib/main.dart
Normal file
23
packages/flutter_timetable_firebase/example/lib/main.dart
Normal file
|
@ -0,0 +1,23 @@
|
|||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:flutter_timetable_firebase/flutter_timetable_firebase.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
|
||||
class MyRosterModel extends TimetableEvent {
|
||||
const MyRosterModel({
|
||||
required super.end,
|
||||
required super.start,
|
||||
required super.entityId,
|
||||
required super.eventId,
|
||||
this.isSick = false,
|
||||
});
|
||||
|
||||
final bool isSick;
|
||||
}
|
||||
|
||||
final myRosterServiceProvider = Provider(
|
||||
(ref) => FirebaseTimetableService<MyRosterModel>(
|
||||
options: FirebaseTimetableOptions(timelineCollectionName: 'roster'),
|
||||
),
|
||||
);
|
||||
|
||||
void main() {}
|
30
packages/flutter_timetable_firebase/example/pubspec.yaml
Normal file
30
packages/flutter_timetable_firebase/example/pubspec.yaml
Normal file
|
@ -0,0 +1,30 @@
|
|||
name: flutter_timetable_firebase_example
|
||||
description: Timetable Widget
|
||||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.1.0+2
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
cupertino_icons: ^1.0.2
|
||||
flutter_timetable_firebase:
|
||||
path: ../
|
||||
flutter_timetable_interface:
|
||||
path: ../../flutter_timetable_interface
|
||||
hooks_riverpod: ^2.4.9
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
flutter_lints: ^2.0.0
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
|
@ -0,0 +1,8 @@
|
|||
// SPDX-FileCopyrightText: 2023 Iconica
|
||||
//
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
library flutter_timetable_firebase;
|
||||
|
||||
export 'src/config/firebase_timetable_options.dart';
|
||||
export 'src/services/firebase_timetable_service.dart';
|
|
@ -0,0 +1,21 @@
|
|||
// SPDX-FileCopyrightText: 2023 Iconica
|
||||
//
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
@immutable
|
||||
class FirebaseTimetableOptions {
|
||||
const FirebaseTimetableOptions({
|
||||
this.timelineCollectionName = 'timetable',
|
||||
});
|
||||
|
||||
final String timelineCollectionName;
|
||||
}
|
||||
|
||||
enum FirebaseTimetableServiceStrategy {
|
||||
alwaysFetch,
|
||||
fetchOnce,
|
||||
fetchOnceAndListen,
|
||||
listen,
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
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>
|
||||
with ChangeNotifier
|
||||
implements TimetableService<Event> {
|
||||
FirebaseTimetableService({
|
||||
required this.options,
|
||||
});
|
||||
|
||||
final FirebaseTimetableOptions options;
|
||||
|
||||
@override
|
||||
Future<void> addEvent(event) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> checkForConflict(event, DateTime day) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteEvent(Event event) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
List<Event> getEventsForDay(DateTime day) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateEvent(Event event) async {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
28
packages/flutter_timetable_firebase/pubspec.yaml
Normal file
28
packages/flutter_timetable_firebase/pubspec.yaml
Normal file
|
@ -0,0 +1,28 @@
|
|||
# SPDX-FileCopyrightText: 2023 Iconica
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
name: flutter_timetable_firebase
|
||||
description: A new Flutter package project.
|
||||
version: 2.0.0
|
||||
repository: https://github.com/Iconica-Development/flutter_timetable
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.1.0 <4.0.0"
|
||||
flutter: ">=1.17.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_timetable_interface:
|
||||
git:
|
||||
url: https://github.com/Iconica-Development/flutter_timetable
|
||||
ref: 2.0.0
|
||||
path: packages/flutter_timetable_interface
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
flutter_lints: ^2.0.0
|
||||
|
||||
flutter:
|
|
@ -4,4 +4,5 @@
|
|||
|
||||
library flutter_timetable_interface;
|
||||
|
||||
export 'src/model/time_block.dart';
|
||||
export 'src/models/timetable_event.dart';
|
||||
export 'src/services/timetable_service.dart';
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// SPDX-FileCopyrightText: 2023 Iconica
|
||||
//
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
@immutable
|
||||
class TimetableEvent {
|
||||
/// The model used for a [Block] in a [TimeTable] which can contain a Widget.
|
||||
const TimetableEvent({
|
||||
required this.start,
|
||||
required this.end,
|
||||
required this.entityId,
|
||||
required this.eventId,
|
||||
});
|
||||
|
||||
/// The date at which the event starts
|
||||
final DateTime start;
|
||||
|
||||
/// The date at which the event ends
|
||||
final DateTime end;
|
||||
|
||||
/// The unique identifier of the event
|
||||
/// This is used to store the events
|
||||
final String eventId;
|
||||
|
||||
/// The identifier of the entity that the event belongs to
|
||||
/// This is used to check for conflicts between entities
|
||||
final String entityId;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
abstract class TimetableService<Event> with ChangeNotifier {
|
||||
Future<List<Event>> fetchEventsForDay(DateTime day);
|
||||
List<Event> getEventsForDay(DateTime day);
|
||||
Future<void> addEvent(Event event);
|
||||
Future<void> updateEvent(Event event);
|
||||
Future<void> deleteEvent(Event event);
|
||||
Future<bool> checkForConflict(Event event, DateTime day);
|
||||
}
|
|
@ -3,7 +3,6 @@
|
|||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
import 'package:flutter_timetable_view/flutter_timetable_view.dart';
|
||||
|
||||
void main() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name: timetable_example
|
||||
name: flutter_timetable_view_example
|
||||
description: Timetable Widget
|
||||
|
||||
publish_to: 'none'
|
||||
|
|
|
@ -8,3 +8,4 @@ export 'src/models/table_theme.dart';
|
|||
export 'src/timetable.dart';
|
||||
export 'src/widgets/block.dart';
|
||||
export 'src/widgets/table.dart';
|
||||
export 'src/models/time_block.dart';
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
import 'package:flutter_timetable_view/src/models/time_block.dart';
|
||||
|
||||
/// Combine blocks that have the same id and the same time.
|
||||
List<TimeBlock> combineBlocksWithId(List<TimeBlock> blocks) {
|
||||
|
|
|
@ -6,9 +6,9 @@ import 'dart:math';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
import 'package:flutter_timetable_view/src/block_service.dart';
|
||||
import 'package:flutter_timetable_view/src/models/table_theme.dart';
|
||||
import 'package:flutter_timetable_view/src/models/time_block.dart';
|
||||
import 'package:flutter_timetable_view/src/widgets/block.dart';
|
||||
|
||||
import 'package:flutter_timetable_view/src/widgets/table.dart' as table;
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
||||
import 'package:flutter_timetable_view/src/block_service.dart';
|
||||
import 'package:flutter_timetable_view/src/models/time_block.dart';
|
||||
|
||||
void main() {
|
||||
group('test combineBlocksWithId', () {
|
||||
|
|
Loading…
Reference in a new issue