mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-18 20:53:45 +02:00
feat: add example templates to the local service and update stream after initialization
This commit is contained in:
parent
39da1a4f21
commit
fe2786d34f
3 changed files with 104 additions and 32 deletions
|
@ -47,7 +47,7 @@ class Home extends StatelessWidget {
|
|||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () async {
|
||||
debugPrint("starting availability user story");
|
||||
await openAvailabilitiesForUser(context, "anonymous", null);
|
||||
await openAvailabilitiesForUser(context, "", null);
|
||||
debugPrint("finishing availability user story");
|
||||
},
|
||||
),
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||
|
||||
/// Returns the default local availabilities for a user
|
||||
List<AvailabilityModel> getDefaultLocalAvailabilitiesForUser() {
|
||||
var currentMonth = DateTime(DateTime.now().year, DateTime.now().month);
|
||||
return [
|
||||
for (var availability in <(String, int, String)>[
|
||||
("1", 0, "1"),
|
||||
("2", 2, "2"),
|
||||
("3", 3, "2"),
|
||||
("4", 6, "4"),
|
||||
("5", 8, "5"),
|
||||
]) ...[
|
||||
AvailabilityModel(
|
||||
id: availability.$1,
|
||||
userId: "",
|
||||
startDate: currentMonth.add(Duration(days: availability.$2)),
|
||||
endDate: currentMonth.add(Duration(days: availability.$2)),
|
||||
breaks: [],
|
||||
templateId: availability.$3,
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/// returns the default local templates for a user
|
||||
List<AvailabilityTemplateModel> getDefaultLocalTemplatesForUser() {
|
||||
var currentMonth = DateTime(DateTime.now().year, DateTime.now().month);
|
||||
return [
|
||||
for (var template in <(String, String, Color)>[
|
||||
("1", "Morning", Colors.blue),
|
||||
("2", "Afternoon", Colors.green),
|
||||
("3", "Evening", Colors.red),
|
||||
("4", "Night", Colors.purple),
|
||||
("5", "All day", Colors.orange),
|
||||
]) ...[
|
||||
AvailabilityTemplateModel(
|
||||
id: template.$1,
|
||||
userId: "",
|
||||
name: template.$2,
|
||||
color: template.$3.value,
|
||||
templateType: AvailabilityTemplateType.day,
|
||||
templateData: DayTemplateData(
|
||||
startTime: currentMonth,
|
||||
endTime: currentMonth,
|
||||
breaks: [],
|
||||
),
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
|
@ -1,12 +1,24 @@
|
|||
import "dart:async";
|
||||
|
||||
import "package:flutter_availability/src/service/initial_data.dart";
|
||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||
|
||||
/// A local implementation of the [AvailabilityDataInterface] that stores data
|
||||
/// in memory.
|
||||
class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
||||
final Map<String, List<AvailabilityModel>> _userAvailabilities = {};
|
||||
final Map<String, List<AvailabilityTemplateModel>> _userTemplates = {};
|
||||
///
|
||||
LocalAvailabilityDataInterface() {
|
||||
_notifyAvailabilityChanges();
|
||||
_notifyTemplateChanges();
|
||||
}
|
||||
|
||||
final Map<String, List<AvailabilityModel>> _userAvailabilities = {
|
||||
"": getDefaultLocalAvailabilitiesForUser(),
|
||||
};
|
||||
|
||||
final Map<String, List<AvailabilityTemplateModel>> _userTemplates = {
|
||||
"": getDefaultLocalTemplatesForUser(),
|
||||
};
|
||||
|
||||
final StreamController<Map<String, List<AvailabilityModel>>>
|
||||
_availabilityController = StreamController.broadcast();
|
||||
|
@ -105,8 +117,12 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
|||
required String userId,
|
||||
DateTime? start,
|
||||
DateTime? end,
|
||||
}) =>
|
||||
_availabilityController.stream.map((availabilitiesMap) {
|
||||
}) {
|
||||
// load the availabilities 1 second later to simulate a network request
|
||||
Future.delayed(const Duration(seconds: 1), _notifyAvailabilityChanges);
|
||||
|
||||
return _availabilityController.stream
|
||||
.map<List<AvailabilityModel>>((availabilitiesMap) {
|
||||
var availabilities = availabilitiesMap[userId];
|
||||
if (availabilities != null) {
|
||||
if (start != null && end != null) {
|
||||
|
@ -123,7 +139,8 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
|||
} else {
|
||||
return [];
|
||||
}
|
||||
});
|
||||
}).handleError((error) => []);
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<AvailabilityModel> getAvailabilityForUserById(
|
||||
|
@ -158,8 +175,10 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
|||
Stream<List<AvailabilityTemplateModel>> getTemplatesForUser({
|
||||
required String userId,
|
||||
List<String>? templateIds,
|
||||
}) =>
|
||||
_templateController.stream.map((templatesMap) {
|
||||
}) {
|
||||
// load the templates 1 second later to simulate a network request
|
||||
Future.delayed(const Duration(seconds: 1), _notifyTemplateChanges);
|
||||
return _templateController.stream.map((templatesMap) {
|
||||
var templates = templatesMap[userId];
|
||||
if (templateIds != null) {
|
||||
return templates
|
||||
|
@ -169,7 +188,8 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
|||
} else {
|
||||
return templates ?? [];
|
||||
}
|
||||
});
|
||||
}).handleError((error) => []);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<AvailabilityModel> updateAvailabilityForUser(
|
||||
|
|
Loading…
Reference in a new issue