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;
|
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
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_timetable_interface/flutter_timetable_interface.dart';
|
|
||||||
import 'package:flutter_timetable_view/flutter_timetable_view.dart';
|
import 'package:flutter_timetable_view/flutter_timetable_view.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name: timetable_example
|
name: flutter_timetable_view_example
|
||||||
description: Timetable Widget
|
description: Timetable Widget
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
|
@ -8,3 +8,4 @@ export 'src/models/table_theme.dart';
|
||||||
export 'src/timetable.dart';
|
export 'src/timetable.dart';
|
||||||
export 'src/widgets/block.dart';
|
export 'src/widgets/block.dart';
|
||||||
export 'src/widgets/table.dart';
|
export 'src/widgets/table.dart';
|
||||||
|
export 'src/models/time_block.dart';
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
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.
|
/// Combine blocks that have the same id and the same time.
|
||||||
List<TimeBlock> combineBlocksWithId(List<TimeBlock> blocks) {
|
List<TimeBlock> combineBlocksWithId(List<TimeBlock> blocks) {
|
||||||
|
|
|
@ -6,9 +6,9 @@ import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.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/block_service.dart';
|
||||||
import 'package:flutter_timetable_view/src/models/table_theme.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/block.dart';
|
||||||
|
|
||||||
import 'package:flutter_timetable_view/src/widgets/table.dart' as table;
|
import 'package:flutter_timetable_view/src/widgets/table.dart' as table;
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.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/block_service.dart';
|
||||||
|
import 'package:flutter_timetable_view/src/models/time_block.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
group('test combineBlocksWithId', () {
|
group('test combineBlocksWithId', () {
|
||||||
|
|
Loading…
Reference in a new issue