diff --git a/packages/flutter_timetable_firebase/example/lib/main.dart b/packages/flutter_timetable_firebase/example/lib/main.dart new file mode 100644 index 0000000..5eae2ef --- /dev/null +++ b/packages/flutter_timetable_firebase/example/lib/main.dart @@ -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( + options: FirebaseTimetableOptions(timelineCollectionName: 'roster'), + ), +); + +void main() {} diff --git a/packages/flutter_timetable_firebase/example/pubspec.yaml b/packages/flutter_timetable_firebase/example/pubspec.yaml new file mode 100644 index 0000000..21552dd --- /dev/null +++ b/packages/flutter_timetable_firebase/example/pubspec.yaml @@ -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 diff --git a/packages/flutter_timetable_firebase/lib/flutter_timetable_firebase.dart b/packages/flutter_timetable_firebase/lib/flutter_timetable_firebase.dart new file mode 100644 index 0000000..435a8ce --- /dev/null +++ b/packages/flutter_timetable_firebase/lib/flutter_timetable_firebase.dart @@ -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'; diff --git a/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart b/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.dart new file mode 100644 index 0000000..7accb14 --- /dev/null +++ b/packages/flutter_timetable_firebase/lib/src/config/firebase_timetable_options.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, +} diff --git a/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart b/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart new file mode 100644 index 0000000..1a48420 --- /dev/null +++ b/packages/flutter_timetable_firebase/lib/src/services/firebase_timetable_service.dart @@ -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 + with ChangeNotifier + implements TimetableService { + FirebaseTimetableService({ + required this.options, + }); + + final FirebaseTimetableOptions options; + + @override + Future addEvent(event) async { + throw UnimplementedError(); + } + + @override + Future checkForConflict(event, DateTime day) async { + throw UnimplementedError(); + } + + @override + Future deleteEvent(Event event) async { + throw UnimplementedError(); + } + + @override + Future> fetchEventsForDay(DateTime day) async { + throw UnimplementedError(); + } + + @override + List getEventsForDay(DateTime day) { + throw UnimplementedError(); + } + + @override + Future updateEvent(Event event) async { + throw UnimplementedError(); + } +} diff --git a/packages/flutter_timetable_firebase/pubspec.yaml b/packages/flutter_timetable_firebase/pubspec.yaml new file mode 100644 index 0000000..38a6512 --- /dev/null +++ b/packages/flutter_timetable_firebase/pubspec.yaml @@ -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: diff --git a/packages/flutter_timetable_interface/lib/flutter_timetable_interface.dart b/packages/flutter_timetable_interface/lib/flutter_timetable_interface.dart index 02c17bd..5c42114 100644 --- a/packages/flutter_timetable_interface/lib/flutter_timetable_interface.dart +++ b/packages/flutter_timetable_interface/lib/flutter_timetable_interface.dart @@ -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'; diff --git a/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart b/packages/flutter_timetable_interface/lib/src/models/timetable_event.dart new file mode 100644 index 0000000..d3d7ce1 --- /dev/null +++ b/packages/flutter_timetable_interface/lib/src/models/timetable_event.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; +} diff --git a/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart b/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart new file mode 100644 index 0000000..efffb60 --- /dev/null +++ b/packages/flutter_timetable_interface/lib/src/services/timetable_service.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; + +abstract class TimetableService with ChangeNotifier { + Future> fetchEventsForDay(DateTime day); + List getEventsForDay(DateTime day); + Future addEvent(Event event); + Future updateEvent(Event event); + Future deleteEvent(Event event); + Future checkForConflict(Event event, DateTime day); +} diff --git a/packages/flutter_timetable_view/example/lib/main.dart b/packages/flutter_timetable_view/example/lib/main.dart index 5075274..8f4660f 100644 --- a/packages/flutter_timetable_view/example/lib/main.dart +++ b/packages/flutter_timetable_view/example/lib/main.dart @@ -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() { diff --git a/packages/flutter_timetable_view/example/pubspec.yaml b/packages/flutter_timetable_view/example/pubspec.yaml index e335921..f13fecb 100644 --- a/packages/flutter_timetable_view/example/pubspec.yaml +++ b/packages/flutter_timetable_view/example/pubspec.yaml @@ -1,4 +1,4 @@ -name: timetable_example +name: flutter_timetable_view_example description: Timetable Widget publish_to: 'none' diff --git a/packages/flutter_timetable_view/lib/flutter_timetable_view.dart b/packages/flutter_timetable_view/lib/flutter_timetable_view.dart index ce2f586..d656a94 100644 --- a/packages/flutter_timetable_view/lib/flutter_timetable_view.dart +++ b/packages/flutter_timetable_view/lib/flutter_timetable_view.dart @@ -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'; diff --git a/packages/flutter_timetable_view/lib/src/block_service.dart b/packages/flutter_timetable_view/lib/src/block_service.dart index eb0b8ca..aeba946 100644 --- a/packages/flutter_timetable_view/lib/src/block_service.dart +++ b/packages/flutter_timetable_view/lib/src/block_service.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 combineBlocksWithId(List blocks) { diff --git a/packages/flutter_timetable_interface/lib/src/model/time_block.dart b/packages/flutter_timetable_view/lib/src/models/time_block.dart similarity index 100% rename from packages/flutter_timetable_interface/lib/src/model/time_block.dart rename to packages/flutter_timetable_view/lib/src/models/time_block.dart diff --git a/packages/flutter_timetable_view/lib/src/timetable.dart b/packages/flutter_timetable_view/lib/src/timetable.dart index 3467dc9..ce79695 100644 --- a/packages/flutter_timetable_view/lib/src/timetable.dart +++ b/packages/flutter_timetable_view/lib/src/timetable.dart @@ -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; diff --git a/packages/flutter_timetable_view/test/block_service_test.dart b/packages/flutter_timetable_view/test/block_service_test.dart index a74c83e..3b9df6c 100644 --- a/packages/flutter_timetable_view/test/block_service_test.dart +++ b/packages/flutter_timetable_view/test/block_service_test.dart @@ -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', () {