mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-19 13:13:44 +02:00
feat: change local data interface implementation to singleton
According to our agreed appshell architecture we will make the local implementations as singletons to represent a single source persistent layer, like a database. On top of that, the service should be usable across multiple instances of the service, even if no datasource is provided.
This commit is contained in:
parent
1473ea1a7a
commit
12bde64117
5 changed files with 25 additions and 16 deletions
|
@ -3,7 +3,6 @@ import "dart:async";
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/src/config/availability_translations.dart";
|
import "package:flutter_availability/src/config/availability_translations.dart";
|
||||||
import "package:flutter_availability/src/service/errors.dart";
|
import "package:flutter_availability/src/service/errors.dart";
|
||||||
import "package:flutter_availability/src/service/local_data_interface.dart";
|
|
||||||
import "package:flutter_availability/src/ui/widgets/defaults/default_base_screen.dart";
|
import "package:flutter_availability/src/ui/widgets/defaults/default_base_screen.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/defaults/default_buttons.dart";
|
import "package:flutter_availability/src/ui/widgets/defaults/default_buttons.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/defaults/default_confirmation_dialog.dart";
|
import "package:flutter_availability/src/ui/widgets/defaults/default_confirmation_dialog.dart";
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
library flutter_availability_data_interface;
|
library flutter_availability_data_interface;
|
||||||
|
|
||||||
export "src/data_interface.dart";
|
export "src/data_interface.dart";
|
||||||
|
export "src/local_repository/local_data_interface.dart";
|
||||||
export "src/models/availability.dart";
|
export "src/models/availability.dart";
|
||||||
export "src/models/templates.dart";
|
export "src/models/templates.dart";
|
||||||
export "src/service/availability_service.dart";
|
export "src/service/availability_service.dart";
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import "package:flutter/material.dart";
|
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||||
|
|
||||||
/// Returns the default local availabilities for a user
|
/// Returns the default local availabilities for a user
|
||||||
|
@ -36,18 +35,18 @@ List<AvailabilityModel> getDefaultLocalAvailabilitiesForUser() {
|
||||||
List<AvailabilityTemplateModel> getDefaultLocalTemplatesForUser() {
|
List<AvailabilityTemplateModel> getDefaultLocalTemplatesForUser() {
|
||||||
var currentMonth = DateTime(DateTime.now().year, DateTime.now().month);
|
var currentMonth = DateTime(DateTime.now().year, DateTime.now().month);
|
||||||
return [
|
return [
|
||||||
for (var template in <(String, String, Color)>[
|
for (var template in <(String, String, int)>[
|
||||||
("1", "Morning", Colors.blue),
|
("1", "Morning", 0xFF0000FF),
|
||||||
("2", "Afternoon", Colors.green),
|
("2", "Afternoon", 0xFF00FF00),
|
||||||
("3", "Evening", Colors.red),
|
("3", "Evening", 0xFFFF0000),
|
||||||
("4", "Night", Colors.purple),
|
("4", "Night", 0xFFFF00FF),
|
||||||
("5", "All day", Colors.orange),
|
("5", "All day", 0xFF9999),
|
||||||
]) ...[
|
]) ...[
|
||||||
AvailabilityTemplateModel(
|
AvailabilityTemplateModel(
|
||||||
id: template.$1,
|
id: template.$1,
|
||||||
userId: "",
|
userId: "",
|
||||||
name: template.$2,
|
name: template.$2,
|
||||||
color: template.$3.value,
|
color: template.$3,
|
||||||
templateType: AvailabilityTemplateType.day,
|
templateType: AvailabilityTemplateType.day,
|
||||||
templateData: DayTemplateData(
|
templateData: DayTemplateData(
|
||||||
startTime: currentMonth,
|
startTime: currentMonth,
|
|
@ -1,17 +1,26 @@
|
||||||
import "dart:async";
|
import "dart:async";
|
||||||
|
|
||||||
import "package:flutter_availability/src/service/initial_data.dart";
|
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||||
|
import "package:flutter_availability_data_interface/src/local_repository/initial_data.dart";
|
||||||
|
import "package:rxdart/rxdart.dart";
|
||||||
|
|
||||||
/// A local implementation of the [AvailabilityDataInterface] that stores data
|
/// A local implementation of the [AvailabilityDataInterface] that stores data
|
||||||
/// in memory.
|
/// in memory.
|
||||||
class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
||||||
|
/// Creates a representation of the local data interface.
|
||||||
///
|
///
|
||||||
LocalAvailabilityDataInterface() {
|
/// A second call of the constructor will return the same value as earlier
|
||||||
|
/// calls according to the singleton principle
|
||||||
|
factory LocalAvailabilityDataInterface() =>
|
||||||
|
_localDataInterface ??= LocalAvailabilityDataInterface._();
|
||||||
|
|
||||||
|
LocalAvailabilityDataInterface._() {
|
||||||
_notifyAvailabilityChanges();
|
_notifyAvailabilityChanges();
|
||||||
_notifyTemplateChanges();
|
_notifyTemplateChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LocalAvailabilityDataInterface? _localDataInterface;
|
||||||
|
|
||||||
final Map<String, List<AvailabilityModel>> _userAvailabilities = {
|
final Map<String, List<AvailabilityModel>> _userAvailabilities = {
|
||||||
"": getDefaultLocalAvailabilitiesForUser(),
|
"": getDefaultLocalAvailabilitiesForUser(),
|
||||||
};
|
};
|
||||||
|
@ -21,9 +30,9 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
||||||
};
|
};
|
||||||
|
|
||||||
final StreamController<Map<String, List<AvailabilityModel>>>
|
final StreamController<Map<String, List<AvailabilityModel>>>
|
||||||
_availabilityController = StreamController.broadcast();
|
_availabilityController = BehaviorSubject();
|
||||||
final StreamController<Map<String, List<AvailabilityTemplateModel>>>
|
final StreamController<Map<String, List<AvailabilityTemplateModel>>>
|
||||||
_templateController = StreamController.broadcast();
|
_templateController = BehaviorSubject();
|
||||||
|
|
||||||
void _notifyAvailabilityChanges() {
|
void _notifyAvailabilityChanges() {
|
||||||
_availabilityController.add(_userAvailabilities);
|
_availabilityController.add(_userAvailabilities);
|
|
@ -1,4 +1,5 @@
|
||||||
import "package:flutter_availability_data_interface/src/data_interface.dart";
|
import "package:flutter_availability_data_interface/src/data_interface.dart";
|
||||||
|
import "package:flutter_availability_data_interface/src/local_repository/local_data_interface.dart";
|
||||||
import "package:flutter_availability_data_interface/src/models/availability.dart";
|
import "package:flutter_availability_data_interface/src/models/availability.dart";
|
||||||
import "package:flutter_availability_data_interface/src/models/templates.dart";
|
import "package:flutter_availability_data_interface/src/models/templates.dart";
|
||||||
import "package:flutter_availability_data_interface/src/utils/public.dart";
|
import "package:flutter_availability_data_interface/src/utils/public.dart";
|
||||||
|
@ -7,10 +8,10 @@ import "package:rxdart/rxdart.dart";
|
||||||
///
|
///
|
||||||
class AvailabilityService {
|
class AvailabilityService {
|
||||||
///
|
///
|
||||||
const AvailabilityService({
|
AvailabilityService({
|
||||||
required this.userId,
|
required this.userId,
|
||||||
required this.dataInterface,
|
AvailabilityDataInterface? dataInterface,
|
||||||
});
|
}) : dataInterface = dataInterface ?? LocalAvailabilityDataInterface();
|
||||||
|
|
||||||
/// The user id for which the availabilities are managed
|
/// The user id for which the availabilities are managed
|
||||||
final String userId;
|
final String userId;
|
||||||
|
|
Loading…
Reference in a new issue